目標乾脆面君:動動手,用TensorFlow API訓練出自己的目標檢測模型
來源:Medium
編譯:Tom R
TensorFlow內包含了一個強大的物體檢測API,我們可以利用這API來訓練自己的數據集實現特殊的目標檢測。Dat Tran就分享了自己實現可愛的浣熊檢測器的經歷,在文章中作者把檢測器的訓練流程進行了梳理,我們可以舉一反三來訓練其他在工作項目中需要的檢測器。下面我們一起來學習一下吧!
GIF/1424K
為什麼要做這件事?
速食麵君不僅可愛,在國外很普遍的與人們平靜地生活在一起。處於對它的喜愛和與浣熊為鄰的情況,作者選擇了它作為檢測器的檢測對象。完成後可以將攝像安裝在房子周圍,檢測是否有浣熊闖入了你家,你就能及時知道是否來了不速之客了。看來浣熊還真多啊!
創建數據集
機器學習需要數據作為原料,那麼我們首先需要做的就是建立起一個可供訓練的數據集,同時我們需要利用符合Tensorflow的數據格式來保持這些數據及其標籤:
1. Tensorflow的物體檢測介面主要使用TFRecord文件格式,我們需要將數據轉換為這個格式;
2.有很多工具可以完成數據的轉換,無論是類似PASCAL VOC數據集或是Oxford Pet數據集的格式,都有很多成熟的腳本來完成轉換,甚至也可以自己寫一個腳本來轉換,跟著文檔解釋不會太難;
3.在準備輸入數據之前你需要考慮兩件事情:其一,你需要一些浣熊的彩色圖片;其二,你需要在圖中浣熊的位置框坐標(xmin,ymin,xmax,ymax)來定位浣熊的位置並進行分類。對於只檢測一種物體來說我們的任務十分簡單,只需要定義一類就可以了;
4.哪裡去找數據呢?互聯網是最大的資源啦。包括各大搜索引擎的圖片搜索和圖像網站,尋找一些不同尺度、位姿、光照下的圖片。作者找了大概兩百張的浣熊圖片來訓練自己的檢測器(數據量有點小,但是來練手還是可以的);
5.有了數據以後我們需要給他們打標籤。分類很簡單都是浣熊,但是我們需要手動在每一張圖中框出浣熊的位置。一個比較好的打標工具是LabelImg。編譯好後只要要在圖片上輕點滑鼠就可以得到PASCAL VOC格式的XML文件,再利用一個腳本就可以轉換成Tensorflow需要的輸入格式了;有時候在Mac上打開jpeg圖像會出現問題,需要將其轉換為png來解決;
6.最後,將圖像的標籤轉換為TFRecord格式後,並將起分為訓練集(~160張)和測試集(~40張)就可以開始下一步的工作了!
小提示:
1. 還有很多圖像標註工具,包括 FIAT (Fast Image Data Annotation Tool)、BBox-Label-Tool、以及matlab自帶的trainingImageLabeler等等,可以根據條件和需要自行選擇;
2. 圖像格式轉換同樣也有很多工具,作者推薦了ImageMagick的工具,當然我們還有ps,美圖的工具,甚至自己寫一個腳本也是一兩分鐘的事;
3. 整個訓練過程中最耗時的就是數據的標註了,作者表示僅僅一類圖像200張的排序和打標籤就花了他兩個多小時的時間,如果需要大量圖像的話還是要情人幫忙或者找標註公司,例如CrowdFlower, CrowdAI 和 Amazon』s Mechanical Turk;
4. 對於圖像的選擇,盡量選擇適中的圖像,要是太大不僅運算速度慢還會造成內存溢出,需要調節訓練批量的大小。
訓練模型
輸入數據搞定後我們就開始訓練模型啦。一般對於物體識別訓練來說有標準的工作流程。首先需要利用一個預訓練模型來作為訓練的基礎,作者使用了ssd_mobilenet_v1。同時需要將分類改變為1,並更改模型、訓練數據、標籤數據的路徑。對於學習率、批量大小和其他超參數先用默認參數來進行訓練。
隨後構建標籤映射就可以進行訓練了。
小提示:
1. API中有一個數據增強選項data_augmentation_option,這個選項對於較為單一的訓練數據來說十分有用。
2. 重要!標籤的值需要從1開始標記,0是一個佔位符,在為每一類分類標籤賦值時需要注意。
做完了這些進一步的準備工作,我們終於可以開始訓練了。我們可以選擇在自己本地的GPU上訓練網路,或者在雲伺服器上訓練。在雲伺服器上可能需要一額外的配置文件。作者使用Google Cloud就需要一個YAML的文件來定義使用機器的參數。
在訓練的過程中,我們可以通過tensorboard來實時監測模型的訓練情況一遍在出現異常時及時調整訓練策略。
下圖是作者基於24幅圖的批量大小進行了一個多小時22k次訓練的結果,但在40min左右就出現了很好的收斂結果。
圖中顯示了loss和精度隨訓練的變化情況。在預訓練模型的幫助下,損失函數下降很快。
同時作者還將訓練過程中模型表現隨訓練次數的變化呈現了出來:
GIF/1590K
在經過測試和輕微的調整之後(實現自己的精度),就可以完成訓練了。
模型的使用
完成訓練之後我們需要將模型保存下來,通常使用checkpoint的模式來保存。由於我們是基於雲端訓練的,需要通過一個腳本將模型導入到本機使用。下面是作者將這個模型放到一個youtube浣熊視頻中的結果:
浣熊出沒
GIF/496K
捕捉到浣熊
GIF/394K
看完視頻我們會發現有時會出現漏識別和誤識別。這主要是因為我們用於訓練的數據集太小了,模型缺乏魯棒性和泛化性,需要更多的數據來提高它的性能,而這也是目前人工智慧面臨的最大問題。
結語
在跟隨作者完成物體檢測器的訓練後,我們應該也可以通過相應的步驟開發自己的檢測器。當然需要提高分類器的表現,就需要更多的數據,數據,數據!
這個一檢測器訓練時間很短而且表現看起來不錯。但對於多類物體的的話,表現是會有些許下降的,同時訓練時間也要增加才能得到較好的結果。同時我們需要在心中謹記一個原則,最終的模型一定是速度與精度,效率與效果的平衡。深度學習和其他的科學一樣都有矛盾與平衡的一面,真正的產品效果其實取決於你傾向天平的哪一方!


※歷經八天的流血隨禮、連環催婚、燒錢結婚,觸網轉型的婚慶行業真相你得知道
※谷歌CEO Sundar Pichai:印度中產出身到掌管科技巨頭,矽谷高管真的難當!
※亞馬遜發布新款閱讀器Kindle Oasis:7英寸防水屏幕,售價250美元起
※周靖人:阿里雲計算能力實現新突破,流計算2.0每秒峰值達千萬QPS
※尼爾森、阿里研究院發布聯合報告:代收成快遞剛需,最受都市新人和小資白領歡迎
TAG:獵雲網 |