iT邦幫忙

2021 iThome 鐵人賽

DAY 30
0
AI & Data

手寫中文字之影像辨識系列 第 30

【第30天】最終回

玉山競賽心得

  1. 從朋友口中得知玉山銀行和趨勢科技舉辦了中文手寫字辨識的比賽,於是我們召集資策會夥伴們組團參加。
  2. 拿到資料後,我們興奮地討論要如何處理圖片、訓練模型...等步驟,整個流程都是夥伴們激烈碰撞而來。印象最深刻的是連續一周瘋狂訓練模型,那個疲憊感真是夠了。直到比賽結束後才鬆了一口氣,取而代之的是滿滿的成就感。
  3. 接下來,讓我們再次回顧這次的比賽的重點...

過程回顧

  1. 資料前處理

    1.1 YoloV4

    • 以YoloV4模型自動框選中文字。
    • 利用YoloV4的物件偵測框,裁切文字以外的空白處。

    1.2 去除雜訊與灰階(OpenCV影像處理)

    • 以HSV進行顏色追蹤,去除不需要的顏色或雜訊。
    • 分別將圖檔灰階與二值化,比較後發現灰階圖檔內含較多資訊,模型訓練準確度較好。
  2. 資料擴增

    2.1 椒鹽雜訊:

    • 採取mask的方式,製造小方塊隨機遮擋部分文字。
    • 增加資料集訓練模型,較沒有資料擴增的準確度高。

    2.2 其他隊伍經驗分享

    • 以中文字加上空白背景圖合成圖片。
    • 以GAN自動生成中文字的圖片。
  3. 資料不平衡

    3.1 說明:資料中各類別樣本數不平衡,可能導致模型訓練後,樣本較少的類別辨識度效果差。

    3.2 處理方法

    • 以中文字加上空白背景圖合成新樣本,使每個類別的樣本數一致。
    • 以Keras內建的class_weight,將樣本數少的類別權重調高,樣本數多的類別權重調低。
  4. 訓練模型

    4.1 CUDA加速與遷移學習:可提高模型訓練效率。

    4.2 EarlyStopping與ModelCheckpoint:避免模型過擬合。

    4.3 Learning Rate

    • 採用固定Learning Rate訓練模型,可能掉入局部最佳解或者是卡在鞍點。
    • 採用Reduce Learning Rate或Cyclical Learning Rate,可避免上述問題,提高模型訓練效果。

    4.4 優化器:

    • 我們訓練模型時,使用Adam + ReduceLROnPlateau,得到不錯的效果。
    • 建議嘗試各種優化器與Learning Rate訓練模型。實際嘗試過,才知道是否合適。

    4.5 預訓練模型

    • 提及五種模型架構:Xception、ResNet152V2、DenseNet、InceptionResNetV2與InceptionV4。
    • 以五種預訓練模型進行遷移學習,比較模型辨識效果。

    4.6 優化模型:以多個模型進行加權組合。

    4.7 判定isnull(第801類)

    • 模型訓練時僅分成800類,無法判定其他類別(第801類)。
    • 利用模型輸出的機率值(softmax),設定閾值判斷800類以外的類別。
  5. GCP服務

    • 利用Python撰寫Flask框架。
    • 從開啟GCP免費服務,到設定VM,最終上傳打包的模型與API文件至VM。
    • 忘記關閉付費功能的慘痛代價,多繳了好多錢啊。

總結

  1. 首先,感謝夥伴們一同參加玉山競賽,讀萬卷書不如行萬里路,我們一起踏出了第一步。
  2. 這次跟大家分享經驗的同時,將玉山競賽內容重新實作一次,並加入得獎者分享的技巧。期間數次碰壁想放棄,尤其是中秋節,親朋好友都在慶祝,我只能苦坐在電腦前,太痛苦了。所幸最終還是堅持了下來,希望此次分享能為你們帶來啟發。
  3. 感謝找我一起參加IT鐵人賽的帥哥,恭喜我們順利完賽!大家也可以去看看他的文章
  4. 未來,我們還會持續參加影像辨識競賽,讓我們繼續看下去...

上一篇
【第29天】探討與改善-資料不平衡(二)
下一篇
【第31天】番外篇-Windows + YOLOV4 本地端訓練
系列文
手寫中文字之影像辨識31

尚未有邦友留言

立即登入留言