用深度學習做球星顏值打分完整案例(一)

李博Garvin發表於2018-01-18

已經上傳了完整的程式碼和資料,資料比較少,大家可以幫忙補充。

專案地址(記得給個start):https://github.com/jimenbian/face_rank


先來說一下專案的背景,這次做的是一個最基礎的影象識別案例,通過訓練一個模型來給NBA球星的顏值打分,嗯,樓主麥迪、艾弗森球迷。選擇NBA的資料是因為,NBA球星都有正裝照,比較好收集。我們最終呈現的效果是這樣的:先收集球星大臉照,標記出顏值高的和顏值低的,然後使用TensorflowCNN網路訓練顏值打分模型,最後可以利用模型對任意球星臉是高顏值或者低顏值來評分。


另外還有一種資料收集的方法,悄悄透漏給大家,如果做美女的顏值打分訓練,男同學可以開啟T盤的唐詩三百首目錄,在裡面可以方便的擷取高清人臉大圖。



講一下工程

實驗環境是PYTHON2.7,Tensorflow版本1.4,無其它依賴庫。

下面看一下整個工程,

  • face_train.py用來訓練模型

  • face_test.py用來預測

  • TrainDataSet存訓練資料


 

講一下資料

開啟trainDataSet這個資料夾,裡面是分了class1class2兩個目錄,class1用來存放顏值比較高的球星圖片,如下圖:

 


class2存放顏值不那麼高的,這樣在訓練的時候就會做到區分,也構成了一個二分類場景,以下是class2的一張例圖:


在構建訓練資料的時候有三個注意事項:

  1. 圖片要儘可能清晰,要儘可能多

  2. 大小尺寸最好要相同

  3. 最好每個圖片只有一張人臉,而且佔據篇幅很大

 

講一下模型訓練

開啟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_HEIGHTIMG_WIDTHCHANNELS:表明資料是64*64畫素的3元彩色圖片

 

2.讀資料

呼叫的是read_images函式,把訓練資料進行queue讀取,然後把圖片二進位制轉碼,並且將圖片的尺寸統一。生成X,Y對應的是兩個列表,分別對應每個圖片的二進位制格式和所屬的類別是美還是醜


3.CNN網路

本案例使用的是4CNN網路結構,對應的是conv_net,具體的CNN說明可以看我之前發的關於CNN的文章:深度學習CNN眼中的圖片是什麼樣的


4.訓練

現在已經生成了整個CNN網路,也有了資料流,接下來就是通過後向傳播訓練整個網路。

  • 通過tf.global_variables_initializer()為訓練網路生成預設引數

  • 然後通過reduce_meantrain.AdamOptimizer這些OP來做模型的引數訓練

  • train.Coordinator是構建資料流讀取執行緒,一定要加上,不然無法執行

  • 利用tf.train.Saver()儲存整個模型的引數

 

以上就是模型訓練的一些關鍵的函式,在使用的時候只要clone專案,在根目錄下執行:

python face_train.py

即可生成模型資料夾model目錄:


ok~模型訓練就講完了,下次講如何通過這個模型對單個NBA球星的顏值打分,不知道大家看懂了沒有,此文先給想完整體驗一下深度學習做圖片分析的小白使用者,用的是最基礎的程式碼。最近跳票有點多,主要是加班太猛了~

相關文章