賽題以識(shí)別類似手寫(xiě)體的四則運(yùn)算式為主題,參賽者需要在充滿干擾信息的10萬(wàn)張圖片中,設(shè)計(jì)算法識(shí)別圖片上數(shù)學(xué)運(yùn)算式并計(jì)算結(jié)果。決賽在初賽的基礎(chǔ)上,引入分?jǐn)?shù)和更加復(fù)雜的運(yùn)算,同樣以最終的識(shí)別率來(lái)評(píng)判算法。
本節(jié)會(huì)詳細(xì)介紹我在進(jìn)行四則混合運(yùn)算識(shí)別競(jìng)賽初賽時(shí)的所有思路。
問(wèn)題描述
本次競(jìng)賽目的是為了解決一個(gè) OCR 問(wèn)題,通俗地講就是實(shí)現(xiàn)圖像到文字的轉(zhuǎn)換過(guò)程。
數(shù)據(jù)集
初賽數(shù)據(jù)集一共包含10萬(wàn)張180*60的圖片和一個(gè)labels.txt的文本文件。每張圖片包含一個(gè)數(shù)學(xué)運(yùn)算式,運(yùn)算式包含:
3個(gè)運(yùn)算數(shù):3個(gè)0到9的整型數(shù)字; 2個(gè)運(yùn)算符:可以是+、-、*,分別代表加法、減法、乘法 0或1對(duì)括號(hào):括號(hào)可能是0對(duì)或者1對(duì)
圖片的名稱從0.png到99999.png,下面是一些樣例圖片(這里只取了一張):
文本文件 labels.txt 包含10w行文本,每行文本包含每張圖片對(duì)應(yīng)的公式以及公式的計(jì)算結(jié)果,公式和計(jì)算結(jié)果之間空格分開(kāi),例如圖片中的示例圖片對(duì)應(yīng)的文本如下所示:
(3-7)+5 1
5-6+2 1
(6+7)*2 26
(4+2)+7 13
(6*4)*4 96
評(píng)價(jià)指標(biāo)
官方的評(píng)價(jià)指標(biāo)是準(zhǔn)確率,初賽只有整數(shù)的加減乘運(yùn)算,所得的結(jié)果一定是整數(shù),所以要求序列與運(yùn)算結(jié)果都正確才會(huì)判定為正確。
我們本地除了會(huì)使用官方的準(zhǔn)確率作為評(píng)估標(biāo)準(zhǔn)以外,還會(huì)使用 CTC loss 來(lái)評(píng)估模型。
使用 captcha 進(jìn)行數(shù)據(jù)增強(qiáng)
官方提供了10萬(wàn)張圖片,我們可以直接使用官方數(shù)據(jù)進(jìn)行訓(xùn)練,也可以通過(guò)Captcha,參照官方訓(xùn)練集,隨機(jī)生成更多數(shù)據(jù),進(jìn)而提高準(zhǔn)確性。根據(jù)題目要求,label 必定是三個(gè)數(shù)字,兩個(gè)運(yùn)算符,一對(duì)或沒(méi)有括號(hào),根據(jù)括號(hào)規(guī)則,只有可能是沒(méi)括號(hào),左括號(hào)和右括號(hào),因此很容易就可以寫(xiě)出數(shù)據(jù)生成器的代碼。
生成器
生成器的生成規(guī)則很簡(jiǎn)單:
相信大家都能看懂。當(dāng)然,我寫(xiě)文章的時(shí)候又想到一種更好的寫(xiě)法:
除了生成算式以外,還有一個(gè)值得注意的地方就是初賽所有的減號(hào)(也就是“-”)都是細(xì)的,但是我們直接用 captcha 庫(kù)生成圖像會(huì)得到粗的減號(hào),所以我們修改了image.py中的代碼,在_draw_character函數(shù)中我們?cè)黾恿艘痪渑袛啵绻菧p號(hào),我們就不進(jìn)行 resize 操作,這樣就能防止減號(hào)變粗:
我們繼而使用生成器生成四則運(yùn)算驗(yàn)證碼:
上圖就是原版生成器生成的圖,我們可以看到減號(hào)是很粗的。
上圖是修改過(guò)的生成器,可以看到減號(hào)已經(jīng)不粗了。
模型結(jié)構(gòu)
模型結(jié)構(gòu)像之前寫(xiě)的文章一樣,只是把卷積核的個(gè)數(shù)改多了一點(diǎn),加了一些 BN 層,并且在四卡上做了一點(diǎn)小改動(dòng)以支持多GPU訓(xùn)練。如果你是單卡,可以直接去掉base_model2 = make_parallel(base_model, 4)的代碼。
BN 層主要是為了訓(xùn)練加速,實(shí)驗(yàn)結(jié)果非常好,模型收斂快了很多。
base_model 的可視化:
model 的可視化:
模型訓(xùn)練
在經(jīng)過(guò)幾次測(cè)試以后,我已經(jīng)拋棄了 evaluate 函數(shù),因?yàn)樵隍?yàn)證集上已經(jīng)能做到 100% 識(shí)別率了,所以只需要看 val_loss 就可以了。在經(jīng)過(guò)之前的幾次嘗試以后,我發(fā)現(xiàn)在有生成器的情況下,訓(xùn)練代數(shù)越多越好,因此直接用 adam 跑了50代,每代10萬(wàn)樣本,可以看到模型在10代以后基本已經(jīng)收斂。
我們可以看到模型先分為四份,在四個(gè)顯卡上并行計(jì)算,然后合并結(jié)果,計(jì)算最后的 ctc loss,進(jìn)而訓(xùn)練模型。
結(jié)果可視化
這里我們對(duì)生成的數(shù)據(jù)進(jìn)行了可視化,可以看到模型基本已經(jīng)做到萬(wàn)無(wú)一失,百發(fā)百中。
打包成 docker 以后提交到比賽系統(tǒng)中,經(jīng)過(guò)十幾分鐘的運(yùn)行,我們得到了完美的1分。
總結(jié)
初賽是非常簡(jiǎn)單的,因此我們才能得到這么準(zhǔn)的分?jǐn)?shù),之后官方進(jìn)一步提升了難度,將初賽測(cè)試集提高到了20萬(wàn)張,在這個(gè)集上我們的模型只能拿到0.999925的成績(jī),可行的改進(jìn)方法是將準(zhǔn)確率進(jìn)一步降低,充分訓(xùn)練模型,將多個(gè)模型結(jié)果融合等。
官方擴(kuò)充測(cè)試集的難點(diǎn)
在擴(kuò)充數(shù)據(jù)集上,我們發(fā)現(xiàn)有一些圖片預(yù)測(cè)出來(lái)無(wú)法計(jì)算,比如[629,2271,6579,17416,71857,77631,95303,102187,117422,142660,183693]等,這里我們?nèi)?117422.png 為例。
我們可以看到肉眼基本無(wú)法認(rèn)出這個(gè)圖,但是經(jīng)過(guò)一定的圖像處理,我們可以顯現(xiàn)出來(lái)它的真實(shí)面貌:
然后我們可以看到這樣的結(jié)果:
當(dāng)然,還有一張圖是無(wú)法通過(guò)預(yù)處理得到結(jié)果的,142660,這有可能是程序的 bug 造成的小概率事件,所以初賽除了我們跑了一個(gè) docker 得到滿分以外,沒(méi)有第二個(gè)人達(dá)到滿分。
-
圖像
+關(guān)注
關(guān)注
2文章
1091瀏覽量
40929 -
代碼
+關(guān)注
關(guān)注
30文章
4882瀏覽量
70046 -
生成器
+關(guān)注
關(guān)注
7文章
322瀏覽量
21574
原文標(biāo)題:百度魅族深度學(xué)習(xí)大賽初賽冠軍作品(圖像識(shí)別.源碼)
文章出處:【微信號(hào):AI_shequ,微信公眾號(hào):人工智能愛(ài)好者社區(qū)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
模數(shù)A/D轉(zhuǎn)換器的基本原理與轉(zhuǎn)換過(guò)程解析

