【数据竞赛】CV赛题总结:人民币面值与编码识别
CV
人民幣面值與編碼
在2019年6月份參加了TinyMind人民幣面值及編碼識(shí)別比賽,最終獲得了面試識(shí)別并列第二、編碼識(shí)別初賽第三/復(fù)賽第五的成績(jī),在文本我將分享這次比賽的歷程和我的學(xué)習(xí)收獲,比賽代碼和參考文獻(xiàn)在文章末尾。
PART
01
賽題分析與解決方案
人民幣作為我國(guó)法定貨幣,與生俱來(lái),人見(jiàn)人愛(ài)。它在我們?nèi)粘I钪械闹匾圆谎远?#xff0c;每張人民幣紙幣都有一串唯一的字符號(hào)碼,是人民幣的重要標(biāo)識(shí)。由于這串序列號(hào)的唯一性,若能在紙幣識(shí)別裝置上添加編碼識(shí)別,讓每張人民幣的行走軌跡都可以被記錄并存儲(chǔ),這樣人民幣都能進(jìn)入銀行監(jiān)管之內(nèi),不僅有助于識(shí)別假幣,還可以很大程度上協(xié)助攻破搶劫,盜竊人民幣等非法事件。人民幣編碼識(shí)別技術(shù)在日常生活中具有很好的實(shí)用價(jià)值。
賽題任務(wù)1:??幣?值識(shí)別
要求參賽者根據(jù)訓(xùn)練集圖片訓(xùn)練模型,識(shí)別人民幣面值,并按要求提交驗(yàn)證集訓(xùn)練結(jié)果進(jìn)行驗(yàn)證。評(píng)分采?top1準(zhǔn)確率。
顯而易見(jiàn)不同面值的人民幣的圖像具有很大區(qū)別,在賽題1中我們目標(biāo)是將不同面值的人民幣進(jìn)行分類,即根據(jù)不同面值的圖片進(jìn)行分類操作。
解題思路:顯然賽題1是一個(gè)典型的圖像分類任務(wù),直接使用CNN圖像分類的流程就可以解決。具體的解決流程是Fine-Tune一個(gè)分類網(wǎng)絡(luò),并在測(cè)試集上進(jìn)行TTA(Test Time Augmentation)操作,就可以解決。
賽題任務(wù)2:人民幣編碼識(shí)別
人民幣編碼識(shí)別目的是識(shí)別人民幣具體的編碼,人民幣編碼由10位組成,具體由冠號(hào)和編碼兩個(gè)部分。冠號(hào)一般為兩個(gè)字母或者兩個(gè)字母中間夾上一個(gè)數(shù)字的情況,編碼則都是阿拉伯?dāng)?shù)字。編碼識(shí)別使用編碼整體準(zhǔn)確率和字符logloss打分;
原始賽題只給定了人民幣圖像的類別和編碼,但沒(méi)有給定人民幣具體的編碼位置。,因此我自己標(biāo)注200張帶有位置信息的標(biāo)注文件。具體來(lái)說(shuō)編碼識(shí)別任務(wù)進(jìn)一步可以拆分為:編碼定位和編碼識(shí)別兩個(gè)步驟。
在編碼定位階段,需要定位編碼具體的位置;編碼識(shí)別階段則需要對(duì)具體編碼進(jìn)行識(shí)別。或許你可能會(huì)問(wèn),能不能直接將整張圖直接進(jìn)行編碼識(shí)別,不進(jìn)行編碼定位的操作。但直接用整圖進(jìn)行識(shí)別的方式是不太可取的,首先整圖噪音比較多,模型容易學(xué)習(xí)到噪音,其次圖片太大占用的模型需要顯存越大。那么在編碼識(shí)別階段能不能拆分成字符進(jìn)行單個(gè)字符識(shí)別呢?這種方法也不可取,首先字符并不能完全切割徹底,其次字符與字符之間可能存在分布關(guān)鍵。比如冠號(hào)兩個(gè)字符并不是獨(dú)立的,所以切割成字符的形式也不太合理。
其實(shí)編碼識(shí)別這個(gè)任務(wù)本質(zhì)就是一個(gè)OCR任務(wù),在OCR任務(wù)中也是具體包括編碼定位和編碼識(shí)別兩個(gè)步驟。首先來(lái)看編碼定位任務(wù),編碼定位任務(wù)目標(biāo)是找到編碼的位置。我的解決思路是使用物體檢測(cè)的模型來(lái)定位編碼,當(dāng)然你也可以使用傳統(tǒng)圖像處理的方法來(lái)定位。
具體來(lái)說(shuō)我是選擇Faster-RCNN模型來(lái)訓(xùn)練了一個(gè)編碼定位模型,為了定位的精度我沒(méi)有選擇SSD和YOLO模型。
在定位了人民幣的編碼之后,就是編碼識(shí)別的步驟了。人民幣編碼的圖片都是定長(zhǎng)字符組成的,因此是一個(gè)定長(zhǎng)字符識(shí)別的問(wèn)題。有兩種解決方法,思路1直接對(duì)編碼圖片進(jìn)行多分類操作,10個(gè)字符則進(jìn)行10個(gè)多分類;思路2使用CRNN+CTC的模型。
思路1編碼圖片的多分類操作(Multi-CNN),就是在分類CNN后面加上10個(gè)全連接層,進(jìn)行10個(gè)分類操作,然后將10個(gè)分類loss求和訓(xùn)練即可。這種方法思路簡(jiǎn)單,模型僅包含卷積層和全連接層,模型收斂快;但這種思路是將每個(gè)字符單獨(dú)進(jìn)行分類的,所以沒(méi)有考慮到字符與字符之間的關(guān)系,在精度上有一些欠缺。
思路2是直接使用CRNN+CTC的思路,這也是OCR字符識(shí)別的常見(jiàn)模型。當(dāng)然現(xiàn)在也有一些后序的改進(jìn),比如Attention+CTC或者CNN+CTC的論文。后序的改進(jìn)我在比賽中沒(méi)有嘗試,因?yàn)槲矣X(jué)得CRNN模型應(yīng)該就能夠解決水平編碼識(shí)別的問(wèn)題了。CRNN模型的優(yōu)點(diǎn)是模型擬合能力強(qiáng),模型的精度高;缺點(diǎn)是模型包含RNN/LSTM層,訓(xùn)練會(huì)稍微慢一些,也會(huì)受到訓(xùn)練字符分類的影響。
https://arxiv.org/pdf/1709.04303.pdfCRNN我是用了Pytorch開(kāi)源版本的,并修改了輸入圖片的尺寸,增加了max-pooling層(參考CRNN論文),使用resnet18提取CNN特征。
CRNN模型結(jié)構(gòu)在這個(gè)比賽中可以拆分K折訓(xùn)練,我們得到K個(gè)模型,并對(duì)測(cè)試集進(jìn)行TTA操作,那么會(huì)對(duì)一個(gè)樣本會(huì)有不同的預(yù)測(cè)結(jié)果,則需要對(duì)結(jié)果編碼結(jié)果進(jìn)行合并。具體可以進(jìn)行結(jié)果平均和字符結(jié)果投票的操作。
樣本變換以上就是編碼識(shí)別的兩個(gè)模型,那么如何有效的對(duì)兩個(gè)模型的結(jié)果進(jìn)行有效融合呢?這里我是考慮到兩個(gè)模型的差異:將Multi-CNN與CRNN模型進(jìn)行結(jié)果融合,如果CRNN識(shí)別的編碼結(jié)果存在問(wèn)題,則使用Multi-CNN結(jié)果進(jìn)行代替。
PART
02
比賽總結(jié)與展望
以上就是我對(duì)本次比賽的總結(jié),流程上還是比較簡(jiǎn)單的。只需要將具體的任務(wù)進(jìn)行拆分解決,最后Have Fun!有任何問(wèn)題可以直接私信,謝謝!
arxiv.org/pdf/1312.6082
arxiv.org/pdf/1507.0571
https://arxiv.org/pdf/1709.04303.pdf
https://github.com/chongyangtao/Awesome-Scene-Text-Recognition
比賽代碼開(kāi)源:
https://github.com/datawhalechina/competition-baseline
往期精彩回顧適合初學(xué)者入門人工智能的路線及資料下載機(jī)器學(xué)習(xí)及深度學(xué)習(xí)筆記等資料打印機(jī)器學(xué)習(xí)在線手冊(cè)深度學(xué)習(xí)筆記專輯AI基礎(chǔ)下載(pdf更新到25集)機(jī)器學(xué)習(xí)的數(shù)學(xué)基礎(chǔ)專輯獲取一折本站知識(shí)星球優(yōu)惠券,復(fù)制鏈接直接打開(kāi):https://t.zsxq.com/yFQV7am本站qq群1003271085,加入微信群請(qǐng)掃碼喜歡文章,點(diǎn)個(gè)在看總結(jié)
以上是生活随笔為你收集整理的【数据竞赛】CV赛题总结:人民币面值与编码识别的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 【Python基础】Python3十大经
- 下一篇: 【深度学习】PyTorch深度学习训练可