ICDAR2015 Robust Reading Task4參賽感想

Robust Reading的Task 4是今年才推出的比賽,與已經公開多年的Task1和Task2相比,Task4的樣本是用手機隨機拍攝的生活場景,不是刻意針對文字拍攝的。



Task1的圖像樣例


Task2 的圖像樣例


Task4的圖像樣例

比賽要求是隻檢測人眼可以看出來的文字,比較直觀,不做過多贅述。


下面是一些我的感想吧。


代碼部分

1. 推薦一些高效的開發語言

對於一些工具,不需要考慮性能的情況下,推薦用C#, Java, Matlab等解釋型語言來進行編寫。C#, Java在做交互工具方面的開發效率極高,很多類都是現成的,尤其是C#的智能感知列表是目前用戶體驗做的最好的;而Matlab的腳本可以做到在不建立工程的情況下實現一些小功能,比如修改文件名,後綴名,移動、複製文件等。

2. 一些比較好用的Matlab函數介紹,具體使用不做過多介紹,大家自行百度之吧

dir() 獲取文件夾下的所有文件或者指定格式的文件

regexp(str_line, '\s+', 'split') 將str_line以空格進行分割,C#中也有一樣的函數,是string類下的split函數

regexp(str_line, ',', 'split') 將str_line以逗號進行分割

inpolygon() 判斷點是否在多邊形內的函數

cp2tform() 透視變換函數

fp = fopen('test.txt', 'r', 'n', 'utf-8'); 以utf-8格式打開文件,文件頭會有一個? 符合utf-8的編碼方式

movefile() 移動文件

copyfile() 複製文件


CNN部分


        CNN的特點是逐層提取特徵,隨着深度增加,提取的特徵級別也越高,淺層一般是認爲提取邊緣特徵或者顏色特徵。

        我將第一個Pooling層前的卷積都認爲是淺層,這樣CNN可以根據淺層的核大小分爲兩類,一類是Kernel Size=5,另一類Kernel Size=3。前者的設定在Caffe的樣例裏面非常常見,從可視化的角度來說,淺層的5×5能夠表達更豐富的邊緣信息,而後者Small Kernel只是在Ben Graham的論文[1]中見到,而且Ben Graham將網絡結構設計的極其有規律,從Ben Graham的結構中可以看出,他將結構信息轉化到了大量的濾波器中,整個結構更像是一種編碼,而3×3的Kernel並不算是一種淺層特徵提取,因爲3×3的Kernel能體現的邊緣信息太有限了。所以說,我根據淺層卷積核的大小,大致將CNN分爲兩類,一類是逐層提取特徵的CNN,另一類是逐層編碼的CNN,但是這僅僅是一種理解,沒有相關的實驗做支撐。

        從實驗的過程來看,Ben Graham的結構非常小巧精緻,訓練起來要更快,對於小尺度的圖像分類問題是很有效的。

        一些小細節比如Leaky Relu代替了原來的Relu作爲新的神經元激勵函數,從對比實驗上看Leaky Relu要比Relu好一些,但也不是絕對的,可以說是爲網絡細節的調整多了一個不錯的選擇。


樣本部分


        分類器結構的設計對於分類器訓練的作用並不是特別大,因爲論文擺在那裏,開源的代碼擺在那裏,大家都會去試試,最後出來的結構都大同小異。而用什麼樣的數據進行訓練是更爲重要的。

        其實過分依賴數據是分類器的缺陷,但是目前的判別模型又有哪個不依賴數據呢?


其他

1. 有一個清晰的系統框架,一定要清楚先做什麼後做什麼要做什麼,這次比賽一個很大的失誤就是沒有很早的認識到連通部件提取的重要性,一開始沒有把連通部件提取作爲工作之一,結果到後面非常被動。


2. 儘量早做完系統,再去追究細節。這個問題並不是沒有意識到,而是僥倖心理在作祟,一直是想萬一這個改進會是分類器性能有很大改變,就可以給後面省下很多事情,結果是從沒有出現過這麼好的運氣。不過也不是全然沒有收穫,做了這麼多實驗,感覺CNN的一個致命問題就是對於樣本的數量與質量有很高的需求,CNN沒有想象的那麼好用。所以在深度學習這個方向,一味的追求數據集上的結果不是長久之策,反而是跟着別人的節奏,去解決深度學習中一些更有價值的問題是更長遠的選擇。

 

3. 良好的心態以及一個合適的衝刺時間。做有deadline的事情一定不能着急,不管出了多大的問題,第一個要想的是怎麼能夠用最高效的方式去解決,要花多大的時間以及人力成本;這樣的比賽如果前期沒有足夠好的積累,肯定是在最後幾天要熬夜的,前期不能熬夜,後面一定要提起精神來隨時準備熬夜拼命。

 

4.  研究一下系統不同模塊的互補性,可以事半功倍。比如訓練CNN的模型,裏面肯定有“疑難雜症”,但是很可能這些樣本用MSER就很好解決,兩者都不好解決的,可能用文本行聚合就輕鬆搞定,一個好的系統可以不是步步完美,互補也會得到很好的結果。


5.  對於工作要做時間估算。比如有100W的Large Patch樣本要傳到服務器進行訓練,假如網絡傳輸速度爲10M/s,100W的樣本差不多是25G,傳到服務器要43min,假如還要對這些樣本做擾動,至少要傳輸100G的數據,耗時爲2.9小時,然後轉爲caffe能用的leveldb格式至少用1小時,整個過程下來,保守估計用時4小時,中間出點差錯,可能一天都是在準備樣本。而把擾動的工作放到服務器端來進行可以極大的縮減時間。


6. 定好標準:包括文件名命名格式,數據是二進制還是ANSI,建議用二進制形式的數據文件,可以通過文件大小來檢查文件的完整性,而且讀寫也方便。


7. 將正確分類以及錯誤分類的樣本挑出來查看,有利於分析分類器的缺陷,以及改進的方法。
























發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章