FaceRank-人臉打分基於 TensorFlow 的 CNN 模型,這個妹子顏值幾分? FaceRank 告訴你!

FaceRank-人臉打分基於 TensorFlow 的 CNN 模型

機器學習是不是很無聊,用來用去都是識別字體。能不能幫我找到顏值高的妹子,順便提高一下姿勢水平。

FaceRank 基於 TensorFlow CNN 模型,提供了一些圖片處理的工具集,後續還會提供訓練好的模型。給 FaceRank 一個妹子,他給你個分數。

從此以後篩選簡歷,先把頭像顏值低的去掉;自動尋找女主顏值高的小電影;自動關注美女;自動排除負分滾粗的相親對象。從此以後升職加薪,迎娶白富美,走上人生巔峰。

蒼老師鎮樓:

隱私

因為隱私問題,訓練圖片集並不提供,但是提供了人臉抽取,圖片大小歸一化工具,稍微可能會放一些卡通圖片。

數據集

  • 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_location print("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/

模型效果

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

(?, 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

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

推薦閱讀:

Fully-Convolutional Siamese Networksfor Object Tracking 翻譯筆記
乾貨 | TensorFlow的55個經典案例
機器學習 | 更進一步,用評估器給花卉分類
機器學習基礎:線性回歸

TAG:TensorFlow | 人脸识别 | 机器学习 |