4.1 集裝箱箱号識别項目概述
在對集裝箱箱号識别進行研究的過程中,使用CTPN來進行字元檢測,使用CRNN模型對框選的文本進行識别。
最終使用了81張單個集裝箱的圖檔作為測試集,最終CTPN的檢測效果:在IoU=0.5的情況下達到0.836,而CRNN模型的識别效果:字元正确率0.821,整圖正确率為0.135。
進一步計劃:
(1)CPTN在該場景下,不适用于做目标區域檢測,因為存在多個集裝箱同時存在的場景,同時單個集裝箱也存在多處字元(如企業商标等),是以需要另外訓練一個模型去獲更完善的目标文本框區域。然後用CPTN或者其他方法将框選的文本區域分割為文本條,然後使用CRNN進行識别。
(2)增加後處理環節,通過識别出的數字,算出校驗碼,用來提高整圖正确率。
4.2 集裝箱箱号識别介紹
4.2.1 集裝箱箱号
總計十個字元,前三個字元(即上圖的“SUD”)為擁有者的代碼,對應的是HAMBURG SUD,即漢堡南美航運公司,第四個字元(“U”)代表的是集裝箱類型,一般都會為U。
第5到第10個字元,即(“307007”)為箱體注冊碼,是集裝箱箱體持有的唯一辨別。
第11個字元(即“9”)為校驗碼,有前4位字母和6位數字通過校驗規則運算得到,用于識别在校驗時是否發生錯誤。
雖然隻要識别10個字元,即得到集裝箱箱号,但在商用産品中,一般也都會将校驗碼識别出來,
4.2.2 集裝箱箱号識别難點
(1)箱号位置不統一,字元之間距離間隔不統一
(2)箱号的印刷字型不一緻
4.2.3 集裝箱箱号識别流程
對于單個集裝箱圖檔而言,從圖檔中檢測到集裝箱箱号位置區域,對箱号區域進行分割,然後識别,再進行後處理(校驗碼檢驗等),最終輸出集裝箱的箱号。
4.3 資料整理
4.3.1 資料搜集
4.3.1.1 集裝箱資料
通過google的以圖搜圖,并通過篩選後,有200張左右的圖檔。但對于神經網絡模型來說,資料量太少。
4.3.1.2 字元識别資料相關
因搜集到的集裝箱圖檔資料太少,是以,使用圖檔生成的方法制作資料集。
(1)字型
通過對上述200張集裝箱圖檔的觀察,發現最起碼存在四種字型。
目前,通過線上字型搜尋,隻找到了兩種近似字型,另外兩種暫未獲得。
① SaaSeriesBD
② U59
(2) 工具
字元識别資料使用的是TextRecognitionDataGenerator。樣例如下:
4.3.1.3 字元檢測資料
目前網絡上公開的資料集有ICDAR(International Conference on Document Analysis and Recognition)曆年的比賽資料。
4.3.2 資料處理——生成、增廣等
(1)為英文字元與數字字元設定合适的比例,2:3
(2)圖檔随機旋轉角度:[0, 10]
(3)圖檔背景:較為幹淨的集裝箱圖檔
4.4 字元識别
4.4.1 評價名額
整圖正确率。假設一張圖檔中,含有多處多個字元,按從左往右順序,沒處的每個字元都正确,則該圖檔識别正确。整圖正确率 = 圖檔識别正确數 / 圖檔識别測試總數。
字元正确率。每一個标注區域,按從左往右順序,正确識别出的字元數,除以總字元數。
4.4.2 方法 —— CRNN_STN
CRNN_STN是帶有STN(Spatial Transformer Networks)的CRNN(Convolutional Recurrent Neural Network)網絡。
選用的源碼來自于這裡。但原作者的代碼中,模型部分有錯誤,需要更正,見小節4.3.1。
4.4.2.1 STN
STN即空間變換網絡,普通的CNN能夠顯示的學習平移不變性,以及隐式的學習旋轉不變性,但注意力機制模型告訴我們,與其讓網絡隐式的學習到某種能力,不如為網絡設計一個顯示的處理子產品,專門處理各種變換。
4.4.2.2 CRNN
CRNN網絡分為三個部分,① 用于提取圖像特征的CNN,② 用于提取文字序列特征的BLSTM(Bidirectional Long Short-Term Memory),③ 用于選擇最佳序列,剔除多餘字元的CTC(Connectionist Temporal Classification)
4.4.3 訓練踩坑
4.4.3.1 報錯
(1)InvalidArgumentError (see above for traceback): sequence_length(0) <= 30
原因是CTC網絡的loss計算,要求所有輸入序列的長度(sequence_length)要小于max_time_step,通常max_time_step等于CTCLoss的輸入序列資料的最大長度,報錯的是因為存在sequence_length大于了max_time_step。
解決辦法:檢查CTCLoss的輸入資料和sequence_length是否對應,通常由于資料先進入了CNN導緻輸入到CTC的資料次元發生了變化,而sequence_length還對應CNN前的資料序列長度,故按照CNN結構縮放原始sequence_length即可。
(2)提示加載的預訓練模型與模型不比對
原因是作者的代碼有錯誤,将下圖中的conv_1改成batchnorm_1即好。
4.4.3.2 調整資料集
(1)CRNN隻支援單行字元檢測
在一開始時,使用多行文本圖檔直接輸入網絡,導緻識别沒有效果。
(2)使用生成的資料集訓練,但同時又使用生成的資料集驗證
這導緻在訓練過程中效果很好,acc到達0.72,但使用真圖測試時,效果較差,是以又截選真實圖檔,然後增廣資料,提升訓練效果。
4.5 字元位置檢測
4.5.1 評價名額
IoU(Intersection-over-Union),是預測的框與原标記框的交疊率,即它們的交集與并集的比值,最理想的情況是完全重疊,即比值為1。
計算公式:
4.5.2 方法 —— CTPN
CTPN(Connectionist Text Proposal Network)模型實作流程包含三個部分,① 檢測最小尺度文本框, ② 循環連結文本框,③ 文本行邊細化
本文中所使用的CTPN模型來源于這裡。
因該開源庫提供了預訓練模型,且CTPN模型對資料集标注的要求較高(不規則四邊形框),以及在集裝箱上存在多處非目标文本框,是以,并未進一步标注資料進行訓練。
4.6 總結
4.6.1 結論
本研究最終使用了81張單個集裝箱的圖檔作為測試集,最終CTPN的檢測成果:在IoU=0.5的情況下達到0.836,字元正确率0.821,整圖正确率為0.135。
字元正确率與整圖正确率差距較大的原因可能在于CTPN所擷取的目标框文本不全、分割。同時,在本預研過程中,一半多的時間是用于處理和标注資料集,但由于總時間投入較少,資料品質仍然較差。
集裝箱識别是比較具有現實意義的問題,是以也需要結合實際場景進行研究,如果能擷取大量真實場景的集裝箱圖檔,整體效果預計将會有顯著提升。
4.6.2 下一步計劃
(1)CPTN在該場景下,不适用于做目标區域檢測,因為存在多個集裝箱同時存在的場景,同時單個集裝箱也存在多處字元(如企業商标等),是以需要另外訓練一個模型去獲更完善的目标文本框區域。然後用CPTN或者其他方法将區域分割為文本條,然後使用CRNN進行識别。
4.6.3 風險
(1)目前CPTN檢測到的框因為間隔原因,會使得擷取的文本框文本不全。
正确擷取文本框(左)和錯誤擷取文本框(右)
