好久沒有更新。最近又學(xué)到不少知識,記錄一下。8月份,試用了?end-to-end 的 DCNN 來學(xué)習(xí)人類駕駛。但最終的比賽中,仍是 rule-based 結(jié)合 深度神經(jīng)網(wǎng)絡(luò)效果是最快的。
CNN
為了識別路牌,學(xué)習(xí)了CNN。使用這個網(wǎng)絡(luò)可以很好的對圖片進(jìn)行分類。
1. 數(shù)據(jù)的準(zhǔn)備
2. 訓(xùn)練和驗證
3. 性能測量
4. 用于目標(biāo)檢測
Faster R-CNN
這個是為了目標(biāo)檢測。從知道這個技術(shù)到跑通,只用了大約兩天的時間。身后有狗,就是跑的快。
跑通這個網(wǎng)絡(luò)的主要要解決的問題是:如何使用自己的數(shù)據(jù),建立 Fster R-CNN模型。網(wǎng)上有不少人寫出來自己的過程,我寫出我的過程。
1. 找到合適的開源代碼
https://github.com/dBeker/Faster-RCNN-TensorFlow-Python3.5
需要在Windows下運(yùn)行,并使用的是TensorFlow。支持這個要求的只有這個項目。
2. 建立環(huán)境
這個開源項目必須要使用Python 3.5.0。手工安裝后,在安裝相關(guān)的 pip 包時,遇到問題。一個包沒有合適的源。所以,轉(zhuǎn)而使用 Anaconda。
Anaconda 最新的版本里,建立 Python 3.5 環(huán)境時,安裝的已經(jīng)是 Python 3.5.X,而不是 3.5.0。 所以又向前找 Anaconda 的舊的版本。它的 2.4.0 和 2.5.0 里安裝的是 Python 3.5.0。
3. 明確需要準(zhǔn)備哪些數(shù)據(jù)
為了降低工作量,也就是說,不要修改代碼,我們最好順從項目本身對數(shù)據(jù)規(guī)格的要求。包括,文件名,XML文件的格式,目錄結(jié)構(gòu)等。對于 Faster R-CNN來說,有兩套數(shù)據(jù)集,也就對應(yīng)了兩套數(shù)據(jù)格式: MS Coco 和 VOC2007。
這個項目支持的是后者。那我們就按后者要求的數(shù)據(jù)格式來。
Faster R-CNN,需要下面的數(shù)據(jù):
預(yù)訓(xùn)練的 VGG16模型 或是 Res101,或是基它的特征抽取模式。(這個項目支持的是 VGG16)
訓(xùn)練用的圖片
每個圖片對應(yīng)的區(qū)域標(biāo)注數(shù)據(jù)(以文件形式。VOC2007是XML文件,還有一種是TXT)
4. 準(zhǔn)備數(shù)據(jù)的過程
預(yù)訓(xùn)練模型在開源項目Faster-RCNN-TensorFlow-Python3.5的網(wǎng)頁上有下載地址,可以直接下載。5xxMB
訓(xùn)練用的圖片就需要自己收集 或是 采集。大約180張左右。
標(biāo)注數(shù)據(jù),可以使用這個開源軟件 labelImg 來制作。軟件會為每個圖片單獨(dú)生成一個xml文件。

圖片數(shù)據(jù)按上面的目錄結(jié)構(gòu)安放。
Annotations 放 XML 文件。
ImageSets 放 索引文件(文本),指明那些文件是用于訓(xùn)練,那些是用來評估。
JPEGImages目錄下放 jpg文件。文件名最好是000001.jpg ~ 999999.jpg。
另外一個注意點(diǎn)是,數(shù)據(jù)的完全絕對路徑中不要用中文。
上圖中有一個 gen_main.py 程序,這個是用來生成 ImageSets 中的索引文件的。這些索引文件格式很簡單,就是一個純文本的列表文件。


文件內(nèi)容就是一行一行的文件名(不帶擴(kuò)展名)。訓(xùn)練程序根據(jù)這些文件的指引,加載圖片。
5. 訓(xùn)練和驗證
在開始前,注意要修改代碼中的 class 數(shù)量。比如,我這里只有一個類,就需要把代碼中的設(shè)置為1。
執(zhí)行 項目?Faster-RCNN-TensorFlow-Python3.5-master 中的 train.py 就可以開始訓(xùn)練了。
執(zhí)行項目中的 demo.py 就是驗證。
生成的模型會在下面的目錄中:? ??

6. 解決性能問題
在 Faster-RCNN-TensorFlow-Python3.5-master\lib\config 里的 config.py 文件中,是有很多參數(shù)可以修改的。通常我們不需要修改。
為了性能的需求,我修改了下面的幾個參數(shù):
rpn_top_n? ,這個是 用來評估的?proposals 的數(shù)量。越大,就意味著越多的計算。設(shè)置小了,可能會不準(zhǔn)確。
最初,這個值是300,分析一個圖片,需要1.9秒。把這個參數(shù)設(shè)置為1,需要0.9秒。但仍不滿足要求。
DQN 與 Deepmind
以上兩個,都是為了圖像識別。這個則是為了解決打牌的問題。讓AI自己學(xué)習(xí)如何打紅心,并自行訓(xùn)練,提高自己的戰(zhàn)力。類似與 Alphamaster,就是 AlphaGo的升級版,可以自我對戰(zhàn),學(xué)習(xí),提高。
目前比賽中,水平最高的,已知其使用的是MCTS算法。算是輕度AI了。我使用DQN寫的,戰(zhàn)力很弱,也許需要訓(xùn)練1億輪才行?目前一天只能練150萬輪。當(dāng)然,這是我的猜測。
總結(jié)
以上,都是知其然,而不知其所以然,不過,DL 或者說 深度神經(jīng)網(wǎng)絡(luò) 最終一定是演變成 engine or SDK。軟件工程師只需要使用它們就好。可以解決問題就OK。
參考
https://www.corelan.be/index.php/2011/07/14/mona-py-the-manual/
optiva-framework? -? scan tools
https://blog.csdn.net/hongxingabc/article/details/79039537
https://blog.csdn.net/gvfdbdf/article/details/52214008
https://blog.csdn.net/sinat_30071459/article/details/50723212
https://blog.csdn.net/j497205974/article/details/80074494
https://blog.csdn.net/weixin_40920228/article/details/79561524
https://cloud.tencent.com/developer/article/1010754
http://blog.leanote.com/post/braveapple/%E5%A6%82%E4%BD%95%E4%BD%BF%E7%94%A8%E8%87%AA%E5%B7%B1%E6%95%B0%E6%8D%AE%E9%9B%86%E8%AE%AD%E7%BB%83Faster-RCNN%E6%A8%A1%E5%9E%8B
https://www.jiqizhixin.com/articles/2018-02-23-3
https://zhuanlan.zhihu.com/p/31772360
https://blog.csdn.net/weixin_31200719/article/details/81220924
https://medium.com/@jonathan_hui/object-detection-speed-and-accuracy-comparison-faster-r-cnn-r-fcn-ssd-and-yolo-5425656ae359
https://zhuanlan.zhihu.com/p/32230004
https://zhuanlan.zhihu.com/p/32404424