一個基於 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 來測試.
下載
訓練好的模型下載網址: (文件較大,正在上傳) http://www.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: https://github.com/fendouai/FaceRank
轉載:歡迎轉載,保留出處。
原文:Github - FaceRank
推薦閱讀:
※TensorFlow初步(5)
※一文打盡:線性回歸和邏輯斯蒂線性回歸
※CS224n異聞錄(二)
TAG:人工智能 | TensorFlow | 卷积神经网络CNN |