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