A/D轉(zhuǎn)換器的轉(zhuǎn)換過(guò)程及電路分析

labview編程模擬十進(jìn)制數(shù)到二進(jìn)制數(shù)的轉(zhuǎn)換過(guò)程
當(dāng)將IoT原理應(yīng)用到工廠流程時(shí),在轉(zhuǎn)換過(guò)程中會(huì)丟失什么?
AD轉(zhuǎn)換過(guò)程是通過(guò)哪幾個(gè)步驟完成的
一文淺析ADC的轉(zhuǎn)換過(guò)程
圖像與文字的合成
電液伺服系統(tǒng)位置與壓力控制轉(zhuǎn)換過(guò)程的加減速算法與仿真
詳解晶體二極管開(kāi)關(guān)轉(zhuǎn)換過(guò)程

如何使用FPGA實(shí)現(xiàn)Bayer到RGB圖像格式轉(zhuǎn)換的設(shè)計(jì)

Linux虛擬地址到物理地址轉(zhuǎn)換過(guò)程

一文講解ADC模數(shù)轉(zhuǎn)換芯片的原理及轉(zhuǎn)換過(guò)程
應(yīng)用衛(wèi)星通信領(lǐng)域的一個(gè)坐標(biāo)轉(zhuǎn)換過(guò)程—機(jī)體坐標(biāo)系與ENU坐標(biāo)系的轉(zhuǎn)換

SDI轉(zhuǎn)AV轉(zhuǎn)換器技術(shù)解析:轉(zhuǎn)換過(guò)程中的關(guān)鍵要素與優(yōu)勢(shì)
一文看懂ADC轉(zhuǎn)換過(guò)程

評(píng)論