用深度學習做球星顏值打分完整案例(一)
已經上傳了完整的程式碼和資料,資料比較少,大家可以幫忙補充。
專案地址(記得給個start):https://github.com/jimenbian/face_rank
先來說一下專案的背景,這次做的是一個最基礎的影象識別案例,通過訓練一個模型來給NBA球星的顏值打分,嗯,樓主麥迪、艾弗森球迷。選擇NBA的資料是因為,NBA球星都有正裝照,比較好收集。我們最終呈現的效果是這樣的:先收集球星大臉照,標記出顏值高的和顏值低的,然後使用Tensorflow的CNN網路訓練顏值打分模型,最後可以利用模型對任意球星臉是高顏值或者低顏值來評分。
另外還有一種資料收集的方法,悄悄透漏給大家,如果做美女的顏值打分訓練,男同學可以開啟
講一下工程
實驗環境是PYTHON2.7,Tensorflow版本1.4,無其它依賴庫。
下面看一下整個工程,
face_train.py用來訓練模型
face_test.py用來預測
TrainDataSet存訓練資料
講一下資料
開啟trainDataSet這個資料夾,裡面是分了class1和class2兩個目錄,class1用來存放顏值比較高的球星圖片,如下圖:
class2存放顏值不那麼高的,這樣在訓練的時候就會做到區分,也構成了一個二分類場景,以下是class2的一張例圖:
在構建訓練資料的時候有三個注意事項:
圖片要儘可能清晰,要儘可能多
大小尺寸最好要相同
最好每個圖片只有一張人臉,而且佔據篇幅很大
講一下模型訓練
開啟face_train.py檔案,可以看到整個的訓練程式碼,可以執行這個檔案生成model,下面講一下其中一些關鍵函式的含義,請對照程式碼理解。
1.Model目錄設定
MODE ='folder' # or 'file', if you choose a plain text file (see above).
DATASET_PATH = 'trainDataSet' # the dataset file or root folder path.
# ImageParameters
N_CLASSES= 2 # CHANGE HERE, total number of classes
IMG_HEIGHT= 64 # CHANGE HERE, the image height to be resized to
IMG_WIDTH= 64 # CHANGE HERE, the image width to be resized to
CHANNELS= 3 # The 3 color channels, change to 1 if grayscale
MODE設定了檔案讀取方式,這裡使用folder模式
DATASET_PATH指定的是訓練資料資料夾
N_CLASSES分類的種類,這裡因為分美和醜,所以是2類
IMG_HEIGHT、IMG_WIDTH、CHANNELS:表明資料是64*64畫素的3元彩色圖片
2.讀資料
呼叫的是read_images函式,把訓練資料進行queue讀取,然後把圖片二進位制轉碼,並且將圖片的尺寸統一。生成X,Y對應的是兩個列表,分別對應每個圖片的二進位制格式和所屬的類別是美還是醜。
3.CNN網路
本案例使用的是4層CNN網路結構,對應的是conv_net,具體的CNN說明可以看我之前發的關於CNN的文章:深度學習CNN眼中的圖片是什麼樣的
4.訓練
現在已經生成了整個CNN網路,也有了資料流,接下來就是通過後向傳播訓練整個網路。
通過tf.global_variables_initializer()為訓練網路生成預設引數
然後通過reduce_mean、train.AdamOptimizer這些OP來做模型的引數訓練
train.Coordinator是構建資料流讀取執行緒,一定要加上,不然無法執行
利用tf.train.Saver()儲存整個模型的引數
以上就是模型訓練的一些關鍵的函式,在使用的時候只要clone專案,在根目錄下執行:
python face_train.py
即可生成模型資料夾model目錄:
ok~模型訓練就講完了,下次講如何通過這個模型對單個NBA球星的顏值打分,不知道大家看懂了沒有,此文先給想完整體驗一下深度學習做圖片分析的小白使用者,用的是最基礎的程式碼。最近跳票有點多,主要是加班太猛了~