好久沒有更新沦疾。最近又學(xué)到不少知識(shí)侵蒙,記錄一下造虎。8月份,試用了?end-to-end 的 DCNN 來學(xué)習(xí)人類駕駛纷闺。但最終的比賽中累奈,仍是 rule-based 結(jié)合 深度神經(jīng)網(wǎng)絡(luò)效果是最快的。
CNN
為了識(shí)別路牌急但,學(xué)習(xí)了CNN澎媒。使用這個(gè)網(wǎng)絡(luò)可以很好的對(duì)圖片進(jìn)行分類。
1. 數(shù)據(jù)的準(zhǔn)備
2. 訓(xùn)練和驗(yàn)證
3. 性能測(cè)量
4. 用于目標(biāo)檢測(cè)
Faster R-CNN
這個(gè)是為了目標(biāo)檢測(cè)波桩。從知道這個(gè)技術(shù)到跑通戒努,只用了大約兩天的時(shí)間。身后有狗镐躲,就是跑的快储玫。
跑通這個(gè)網(wǎng)絡(luò)的主要要解決的問題是:如何使用自己的數(shù)據(jù),建立 Fster R-CNN模型萤皂。網(wǎng)上有不少人寫出來自己的過程撒穷,我寫出我的過程。
1. 找到合適的開源代碼
https://github.com/dBeker/Faster-RCNN-TensorFlow-Python3.5
需要在Windows下運(yùn)行裆熙,并使用的是TensorFlow端礼。支持這個(gè)要求的只有這個(gè)項(xiàng)目禽笑。
2. 建立環(huán)境
這個(gè)開源項(xiàng)目必須要使用Python 3.5.0。手工安裝后蛤奥,在安裝相關(guān)的 pip 包時(shí)佳镜,遇到問題。一個(gè)包沒有合適的源凡桥。所以蟀伸,轉(zhuǎn)而使用 Anaconda。
Anaconda 最新的版本里缅刽,建立 Python 3.5 環(huán)境時(shí)啊掏,安裝的已經(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ù)
為了降低工作量腕侄,也就是說小泉,不要修改代碼芦疏,我們最好順從項(xiàng)目本身對(duì)數(shù)據(jù)規(guī)格的要求冕杠。包括,文件名酸茴,XML文件的格式分预,目錄結(jié)構(gòu)等。對(duì)于 Faster R-CNN來說薪捍,有兩套數(shù)據(jù)集笼痹,也就對(duì)應(yīng)了兩套數(shù)據(jù)格式: MS Coco 和 VOC2007。
這個(gè)項(xiàng)目支持的是后者酪穿。那我們就按后者要求的數(shù)據(jù)格式來凳干。
Faster R-CNN,需要下面的數(shù)據(jù):
預(yù)訓(xùn)練的 VGG16模型 或是 Res101被济,或是基它的特征抽取模式救赐。(這個(gè)項(xiàng)目支持的是 VGG16)
訓(xùn)練用的圖片
每個(gè)圖片對(duì)應(yīng)的區(qū)域標(biāo)注數(shù)據(jù)(以文件形式。VOC2007是XML文件只磷,還有一種是TXT)
4. 準(zhǔn)備數(shù)據(jù)的過程
預(yù)訓(xùn)練模型在開源項(xiàng)目Faster-RCNN-TensorFlow-Python3.5的網(wǎng)頁上有下載地址经磅,可以直接下載。5xxMB
訓(xùn)練用的圖片就需要自己收集 或是 采集钮追。大約180張左右预厌。
標(biāo)注數(shù)據(jù),可以使用這個(gè)開源軟件 labelImg 來制作元媚。軟件會(huì)為每個(gè)圖片單獨(dú)生成一個(gè)xml文件轧叽。
圖片數(shù)據(jù)按上面的目錄結(jié)構(gòu)安放苗沧。
Annotations 放 XML 文件。
ImageSets 放 索引文件(文本)犹芹,指明那些文件是用于訓(xùn)練崎页,那些是用來評(píng)估。
JPEGImages目錄下放 jpg文件腰埂。文件名最好是000001.jpg ~ 999999.jpg飒焦。
另外一個(gè)注意點(diǎn)是,數(shù)據(jù)的完全絕對(duì)路徑中不要用中文屿笼。
上圖中有一個(gè) gen_main.py 程序牺荠,這個(gè)是用來生成 ImageSets 中的索引文件的。這些索引文件格式很簡(jiǎn)單驴一,就是一個(gè)純文本的列表文件休雌。
文件內(nèi)容就是一行一行的文件名(不帶擴(kuò)展名)。訓(xùn)練程序根據(jù)這些文件的指引肝断,加載圖片杈曲。
5. 訓(xùn)練和驗(yàn)證
在開始前,注意要修改代碼中的 class 數(shù)量胸懈。比如担扑,我這里只有一個(gè)類,就需要把代碼中的設(shè)置為1趣钱。
執(zhí)行 項(xiàng)目?Faster-RCNN-TensorFlow-Python3.5-master 中的 train.py 就可以開始訓(xùn)練了涌献。
執(zhí)行項(xiàng)目中的 demo.py 就是驗(yàn)證。
生成的模型會(huì)在下面的目錄中:? ??
6. 解決性能問題
在 Faster-RCNN-TensorFlow-Python3.5-master\lib\config 里的 config.py 文件中首有,是有很多參數(shù)可以修改的燕垃。通常我們不需要修改。
為了性能的需求井联,我修改了下面的幾個(gè)參數(shù):
rpn_top_n? 卜壕,這個(gè)是 用來評(píng)估的?proposals 的數(shù)量。越大烙常,就意味著越多的計(jì)算轴捎。設(shè)置小了,可能會(huì)不準(zhǔn)確军掂。
最初轮蜕,這個(gè)值是300,分析一個(gè)圖片蝗锥,需要1.9秒跃洛。把這個(gè)參數(shù)設(shè)置為1,需要0.9秒终议。但仍不滿足要求汇竭。
DQN 與 Deepmind
以上兩個(gè)葱蝗,都是為了圖像識(shí)別。這個(gè)則是為了解決打牌的問題细燎。讓AI自己學(xué)習(xí)如何打紅心两曼,并自行訓(xùn)練,提高自己的戰(zhàn)力玻驻。類似與 Alphamaster悼凑,就是 AlphaGo的升級(jí)版,可以自我對(duì)戰(zhàn)璧瞬,學(xué)習(xí)户辫,提高。
目前比賽中嗤锉,水平最高的渔欢,已知其使用的是MCTS算法。算是輕度AI了瘟忱。我使用DQN寫的奥额,戰(zhàn)力很弱,也許需要訓(xùn)練1億輪才行访诱?目前一天只能練150萬輪垫挨。當(dāng)然,這是我的猜測(cè)盐数。
總結(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