天天看點

Baseline | 2019 DCIC《 文化傳承—漢字書法多場景識别》EASTOCR

Thursday 競賽分享

2019 DCIC已經開賽一個月了,據說華為賽題比較有難度,小編特此搜羅到一位妹子大佬的Baseline,為各位參賽者提供思路~

本文在OCR模型上花6個小時,僅訓練了10個epoch,在排行榜A榜得到0.42的F1,筆者目測再訓練久一點F1>0.80是肯定有的。

作者 | 小阿呂

來源 | 一碗資料湯

大賽介紹

2019數字中國創新大賽(Digital China Innovation Contest, DCIC 2019)由福建省數字福建建設上司小組辦公室、福建省工業和資訊化廳、福州市人民政府、中國電子資訊産業發展研究院和數字中國研究院聯合主辦,第十二屆全國政協副主席王欽敏擔任大賽總顧問。作為第二屆數字中國建設峰會的重要組成部分,本屆賽事分為大資料、人工智能、工業網際網路三大類算法題,旨在解決數字經濟建設發展中的痛點、難點,推動新一代資訊技術和傳統産業的深入融合,助力數字中國建設。

賽題名稱

文化傳承 – 漢字書法多場景識别

(Cultural Inheritance – Recognizing Chinese Calligraphy in Multiple Scenarios)

賽題背景

法是漢字的書寫藝術,是中華民族對人類審美的偉大貢獻。從古至今,有大量照亮書法藝術星空的經典之作,是中華文明曆經漫長歲月留下的藝術精華。這些書法作品現在仍以各種形式呈現給世人:博物館裡的字畫作品、旅遊景點裡的碑刻、建築上的題詞、對聯、牌匾、甚至尋常家居裡也會懸挂帶有書法藝術的字畫。在全球化、電子化的今天,書法的外部環境有了非常微妙的變化,對于年輕一代,古代書法字型越來越難以識别,一些由這些書法文字承載的傳統文化無法順利傳承。 是以利用先進的技術,實時、準确、自動地識别出這些書法文字,對于記錄整理書法藝術和傳播書法背後的中國文化有着重要的社會價值。

賽題任務

書法是中華民族文化傳承的瑰寶,希望此次大賽能夠通過人工智能算法實作書法文字的自動識别,解決實際場景中有些書法文字難以識别的問題。要求參賽者給出測試資料集中每張圖檔中文字的位置及對應的内容。推薦參賽者在華為雲ModelArts開發平台上完成訓練和預測任務。

本次大賽會提供已标注的訓練圖檔集供參賽者開發訓練生成模型和算法,參賽者用開發&訓練生成的模型和算法識别測試圖檔集中每張圖檔書法文字的内容以及文字對應的位置并送出競賽平台,以參賽者送出的結果準确率作為競賽排名成績的依據。

寫在前面

本文使用EAST模型作為文字框檢測模型https://github.com/argman/EAST , 在文字識别OCR模型上使用西安交通大學人工智能實踐大賽第一名@ yinchangchang 的方案https://github.com/yinchangchang/ocr_densenet

本文代碼均已開源在且已經修改成了可以在ModelArts訓練的格式,可以對比開源的EAST和OCR代碼,檢視修改了哪些地方。 本文在OCR模型上花6個小時,僅訓練了10個epoch,在排行榜A榜得到0.42的F1,筆者目測再訓練久一點F1>0.80是肯定有的。

在ModelArts上訓練的注意事項: 1.需要修改檔案儲存、修改、讀取的方法,具體請看1.2節; 2.訓練是将OBS上的啟動檔案所在目錄下載下傳到GPU機器上運作,GPU機器使用者路徑為/home/work/,如需要下載下傳資料到機器上,推薦下載下傳到/cache/目錄下(機器上的是以資料在一次訓練作業完成後,都會清空); 3.請及時檢視作業運作狀态,以免造成代金券浪費;

EAST

EAST資料處理

為了節省優惠券以及線上操作時間,在上ModelArts之前,先将資料處理完成後再上傳。解壓所有下載下傳的資料包。

Baseline | 2019 DCIC《 文化傳承—漢字書法多場景識别》EASTOCR

EAST需要一張圖對應一個.txt格式的資料,代碼裡的convert_to_txt.py可以将訓練集友善地轉換成需要的格式,其中convert_to_txt.py裡的資料路徑需要改成自己的資料路徑,

Baseline | 2019 DCIC《 文化傳承—漢字書法多場景識别》EASTOCR

将得到的資料上傳到在OBS上建立的路徑如

Baseline | 2019 DCIC《 文化傳承—漢字書法多場景識别》EASTOCR

ModelArts使用注意點

ModelArts使用注意點:

1.如果發現沒有某個python庫,需要在訓練腳本裡加上“os.system(‘pip install xxx’)”,系統會自動安裝這個庫;

2.無法直接使用open方法讀寫OBS上的檔案,需要使用moxing.Framework.file.File代替open,如open(‘input.txt’,’r’)-> moxing. Framework.file.File(‘input.txt’,’r’);

3.Glob也需要moxing.Framework.file.glob;

4.一般情況下,ModelArts的每個引擎都對儲存checkpoint方法做了對OBS路徑的适配,如果發現不能儲存也可以将checkpoint路徑設定為”./xxx”或者“/cache/xxx”,然後再使用mox.file.copy('./model.ckpt', 's3://ckpt/model.ckpt') 将EAST代碼上傳到OBS:

