一個基於 TensorFlow 的「顏值評分」開源項目:FaceRank

簡評:用深度學習來評判顏值,已開源。好友 @小灰灰 大大的「顏值評分 FaceRank」,這是基於 TensorFlow 的 CNN 模型,美不美機器說了算。

我們常看到用機器學習識別字體,自動駕駛等項目,今天給大家推薦一個有趣的項目 FaceRank,這是個開源項目,它基於 TensorFlow CNN 模型,提供了一些圖片處理的工具集,後續還會提供訓練好的模型。

從此以後,讓它來幫你尋找高顏值的小電影,幫你篩選附近高顏值的妹子(漢子),讓它幫你給學校或者公司帥哥美女做個排行榜,讓它給明星打分並且你可以自豪的說「一切都是人工智慧的選擇」。。。

以下是機器給蒼老師的打分。

(機器給蒼老師打了 7 分,這已經是很高的分數了,果然德藝雙磬)

數據集

  • 130 張 128*128 張網路圖片,圖片名:1-3.jpg 表示 分值為 1 的第 3 張圖。 你可以把符合這個格式的圖片放在 resize_images 來訓練模型。
  • find_faces_in_picture.py

find_and_save_face 基於 face_recognition 從圖片中找到人臉的坐標,並保存為新圖片。

from PIL import Imageimport face_recognitionimport osprint("h")def find_and_save_face(web_file,face_file):# Load the jpg file into a numpy array image = face_recognition.load_image_file(web_file)print(image.dtype)# Find all the faces in the image face_locations = face_recognition.face_locations(image)print("I found {} face(s) in this photograph.".format(len(face_locations)))for face_location in face_locations:# Print the location of each face in this image top, right, bottom, left = face_locationprint("A face is located at pixel location Top: {}, Left: {}, Bottom: {}, Right: {}".format(top, left, bottom, right))# You can access the actual face itself like this: face_image = image[top:bottom, left:right] pil_image = Image.fromarray(face_image) pil_image.save(face_file)print("h")list = os.listdir("web_image/")print(list)for image in list: id_tag = image.find(".") name=image[0:id_tag]print(name) web_file = "./web_image/" +image face_file="./face_image/"+name+".jpg" im=Image.open("./web_image/"+image)try: find_and_save_face(web_file, face_file)except:print("fail")

  • 然後再用 resize 統一為 128×128 大小,為模型訓練做準備。

模型

人臉打分基於 TensorFlow 的 CNN 模型 代碼參考 : TensorFlow-Examples

卷積神經網路部分代碼,網路結構說明:

  • 卷積層
  • 池化層
  • 卷積層
  • 池化層
  • 全鏈接層

# Create modeldef conv_net(x, weights, biases, dropout):# Reshape input picture x = tf.reshape(x, shape=[-1, 128, 128, 3])# Convolution Layer conv1 = conv2d(x, weights["wc1"], biases["bc1"])print(conv1.shape)# Max Pooling (down-sampling) conv1 = maxpool2d(conv1, k=2)print(conv1.shape)# Convolution Layer conv2 = conv2d(conv1, weights["wc2"], biases["bc2"])print(conv2.shape)# Max Pooling (down-sampling) conv2 = maxpool2d(conv2, k=2)print(conv2.shape)# Fully connected layer# Reshape conv2 output to fit fully connected layer input fc1 = tf.reshape(conv2, [-1, weights["wd1"].get_shape().as_list()[0]]) fc1 = tf.add(tf.matmul(fc1, weights["wd1"]), biases["bd1"]) fc1 = tf.nn.relu(fc1)# Apply Dropout fc1 = tf.nn.dropout(fc1, dropout)# Output, class prediction out = tf.add(tf.matmul(fc1, weights["out"]), biases["out"])return out

運行

安裝好 TensorFlow 之後,直接運行 train_model.py .

  • 訓練模型
  • 保存模型到 model 文件夾

測試

運行完 train_model.py 之後,直接運行 run_model.py 來測試.

下載

訓練好的模型下載網址: (文件較大,正在上傳) tensorflownews.com/

模型效果

  • 訓練過程 你可以看訓練過程:Train_Result.md ,這裡有損失函數和準確率變化過程。
  • 測試結果 結果並不非常好,但是增加數據集之後有所改善。

(?, 128, 128, 24)(?, 64, 64, 24)(?, 64, 64, 96)(?, 32, 32, 96)["1-1.jpg", "1-2.jpg", "10-1.jpg", "10-2.jpg", "2-1.jpg", "2-2.jpg", "3-1.jpg", "3-2.jpg", "4-1.jpg", "4-2.jpg", "5-1.jpg", "5-2.jpg", "6-1.jpg", "6-2.jpg", "7-1.jpg", "7-2.jpg", "8-1.jpg", "8-2.jpg", "9-1.jpg", "9-2.jpg"]20(10, 128, 128, 3)[3 2 8 6 5 8 0 4 7 7](10, 128, 128, 3)[2 6 6 6 5 8 7 8 7 5]Test Finished!

支持

  • 提交 issue
  • Github: github.com/fendouai/Fac

轉載:歡迎轉載,保留出處。

原文:Github - FaceRank

推薦閱讀:

TensorFlow初步(5)
一文打盡:線性回歸和邏輯斯蒂線性回歸
CS224n異聞錄(二)

TAG:人工智能 | TensorFlow | 卷积神经网络CNN |