--- title: 趨勢科技文字辨識競賽專題過程分享 tags: AI disqus: hackmd --- # 趨勢科技文字辨識競賽專題過程分享 ## 前言 今年5/25~9/17期間,我參加了勞動部產業新尖兵計畫 : [AI人工智慧與邊緣運算人才養成班](https://elite.taiwanjobs.gov.tw/ClassSearch/Detail?UUID=8DA3A83CD3C14AB981FE1452E1B30E30&SOURCE_TYPE=ELIT)。 結訓的專題發表,我們這組決定參加趨勢科技舉辦的[繁體中文場景文字辨識競賽-進階賽:繁體中文場景文字辨識](https://tbrain.trendmicro.com.tw/Competitions/Details/16),希望藉由參加競賽,練習課程所學到的知識。 目前比賽還在進行中,若有持續進展會持續更新該篇文章。 **最終排名(10/20公布成績) :** Private Leaderboard (21 th / 183 teams 參賽組別) ![](https://i.imgur.com/ZET2PXK.png) ## 結訓專題簡報請參閱 : [簡報連結](https://docs.google.com/presentation/d/1a7yPjnUe1XvaMSANKUO7LG6KRSewNyZG/edit?usp=sharing&ouid=118357586642108382035&rtpof=true&sd=true) 簡報內包含研究動機、比賽說明、自然場景文字定位與偵測常用的模型、以及本次專題詳細研究流程與實作: * 資料前處理 * YOLO v5 訓練文字位置偵測模型 * 現有OCR模型分數評估 * YOLO v5 訓練文字辨識模型 課程結束時Public Leaderboard分數為**0.53**左右,以下補充課程結束後,簡報未講解部分,以及持續提高分數的對策。 ## 為何使用YOLO v5模型做為本次專題AI模型? * 為強大的物件偵測、特徵分類模型,文字定位與辨識為物件偵測與特徵辨識之議題,該模型較為適合。 * 訓練模型步驟較為方便,適合AI初學者。 * data argumetion 參數豐富,可以模擬自然場景中文字的各種狀況。詳細YOLO data argumetion實作程式碼可參閱連結 : [YOLO Data Argumetion 參數詳解](http://www.4k8k.xyz/article/flyfish1986/119968461) * 希望由本次比賽測試YOLO v5模型是否可包含大量類別(常見中文字起碼超過2000字)。目前網路上看到的YOLO v5範例很少訓練超過1000類。 ## 訓練資料集生成工具 若是要訓練文字辨識模型,比賽所提供的訓練資料,字數肯定是不夠的,比賽訓練資料中一個單字能在自然場景中出現能超過100次就算很多了。 所以需要另外找生成文字圖片的工具。 本次比賽以[Color_OCR_image_generator](https://github.com/zcswdt/Color_OCR_image_generator)為基礎,延伸開發**應用於訓練YOLO文字辨識模型之文字圖片生成工具 :** [文字圖片生成工具 for YOLO](https://github.com/Guang-Chiun/OCR_Image_Generator)。 ## 後續提升分數對策 ### 1. 雜訊背景添加 **Score : 0.53 => 0.60** * 原先產生的文字圖片訓練資料,背景都較為單純,而真實自然場景中的文字一般都會有複雜背景的干擾,於本次訓練中,模型加入包含複雜背景的圖片訓練,測試後發現分數明顯提升。 ![](https://i.imgur.com/lHu3tgu.png) ### 2. 影像後處理 **Score : 0.60 => 0.65** * 比賽會給定要偵測文字的Polygon,如下圖綠色框框。 ![](https://i.imgur.com/PbAoTE4.jpg) * 在進行成果偵測時,要先將比賽給定要預測的範圍裁切下來,再丟進模型預測成果,原先裁切的方式為取包含這四個點的矩形,如上圖藍色框框,裁切成果如下圖。 ![](https://i.imgur.com/ZnhZoOp.png =450x190) * 後來發現可利用4 Points投影校正方法,取得校正後的圖再丟進模型預測。 ![](https://i.imgur.com/BmALEph.png =450x150) * 校正影像程式碼可參閱 : **CutImageModify4PointsPerspective.ipynb** : <a href="https://colab.research.google.com/drive/1OFPDo9GmNzMfnVQSOeMcciOIb2rl4wBQ" target="_blank"><img src="https://colab.research.google.com/assets/colab-badge.svg" alt="Open In Colab"/></a> * 由於訓練資料中較少投影變形較大的文字圖片,可想而知對於投影變形較大的文字圖片預測成果會不佳,研究發現透過影像處理方法校正,分數會有所提升。 ### 3. 持續增加資料量、模型訓練時間、單字數 **Score : 0.65 => 0.68** * 增加文字圖片訓練資料量。 * 增加訓練模型epochs數。 * 增加單字數(目前2260字)。 ## 參考連結 * [GitHub : YOLO v5](https://github.com/ultralytics/yolov5) * [YOLO 模型介紹1](https://blog.csdn.net/g11d111/article/details/108845799) * [YOLO 模型介紹2](https://blog.csdn.net/g11d111/article/details/108872076) * [YOLO Data Argumetion 參數詳解](http://www.4k8k.xyz/article/flyfish1986/119968461) * [4 Point OpenCV getPerspective Transform Example](https://www.pyimagesearch.com/2014/08/25/4-point-opencv-getperspective-transform-example/) * [4 point persective transform failure](https://stackoverflow.com/questions/42262198/4-point-persective-transform-failure)