做項目一年了,圍繞橋梁病害檢測進行了殊死搏斗,總歸是有個還不錯的結(jié)果,期間還真是歷經(jīng)磨難,沒人帶飛,辛苦摸索,艱苦卓絕啊。
今天把自己整個過程總結(jié)一下:
1、深度學習技術(shù),數(shù)據(jù)才是根本!數(shù)據(jù)才是根本!數(shù)據(jù)才是根本!重要的話說三遍。
數(shù)據(jù)量很重要。目前現(xiàn)有的網(wǎng)絡(luò),無論分類、檢測,都是基于大數(shù)據(jù)作為支撐的,網(wǎng)絡(luò)較深,參數(shù)較多,幾百張圖片別想著從頭訓練。有兩條路:一是遷移訓練。其實效果一般。因為工業(yè)場景圖片跟ImageNet差得可太遠了。遷移訓練能保證收斂,不保證效果,但也可以了,總比從頭訓練不收斂強。二是自己搭建輕量型網(wǎng)絡(luò)適應(yīng)數(shù)據(jù)量較少的情況。不過到時候移植又是個麻煩事,畢竟工業(yè)上還是C++用的多,目前所有深度學習框架對C++的demo都好少。。。
數(shù)據(jù)量還是很重要。魔改網(wǎng)絡(luò),不如增加更多的樣本。來自數(shù)據(jù)量對魔改黨的可怕嘲諷。呵呵。改來改去,最后發(fā)現(xiàn),不如增加樣本效果來得直接。
數(shù)據(jù)質(zhì)量很重要?,F(xiàn)在學術(shù)領(lǐng)域深度學習效果這么好,都是基于清晰高分辨率的圖片的。工業(yè)環(huán)境,圖片質(zhì)量那叫一個差,深度學習技術(shù)做也可以做,只是效果就沒那么好了。
數(shù)據(jù)質(zhì)量還是很重要。對圖片各種預(yù)處理,不如換高分辨率相機,提高圖片采集質(zhì)量。來自高分辨率相機對圖片處理的嘲諷。
總結(jié)一句話,就是數(shù)據(jù)才是根本。其他一切都是在這個基礎(chǔ)上談。無論自己數(shù)據(jù)增強,還是換高分辨率相機,這才是深度學習的第一步,這一步做好了,成功一半。
2、根據(jù)自己的任務(wù)挑選合適的網(wǎng)絡(luò),有現(xiàn)成的最好,然后遷移訓練,也許會有不錯的效果。
更多的時候還是要自己搭網(wǎng)絡(luò)了,運用各種知識來實現(xiàn)。
我主要是搭建分割網(wǎng)絡(luò)。知識自己補充,我只說干貨。
首先說網(wǎng)絡(luò)結(jié)構(gòu),分割網(wǎng)絡(luò)要采用編碼解碼的結(jié)構(gòu),融合高低語義特征實現(xiàn)分割,具體可以參見Unet
其次考慮網(wǎng)絡(luò)深度以及下采樣次數(shù),網(wǎng)絡(luò)越深,適合復(fù)雜的任務(wù)、難的圖片,淺層網(wǎng)絡(luò)適合簡單圖片
下采樣時,圖片丟失信息,特別是工業(yè)環(huán)境拍攝的模糊圖片,下采樣多了,信息都丟沒了,對語義分割影響很大。因此分割網(wǎng)絡(luò)下采樣次數(shù)不能多,但是我們又要獲取大感受野怎么辦?那么通用的做法是下采樣三次,然后緊跟空洞卷積,參考商湯DetNet網(wǎng)絡(luò)。那模糊的圖片說不定第一次下采樣時信息就丟失得差不多了,那么我們就要適當在前面也要加空洞卷積。這樣我們就減輕了信息丟失的問題。
3、各種參數(shù)
激活函數(shù):leaky_relu比較好用,既避免了死亡節(jié)點,又不至于參數(shù)量太大。
權(quán)重初始化:he_norm比較好用
優(yōu)化函數(shù):Adam比較好用
正則化:batchnormal比較好用,groupNormal也好用
4、結(jié)構(gòu)塊
我們引入比較好用結(jié)構(gòu)塊,比如res_block、suffle_block、batchnorm_block