Baseline | 2019 DCIC《 文化傳承—漢字書法多場景識别》EASTOCR

使用ModelArts建立訓練作業,注意不能使用notebook建立,notebook裡沒有GPU資源,而且使用notebook也隻能暫時儲存資料,一旦關閉後,資料都會清空,而且不關閉notebook,會消耗大量代金券。但是使用OBS存儲的資料不會清空,使用建立作業方式訓練可以節省代金券。

使用ModelArts訓練EAST

Baseline | 2019 DCIC《 文化傳承—漢字書法多場景識别》EASTOCR

之後選擇資料存儲路徑和使用的引擎,啟動檔案等,

Baseline | 2019 DCIC《 文化傳承—漢字書法多場景識别》EASTOCR

再輸入使用腳本需要的相應參數

Baseline | 2019 DCIC《 文化傳承—漢字書法多場景識别》EASTOCR

參數清單:

gpu_list=0

input_size=512

batch_size_per_gpu=14

checkpoint_path_obs=s3://tcd_public/ckpt

text_scale=512

training_data_path_obs=s3://tcd_public/data/east/

geometry=RBOX

learning_rate=0.0001

num_readers=24

選擇計算資源,并儲存作業參數,以便下次使用,就可以開始運作了(18塊錢真的貴)。

Baseline | 2019 DCIC《 文化傳承—漢字書法多場景識别》EASTOCR

點選運作,

Baseline | 2019 DCIC《 文化傳承—漢字書法多場景識别》EASTOCR

最終在ckpt檔案夾下面會生成幾個模型,如圖所示(隻訓練了一個step) ,

Baseline | 2019 DCIC《 文化傳承—漢字書法多場景識别》EASTOCR

推理測試

在訓練到一定精度後,就可以測試了。同樣建立作業,選擇test資料集,使用EAST裡的eval.py腳本,輸入必要參數,就可以開始運作。

Baseline | 2019 DCIC《 文化傳承—漢字書法多場景識别》EASTOCR
Baseline | 2019 DCIC《 文化傳承—漢字書法多場景識别》EASTOCR

之後在OBS的data目錄下會出現output.txt檔案,裡面的每行包含測試圖檔的名字和4個x和y的點。

Baseline | 2019 DCIC《 文化傳承—漢字書法多場景識别》EASTOCR

OCR

生成ocr資料

資料主要包含以下要求:

  • 1.開源的第一名代碼需要使用一個train.csv,包含name和content兩個字段的檔案
  • 2.訓練OCR需要截取原圖的資料中的每一列文字,這裡隻簡單使用最大的xy坐标截取;
  • 3.生成測試資料集;
  • 4.所有資料集均儲存到data/dataset/train/和test/下,可以少改些代碼;

本文隻使用了訓練資料集,沒有将驗證集加入訓練,如要取的更高的精度,應該将驗證集也加入訓練。 線上下使用ocr中的makedata.py生成訓練所需要的資料格式,替換makedata.py裡資料的相關路徑。其中目标路徑最好填寫為ocr/data/dataset/train/和ocr/data/dataset/test/,input_file是指文字檢測模型的推理輸出output.txt,output_file是作品樣例送出檔案。

Baseline | 2019 DCIC《 文化傳承—漢字書法多場景識别》EASTOCR
Baseline | 2019 DCIC《 文化傳承—漢字書法多場景識别》EASTOCR

再在code中的preprocessing下運作map_word_to_index.py和analysis_dataset.py對資料做分析和文字提取,這個操作會在ocr/file/下生成訓練的文字和圖檔的相關檔案。

處理完資料就可以将ocr下所有代碼和資料都上傳OBS了。

當然如果覺得線下資料上傳到OBS速度較慢,可以選擇使用ModelArts的notebook,此時需要先下載下傳原資料到notebook的機器上,如data_path=’/cache/data’, from moxing.framework import file file.copy_parallel(data_path_obs, data_path) 處理完資料後,再上傳到OBS上, file.copy_parallel(你在/cache/下處理完後的資料路徑, ocr需要的資料路徑如/ocr/data/dataset/train/)

建立OCR訓練作業

訓練政策幾乎與開源的方案一樣,但是比賽使用的資料是豎排的,這裡簡單在dataloader.py裡使用transpose轉置成橫向的。 建立作業,輸入參數:

Baseline | 2019 DCIC《 文化傳承—漢字書法多場景識别》EASTOCR

之後點選确定開始運作,幾個step之後可以看到,loss在下降了,等到差不多十個epoch,花了大概6小時。(本人隻訓練了10個epoch,訓練更多個epoch以及如果再加上源碼中的hard mining可以得到更高的分數)。

Baseline | 2019 DCIC《 文化傳承—漢字書法多場景識别》EASTOCR

這裡設定每一個epoch儲存一次ckpt,在save-dir-obs路徑下可以看到ckpt檔案。

Baseline | 2019 DCIC《 文化傳承—漢字書法多場景識别》EASTOCR

推理預測

用main.py做預測,設定phase為test,設定resume參數使用的ckpt路徑,設定為GPU機器上的/cache/路徑,參數如圖,

Baseline | 2019 DCIC《 文化傳承—漢字書法多場景識别》EASTOCR

最終可以在OBS路徑上看到predict.csv的檔案,下載下傳就可以上傳到比賽官網了。

Baseline | 2019 DCIC《 文化傳承—漢字書法多場景識别》EASTOCR
Baseline | 2019 DCIC《 文化傳承—漢字書法多場景識别》EASTOCR