1、環境的安裝和開源項目的下載下傳
首先我個人建議,玩深度學習的話,不管是工作還是學習,最起碼要配一個有GPU的電腦。我個人有着血淋淋的教訓,我本人是電氣工程的一名學生,大學期間一點深度學習和機器學習的基礎都沒有,讀研的時候就帶着自己大一的時候買的筆記本電腦(沒有GPU)去了讀研的學校。我的實驗室是大家帶上自己的電腦工作學習的。因為沒有GPU很多實驗跑的特别慢,學習起來也很痛苦。後面實習的時候搞得是計算機視覺相關的工作,沒有GPU簡直沒有辦法學習了,後面毅然花錢買了一個好點的電腦,現在學習起來的确快了很多很多。是以建議大家配一個最少帶有GPU的電腦去玩計算機視覺。
1.1 paddlepaddle深度學習環境配置
paddlepaddle環境的配置可以參考我的部落格,利用Anaconda安裝pytorch和paddle深度學習環境+pycharm安裝---免額外安裝CUDA和cudnn(适合小白的保姆級教學)https://blog.csdn.net/didiaopao/article/details/119787139?spm=1001.2014.3001.5501

https://blog.csdn.net/didiaopao/article/details/119787139?spm=1001.2014.3001.5501
1.2、克隆paddleocr開源項目
現在很多計算機視覺的項目都是開源的,開源的項目基本上都在github上,是以我們可以去GitHub上去學習别的大佬的項目經驗。paddleocr的項目位址。打開以後就可以看到如下的界面了。我們隻需要點如圖的那個位置,下載下傳我們的項目代碼就行,由于項目代碼是一個壓縮包,就需要我們去解壓。這裡要注意一點是克隆develop這個分支版本的,develop:基于Paddle靜态圖開發的分支,推薦使用paddle1.8 或者2.0版本,該分支具備完善的模型訓練、預測、推理部署、量化裁剪等功能,領先于release/1.1分支。
2、算法的介紹
OCR文字的識别一般分為兩個步驟,一般首先要檢測到圖檔中字元的位置,如果字元的位置檢測不到就更不用提文字的識别了。是以如果要訓練自己的OCR文字識别模型的話。首先要訓練文本檢測模型,再去訓練文本識别模型,最後将兩個模型組合一起就可以進行OCR文字識别了。
2.1、文本檢測算法
paddleocr所用的文本檢測算法如下圖所示,需要了解算法原理的可以自己去看算法的相關論文。
文本檢測的模型的骨幹網絡有兩個系列,一個是ResNet系列,一個是MobileNet系列。總體來看同一網絡模型不同的骨幹網絡,ResNet系列的效果要由于MobileNet系列的。
2.2、資料準備
深度學習訓練自己的模型就需要收集自己的資料集,利用paddlepaddle深度學習架構訓練模型的話,就需要利用PPOCRLabel這個工具去給訓練圖檔打标簽。是以該次實驗就用icdar2015資料集,icdar2015資料集可以從官網下載下傳到,首次下載下傳需注冊。因為下載下傳還需要注冊,而且該資料集不符合我們的Padleocr的資料集格式,雖然官方提供了資料格式轉換腳本,可以将官網 label 轉換支援的資料格式。但是還是比較的麻煩的。
為此我這裡有一份可以直接用的icdar資料集,連結:百度雲盤連結提取碼:7j0u
這個資料集裡面包含着文本檢測和文本識别的資料集,該部落格講述的文本檢測模型的訓練,文本識别後面會講,是以也會用到這個資料集。資料集解壓後如下圖所示:
打開det檔案夾後其中有四個檔案,如下圖所示,j将圖中的檔案夾解壓到對應的檔案夾中。(解壓後可以選擇将壓縮包删除)
解壓後的檔案夾如下圖所示:
這四個檔案分别對應如下資訊:
└─ train/ icdar資料集的訓練資料
└─ test/ icdar資料集的測試資料
└─ train_label.txt icdar資料集的訓練标注
└─ test_label.txt icdar資料集的測試标注
提供的标注檔案格式如下,中間用"\t"分隔:json.dumps編碼前的圖像标注資訊是包含多個字典的list,字典中的
points
表示文本框的四個點的坐标(x, y),從左上角的點開始順時針排列。
transcription
表示目前文本框的文字,當其内容為“###”時,表示該文本框無效,在訓練時會跳過。如果您想在其他資料集上訓練,可以按照上述形式建構标注檔案。
" 圖像檔案名 json.dumps編碼的圖像标注資訊"
ch4_test_images/img_61.jpg [{"transcription": "MASA", "points": [[310, 104], [416, 141], [418, 216], [312, 179]]}, {...}]
我們來直覺的看下真實的圖檔資料和label資料。
最後将檔案按如下的目錄結構來,這樣的目的是為了友善同一,修改訓練參數的時候可以盡量少改參數。
至此,資料準備階段就全部結束,後面就可以開始訓練模型了。
三、文本檢測模型的訓練
3.1模型的快速訓練
首先下載下傳模型backbone的pretrain model,PaddleOCR的檢測模型目前支援兩種backbone,分别是MobileNetV3、ResNet_vd系列, 您可以根據需求使用PaddleClas中的模型更換backbone, 對應的backbone預訓練模型可以從PaddleClas repo 首頁中找到下載下傳連結。有些人問,我訓練自己的資料集,我不用預訓練模型行不行,答案是可以的,但是這樣的模型的訓練收斂起來比較慢,是以還是用預訓模型來訓練。如上的連結中有大量的文本檢測的預訓練權重,如下圖所示,大家可以根據自己的需求去下載下傳相應的權重,需要性能的就去下載下傳小模型,需要精度就去下載下傳大模型。
我這裡下載下傳的是MobileNetV3_large_x0_5_pretrained.pdparams,這個模型,如下圖所示:
3.2 修改yaml檔案參數
将在github上下載下傳好的paddleocr開源代碼用pycharm打開,将上面準備的資料集放到如下圖的位置下,将我們下載下傳的預訓練權重放到pretrain_models(該檔案夾沒有,需要自己建立)檔案夾下。
找到configs這個目錄打開,找到det_mv3_db.yml這個yml檔案,修改其中的檔案來訓練我們的模型,我們選用的文字檢測,MobileNetV3這個網絡骨幹,db文字檢測算法來訓練我們的網絡參數。
其中yaml檔案中的參數如連結所示:
這裡要特别注意如下幾點:
1、填寫預訓練權重的那一行參數的位置,預訓練權重是不需要填寫字尾名的。
2、填寫訓練資料集和驗證資料集及其對應的标簽路徑的時候,首先最好填寫相應路徑的絕對路徑,然後将絕對路徑的\這個符号改成/,然後在填寫資料集的路徑的時候,隻需要填寫到資料圖檔目錄最外面一層路徑就可以了(如圖到text_localization這層就可以了,這層後面加一個/就可以了)。标簽的路徑填寫标簽的絕對路徑就行。
3、我的電腦的顯示卡記憶體是6GB,顯示卡為3060系列的顯示卡,訓練集和驗證集的batch_size_per_card、num_workers這兩個參數必須為如下兩個參數值的大小,否則訓練的時候會爆出顯存溢出的情況,大家可以根據自己顯示卡的型号修改如下的參數的大小。
3.3 開始訓練
将如上的設定弄好了以後,就可以訓練我們的資料了。打開pycharm的控制台。在控制台中輸入如下的指令,這段指令的意思是,利用det_mv3_db.yml檔案中的參數,進行文字檢測的訓練。
python tools/train.py -c configs/det/det_mv3_db.yml
訓練結束以後,會在output目錄中生成權重檔案,和一些其他的資訊,如下圖所示:
如果訓練程式中斷,如果希望加載訓練中斷的模型進而恢複訓練,可以通過指定Global.checkpoints指定要加載的模型路徑:
python3 tools/train.py -c configs/det/det_mv3_db.yml -o Global.checkpoints=./your/trained/model
注意:
Global.checkpoints
的優先級高于
Global.pretrain_weights
的優先級,即同時指定兩個參數時,優先加載
Global.checkpoints
指定的模型,如果
Global.checkpoints
指定的模型路徑有誤,會加載
Global.pretrain_weights
指定的模型。
測試檢測效果
測試單張圖像的檢測效果,打開pycharm的控制台,輸入如下的指令。位址要填正确。
python tools/infer_det.py -c configs/det/det_mv3_db.yml -o Global.infer_img="./doc/imgs_en/img_10.jpg" Global.pretrained_model="./output/det_db/best_accuracy"
檢測的效果如下圖,可以看出,檢測的效果還是很不錯的。
測試DB模型時,調整後處理門檻值
python tools/infer_det.py -c configs/det/det_mv3_db.yml -o Global.infer_img="./doc/imgs_en/img_10.jpg" Global.pretrained_model="./output/det_db/best_accuracy" PostProcess.box_thresh=0.6 PostProcess.unclip_ratio=1.5
測試檔案夾下所有圖像的檢測效果
python tools/infer_det.py -c configs/det/det_mv3_db.yml -o Global.infer_img="./doc/imgs_en/" Global.pretrained_model="./output/det_db/best_accuracy"