@
目錄
- PaddleOCR簡介
- 環境配置
- PaddleOCR2.0的配置環境
- Docker
- 資料集
- 文本檢測
- 使用自己的資料集
- 文本識别
- 使用自己的資料集
- 字典
- 自定義字典
- 添加空格類别
- 文本角度分類
- 文本檢測
- 文本檢測
- 訓練
- 模型準備
- 啟動訓練
- 斷點訓練
- 名額評估
- 測試檢測效果
- 訓練
- 文本識别
- 啟動訓練
- 評估
- 預測
- 啟動訓練
- 文本角度分類
- 訓練
- 啟動訓練
- 資料增強
- 訓練
- 評估
- 預測
- 訓練
- 配置檔案說明
- Global
- Optimizer (ppocr/optimizer)
- Architecture (ppocr/modeling)
- Loss (ppocr/losses)
- PostProcess (ppocr/postprocess)
- Metric (ppocr/metrics)
- Dataset (ppocr/data)
- 錯誤解決方案
- 當文本識别使用ResNet50時,會出現DataLoader reader thread raised an exception!
PaddleOCR簡介
PaddleOCR分為文本檢測、文本識别和方向分類器三部分,其中文本檢測有三個模型,分别是MobileNetV3、ResNet18_vd和ResNet50,其中最常使用的是MobileNetV3模型,整體比較小,适合應用于手機端。文本識别隻有一個MobileNetV3預訓練模型。方向分類器使用預設的模型。
環境配置
PaddleOCR2.0的配置環境
PaddleOCR2.0的配置環境為:
- PaddlePaddle 2.0.0
- Python 3.7
- glibc 2.23
- cuDNN 7.6+(GPU)
其中,PaddlePaddle可以使用2.0.*
Docker
如果使用docker運作,可以直接使用
paddlepaddle/paddle:2.0.1-gpu-cuda11.0-cudnn8
鏡像,根據個人使用習慣,可以更換,但是paddlepaddle的版本和cudnn版本不能低于PaddleOCR2.0的配置環境。
資料集
其中,文本檢測和文本識别使用的都是icdar2015資料集,方向分類器的資料集需自備
icdar2015資料集可以從官網下載下傳,首次下載下傳需注冊。
文本檢測
文本檢測的icdar2015資料集的标注檔案下載下傳:
wget -P ./train_data/ https://paddleocr.bj.bcebos.com/dataset/train_icdar2015_label.txt
wget -P ./train_data/ https://paddleocr.bj.bcebos.com/dataset/test_icdar2015_label.txt
也可以使用PaddleOCR提供的資料格式轉換腳本,将官網的label轉換為支援的資料格式。轉換資料工具為
ppocr/utils/gen_label.py
# 将官網下載下傳的标簽檔案轉換為 train_icdar2015_label.txt
python gen_label.py --mode="det" --root_path="icdar_c4_train_imgs/" \
--input_path="ch4_training_localization_transcription_gt" \
--output_label="train_icdar2015_label.txt"
解壓資料集和下載下傳标注檔案後,放在PaddleOCR/train_data檔案中,檔案目錄為:
/PaddleOCR/train_data/icdar2015/text_localization/
└─ icdar_c4_train_imgs/ icdar資料集的訓練資料
└─ ch4_test_images/ icdar資料集的測試資料
└─ train_icdar2015_label.txt icdar資料集的訓練标注
└─ test_icdar2015_label.txt icdar資料集的測試标注
如果不按照這個格式,需要在後面的配置檔案中配置
使用自己的資料集
标注檔案格式如下,中間用"\t"分隔:
" 圖像檔案名 json.dumps編碼的圖像标注資訊"
ch4_test_images/img_61.jpg [{"transcription": "MASA", "points": [[310, 104], [416, 141], [418, 216], [312, 179]]}, {...}]
json.dumps編碼前的圖像标注資訊是包含多個字典的list,字典中的
points
表示文本框的四個點的坐标(x, y),從左上角的點開始順時針排列。
transcription
表示目前文本框的文字,當其内容為“###”時,表示該文本框無效,在訓練時會跳過。
如果您想在其他資料集上訓練,可以按照上述形式建構标注檔案
文本識别
文本識别的資料集也可以參考DTRB,下載下傳benchmark所需的lmdb格式資料集。如果希望複現SRN的論文标準,需要下載下傳離線增廣資料,提取碼: y3ry。增廣資料是由MJSynth和SynthText做旋轉和擾動得到的。資料下載下傳完成後請解壓到 {your_path}/PaddleOCR/train_data/data_lmdb_release/training/ 路徑下。
PaddleOCR提供了一份用于訓練icdar2015資料集的标簽檔案:
# 訓練集标簽
wget -P ./train_data/ic15_data https://paddleocr.bj.bcebos.com/dataset/rec_gt_train.txt
# 測試集标簽
wget -P ./train_data/ic15_data https://paddleocr.bj.bcebos.com/dataset/rec_gt_test.txt
PaddleOCR也提供了資料格式轉換文本,可以将官網label轉換支援的資料格式。資料轉換工具在
ppocr/utils/gen_label.py
# 将官網下載下傳的标簽檔案轉換為 rec_gt_label.txt
python gen_label.py --mode="rec" --input_path="{path/of/origin/label}" --output_label="rec_gt_label.txt"
使用自己的資料集
預設請将圖檔路徑和圖檔标簽用 \t 分割,如用其他方式分割将造成訓練報錯。
" 圖像檔案名 圖像标注資訊 "
train_data/train_0001.jpg 簡單可依賴
train_data/train_0002.jpg 用科技讓複雜的世界更簡單
最終訓練集的檔案結構為:
|-train_data
|-ic15_data
|- rec_gt_train.txt
|- train
|- word_001.png
|- word_002.jpg
|- word_003.jpg
| ...
測試集的檔案結構為:
|-train_data
|-ic15_data
|- rec_gt_test.txt
|- test
|- word_001.jpg
|- word_002.jpg
|- word_003.jpg
| ...
字典
文本檢測與文本識别相比還需要一個字典檔案({word_dict_name}.txt),使用模型訓練時,可以将所有出現的字元映射為字典的索引。
是以字典需要包含所有希望被正确是被的字元,{word_dict_name}.txt需要寫成如下格式,并以
utf-8
編碼格式儲存:
l
d
a
d
r
n
word_dict.txt每行有一個單子,将字元與數字索引映在一起,“and”将被索引稱[2 5 1]
ppocr/utils/ppocr_keys_v1.txt
是一個包含6623個字元的中文字典
ppocr/utils/ic15_dict.txt
是一個包含36個字元的英文字典
ppocr/utils/dict/french_dict.txt
是一個包含118個字元的法文字典
ppocr/utils/dict/japan_dict.txt
是一個包含4399個字元的日文字典
ppocr/utils/dict/korean_dict.txt
是一個包含3636個字元的韓文字典
ppocr/utils/dict/german_dict.txt
是一個包含131個字元的德文字典
ppocr/utils/dict/en_dict.txt
是一個包含63個字元的英文字典
您可以按需使用。
目前的多語言模型仍處在demo階段,會持續優化模型并補充語種。
自定義字典
如需自定義dic檔案,請在
configs/rec/rec_icdar15_train.yml
中添加
character_dict_path
字段, 指向您的字典路徑。 并将
character_type
設定為
ch
。
添加空格類别
如果希望支援識别"空格"類别, 請将yml檔案中的
use_space_char
字段設定為
True
。
文本角度分類
請按如下步驟設定資料集:
訓練資料的預設存儲路徑是
PaddleOCR/train_data/cls
,如果您的磁盤上已有資料集,隻需建立軟連結至資料集目錄:
ln -sf <path/to/dataset> <path/to/paddle_ocr>/train_data/cls/dataset
請參考下文組織您的資料。
- 訓練集
首先請将訓練圖檔放入同一個檔案夾(train_images),并用一個txt檔案(cls_gt_train.txt)記錄圖檔路徑和标簽。
注意: 預設請将圖檔路徑和圖檔标簽用
\t
分割,如用其他方式分割将造成訓練報錯
0和180分别表示圖檔的角度為0度和180度
" 圖像檔案名 圖像标注資訊 "
train/word_001.jpg 0
train/word_002.jpg 180
最終訓練集應有如下檔案結構:
|-train_data
|-cls
|- cls_gt_train.txt
|- train
|- word_001.png
|- word_002.jpg
|- word_003.jpg
| ...
- 測試集
同訓練集類似,測試集也需要提供一個包含所有圖檔的檔案夾(test)和一個cls_gt_test.txt,測試集的結構如下所示:
|-train_data
|-cls
|- cls_gt_test.txt
|- test
|- word_001.jpg
|- word_002.jpg
|- word_003.jpg
| ...
文本檢測
訓練
模型準備
首先下載下傳模型backbone的pretrain model,PaddleOCR的檢測模型目前支援兩種backbone,分别是MobileNetV3、ResNet_vd系列, 您可以根據需求使用PaddleClas中的模型更換backbone。
cd PaddleOCR/
# 下載下傳MobileNetV3的預訓練模型
wget -P ./pretrain_models/ https://paddle-imagenet-models-name.bj.bcebos.com/MobileNetV3_large_x0_5_pretrained.tar
# 或,下載下傳ResNet18_vd的預訓練模型
wget -P ./pretrain_models/ https://paddle-imagenet-models-name.bj.bcebos.com/ResNet18_vd_pretrained.tar
# 或,下載下傳ResNet50_vd的預訓練模型
wget -P ./pretrain_models/ https://paddle-imagenet-models-name.bj.bcebos.com/ResNet50_vd_ssld_pretrained.tar
# 解壓預訓練模型檔案,以MobileNetV3為例
tar -xf ./pretrain_models/MobileNetV3_large_x0_5_pretrained.tar ./pretrain_models/
# 注:正确解壓backbone預訓練權重檔案後,檔案夾下包含衆多以網絡層命名的權重檔案,格式如下:
./pretrain_models/MobileNetV3_large_x0_5_pretrained/
└─ conv_last_bn_mean
└─ conv_last_bn_offset
└─ conv_last_bn_scale
└─ conv_last_bn_variance
└─ ......
啟動訓練
# 單機單卡訓練 mv3_db 模型
python3 tools/train.py -c configs/det/det_mv3_db.yml \
-o Global.pretrain_weights=./pretrain_models/MobileNetV3_large_x0_5_pretrained/
# 單機多卡訓練,通過 --gpus 參數設定使用的GPU ID
python3 -m paddle.distributed.launch --gpus \'0,1,2,3\' tools/train.py -c configs/det/det_mv3_db.yml \
-o Global.pretrain_weights=./pretrain_models/MobileNetV3_large_x0_5_pretrained/
如果安裝的是cpu版本,請将配置檔案中的use_gpu字段修改為false
訓練參數
- -m 配置paddle
- --gpus 使用的GPU
- -c 選擇配置檔案
- -o 配置配置檔案中的内容
- pretrain_weights: 使用的模型目錄
- Optimizer.base_lr: 訓練時的學習率
斷點訓練
如果訓練程式中斷,如果希望加載訓練中斷的模型進而恢複訓練,可以通過指定Global.checkpoints指定要加載的模型路徑(如
./output/det_r50_vd/latest
):
python3 tools/train.py -c configs/det/det_mv3_db.yml -o Global.checkpoints=./output/det_mv3_vd/latest
注意:
Global.checkpoints
的優先級高于
Global.pretrain_weights
的優先級,即同時指定兩個參數時,優先加載
Global.checkpoints
指定的模型,如果
Global.checkpoints
指定的模型路徑有誤,會加載
Global.pretrain_weights
指定的模型。
名額評估
PaddleOCR計算三個OCR檢測相關的名額,分别是:Precision、Recall、Hmean。
運作如下代碼,根據配置檔案
det_db_mv3.yml
中
save_res_path
指定的測試集檢測結果檔案,計算評估名額。
評估時設定後處理參數
box_thresh=0.5
,
unclip_ratio=1.5
,使用不同資料集、不同模型訓練,可調整這兩個參數進行優化 訓練中模型參數預設儲存在
Global.save_model_dir
目錄下。在評估名額時,需要設定
Global.pretrained_model
指向儲存的參數檔案。
python3 tools/eval.py -c configs/det/det_mv3_db.yml -o Global.pretrained_model="./output/det_mv3_vd/best_accuracy" PostProcess.box_thresh=0.5 PostProcess.unclip_ratio=1.5
- 注:
、box_thresh
是DB後處理所需要的參數,在評估EAST模型時不需要設定unclip_ratio
測試檢測效果
測試單張圖像的檢測效果
python3 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" Global.load_static_weights=false
測試DB模型時,調整後處理門檻值,
python3 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" Global.load_static_weights=false PostProcess.box_thresh=0.6 PostProcess.unclip_ratio=1.5
測試檔案夾下所有圖像的檢測效果
python3 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" Global.load_static_weights=false
文本識别
啟動訓練
PaddleOCR提供了訓練腳本、評估腳本和預測腳本,本節将以 CRNN 識别模型為例:
首先下載下傳pretrain model,您可以下載下傳訓練好的模型在 icdar2015 資料上進行finetune
cd PaddleOCR/
# 下載下傳MobileNetV3的預訓練模型
wget -P ./pretrain_models/ https://paddleocr.bj.bcebos.com/dygraph_v2.0/en/rec_mv3_none_bilstm_ctc_v2.0_train.tar
# 解壓模型參數
cd pretrain_models
tar -xf rec_mv3_none_bilstm_ctc_v2.0_train.tar && rm -rf rec_mv3_none_bilstm_ctc_v2.0_train.tar
開始訓練:
如果您安裝的是cpu版本,請将配置檔案中的
use_gpu
字段修改為false
# GPU訓練 支援單卡,多卡訓練,通過--gpus參數指定卡号
# 訓練icdar15英文資料 訓練日志會自動儲存為 "{save_model_dir}" 下的train.log
python3 -m paddle.distributed.launch --gpus \'0,1,2,3\' tools/train.py -c configs/rec/rec_icdar15_train.yml
- 資料增強
PaddleOCR提供了多種資料增強方式,如果您希望在訓練時加入擾動,請在配置檔案中設定
distort: true
。
預設的擾動方式有:顔色空間轉換(cvtColor)、模糊(blur)、抖動(jitter)、噪聲(Gasuss noise)、随機切割(random crop)、透視(perspective)、顔色反轉(reverse)。
訓練過程中每種擾動方式以50%的機率被選擇,具體代碼實作請參考:img_tools.py
由于OpenCV的相容性問題,擾動操作暫時隻支援Linux
- 訓練
PaddleOCR支援訓練和評估交替進行, 可以在
configs/rec/rec_icdar15_train.yml
中修改
eval_batch_step
設定評估頻率,預設每500個iter評估一次。評估過程中預設将最佳acc模型,儲存為
output/rec_CRNN/best_accuracy
。
如果驗證集很大,測試将會比較耗時,建議減少評估次數,或訓練完再進行評估。
其他模型配置請參考PaddleOCR github
評估
評估資料集可以通過
configs/rec/rec_icdar15_train.yml
修改Eval中的
label_file_path
設定。
# GPU 評估, Global.pretrained_model 為待測權重
python3 -m paddle.distributed.launch --gpus \'0\' tools/eval.py -c configs/rec/rec_icdar15_train.yml -o Global.pretrained_model={path/to/weights}/best_accuracy
預測
- 訓練引擎的預測
使用 PaddleOCR 訓練好的模型,可以通過以下腳本進行快速預測。
預設預測圖檔存儲在
infer_img
裡,通過
-o Global.pretrained_model
指定權重:
# 預測英文結果
python3 tools/infer_rec.py -c configs/rec/rec_icdar15_train.yml -o Global.pretrained_model={path/to/weights}/best_accuracy Global.load_static_weights=false Global.infer_img=doc/imgs_words/en/word_1.png
預測使用的配置檔案必須與訓練一緻,如您通過
python3 tools/train.py -c configs/rec/ch_ppocr_v2.0/rec_chinese_lite_train_v2.0.yml
完成了中文模型的訓練, 您可以使用如下指令進行中文模型預測。
# 預測中文結果
python3 tools/infer_rec.py -c configs/rec/ch_ppocr_v2.0/rec_chinese_lite_train_v2.0.yml -o Global.pretrained_model={path/to/weights}/best_accuracy Global.load_static_weights=false Global.infer_img=doc/imgs_words/ch/word_1.jpg
文本角度分類
訓練
啟動訓練
将準備好的txt檔案和圖檔檔案夾路徑分别寫入配置檔案的
Train/Eval.dataset.label_file_list
和
Train/Eval.dataset.data_dir
字段下,
Train/Eval.dataset.data_dir
字段下的路徑和檔案裡記載的圖檔名構成了圖檔的絕對路徑。
PaddleOCR提供了訓練腳本、評估腳本和預測腳本。
開始訓練:
如果您安裝的是cpu版本,請将配置檔案中的
use_gpu
字段修改為false
# GPU訓練 支援單卡,多卡訓練,通過 \'--gpus\' 指定卡号。
# 啟動訓練,下面的指令已經寫入train.sh檔案中,隻需修改檔案裡的配置檔案路徑即可
python3 -m paddle.distributed.launch --gpus \'0,1,2,3,4,5,6,7\' tools/train.py -c configs/cls/cls_mv3.yml
資料增強
PaddleOCR提供了多種資料增強方式,如果您希望在訓練時加入擾動,請在配置檔案中取消
Train.dataset.transforms
下的
RecAug
和
RandAugment
字段的注釋。
預設的擾動方式有:顔色空間轉換(cvtColor)、模糊(blur)、抖動(jitter)、噪聲(Gasuss noise)、随機切割(random crop)、透視(perspective)、顔色反轉(reverse),随機資料增強(RandAugment)。
訓練過程中除随機資料增強外每種擾動方式以50%的機率被選擇,具體代碼實作請參考: rec_img_aug.py randaugment.py
由于OpenCV的相容性問題,擾動操作暫時隻支援linux
訓練
PaddleOCR支援訓練和評估交替進行, 可以在
configs/cls/cls_mv3.yml
中修改
eval_batch_step
設定評估頻率,預設每1000個iter評估一次。訓練過程中将會儲存如下内容:
├── best_accuracy.pdopt # 最佳模型的優化器參數
├── best_accuracy.pdparams # 最佳模型的參數
├── best_accuracy.states # 最佳模型的名額和epoch等資訊
├── config.yml # 本次實驗的配置檔案
├── latest.pdopt # 最新模型的優化器參數
├── latest.pdparams # 最新模型的參數
├── latest.states # 最新模型的名額和epoch等資訊
└── train.log # 訓練日志
如果驗證集很大,測試将會比較耗時,建議減少評估次數,或訓練完再進行評估。
注意,預測/評估時的配置檔案請務必與訓練一緻
評估
評估資料集可以通過修改
configs/cls/cls_mv3.yml
檔案裡的
Eval.dataset.label_file_list
字段設定。
export CUDA_VISIBLE_DEVICES=0
# GPU 評估, Global.checkpoints 為待測權重
python3 tools/eval.py -c configs/cls/cls_mv3.yml -o Global.checkpoints={path/to/weights}/best_accuracy
預測
- 訓練引擎的預測
使用 PaddleOCR 訓練好的模型,可以通過以下腳本進行快速預測。
通過
Global.infer_img
指定預測圖檔或檔案夾路徑,通過
Global.checkpoints
指定權重:
# 預測分類結果
python3 tools/infer_cls.py -c configs/cls/cls_mv3.yml -o Global.pretrained_model={path/to/weights}/best_accuracy Global.load_static_weights=false Global.infer_img=doc/imgs_words/ch/word_1.jpg
配置檔案說明
Global
字段 | 用途 | 預設值 | 備注 |
---|---|---|---|
use_gpu | 設定代碼是否在gpu運作 | true | \ |
epoch_num | 最大訓練epoch數 | 500 | \ |
log_smooth_window | log隊列長度,每次列印輸出隊列裡的中間值 | 20 | \ |
print_batch_step | 設定列印log間隔 | 10 | \ |
save_model_dir | 設定模型儲存路徑 | output/{算法名稱} | \ |
save_epoch_step | 設定模型儲存間隔 | 3 | \ |
eval_batch_step | 設定模型評估間隔 | 2000 或 [1000, 2000] | 2000 表示每2000次疊代評估一次,[1000, 2000]表示從1000次疊代開始,每2000次評估一次 |
cal_metric_during_train | 設定是否在訓練過程中評估名額,此時評估的是模型在目前batch下的名額 | true | \ |
load_static_weights | 設定預訓練模型是否是靜态圖模式儲存(目前僅檢測算法需要) | true | \ |
pretrained_model | 設定加載預訓練模型路徑 | ./pretrain_models/CRNN/best_accuracy | \ |
checkpoints | 加載模型參數路徑 | None | 用于中斷後加載參數繼續訓練 |
use_visualdl | 設定是否啟用visualdl進行可視化log展示 | False | 教程位址 |
infer_img | 設定預測圖像路徑或檔案夾路徑 | ./infer_img | | |
character_dict_path | 設定字典路徑 | ./ppocr/utils/ppocr_keys_v1.txt | \ |
max_text_length | 設定文本最大長度 | 25 | \ |
character_type | 設定字元類型 | ch | en/ch, en時将使用預設dict,ch時使用自定義dict |
use_space_char | 設定是否識别空格 | True | 僅在 character_type=ch 時支援空格 |
label_list | 設定方向分類器支援的角度 | [\'0\',\'180\'] | 僅在方向分類器中生效 |
save_res_path | 設定檢測模型的結果儲存位址 | ./output/det_db/predicts_db.txt | 僅在檢測模型中生效 |
Optimizer (ppocr/optimizer)
字段 | 用途 | 預設值 | 備注 |
---|---|---|---|
name | 優化器類名 | Adam | 目前支援 , , , 見ppocr/optimizer/optimizer.py |
beta1 | 設定一階矩估計的指數衰減率 | 0.9 | \ |
beta2 | 設定二階矩估計的指數衰減率 | 0.999 | \ |
clip_norm | 所允許的二範數最大值 | \ | |
lr | 設定學習率decay方式 | - | \ |
name | 學習率decay類名 | Cosine | 目前支援 , , , , 見ppocr/optimizer/learning_rate.py |
learning_rate | 基礎學習率 | 0.001 | \ |
regularizer | 設定網絡正則化方式 | - | \ |
name | 正則化類名 | L2 | 目前支援 , , 見ppocr/optimizer/regularizer.py |
factor | 學習率衰減系數 | 0.00004 | \ |
Architecture (ppocr/modeling)
在ppocr中,網絡被劃分為Transform,Backbone,Neck和Head四個階段
字段 | 用途 | 預設值 | 備注 |
---|---|---|---|
model_type | 網絡類型 | rec | 目前支援 , , |
algorithm | 模型名稱 | CRNN | 支援清單見algorithm_overview |
Transform | 設定變換方式 | - | 目前僅rec類型的算法支援, 具體見ppocr/modeling/transform |
name | 變換方式類名 | TPS | 目前支援 |
num_fiducial | TPS控制點數 | 20 | 上下邊各十個 |
loc_lr | 定位網絡學習率 | 0.1 | \ |
model_name | 定位網絡大小 | small | 目前支援 , |
Backbone | 設定網絡backbone類名 | - | 具體見ppocr/modeling/backbones |
name | backbone類名 | ResNet | 目前支援 , |
layers | resnet層數 | 34 | 支援18,34,50,101,152,200 |
model_name | MobileNetV3 網絡大小 | small | 支援 , |
Neck | 設定網絡neck | - | 具體見ppocr/modeling/necks |
name | neck類名 | SequenceEncoder | 目前支援 , |
encoder_type | SequenceEncoder編碼器類型 | rnn | 支援 , , |
hidden_size | rnn内部單元數 | 48 | \ |
out_channels | DBFPN輸出通道數 | 256 | \ |
Head | 設定網絡Head | - | 具體見ppocr/modeling/heads |
name | head類名 | CTCHead | 目前支援 , , |
fc_decay | CTCHead正則化系數 | 0.0004 | \ |
k | DBHead二值化系數 | 50 | \ |
class_dim | ClsHead輸出分類數 | 2 | \ |
Loss (ppocr/losses)
字段 | 用途 | 預設值 | 備注 |
---|---|---|---|
name | 網絡loss類名 | CTCLoss | 目前支援 , , |
balance_loss | DBLossloss中是否對正負樣本數量進行均衡(使用OHEM) | True | \ |
ohem_ratio | DBLossloss中的OHEM的負正樣本比例 | 3 | \ |
main_loss_type | DBLossloss中shrink_map所采用的的loss | DiceLoss | 支援 , |
alpha | DBLossloss中shrink_map_loss的系數 | 5 | \ |
beta | DBLossloss中threshold_map_loss的系數 | 10 | \ |
PostProcess (ppocr/postprocess)
字段 | 用途 | 預設值 | 備注 |
---|---|---|---|
name | 後處理類名 | CTCLabelDecode | 目前支援 , , , |
thresh | DBPostProcess中分割圖進行二值化的門檻值 | 0.3 | \ |
box_thresh | DBPostProcess中對輸出框進行過濾的門檻值,低于此門檻值的框不會輸出 | 0.7 | \ |
max_candidates | DBPostProcess中輸出的最大文本框數量 | 1000 | |
unclip_ratio | DBPostProcess中對文本框進行放大的比例 | 2.0 | \ |
Metric (ppocr/metrics)
字段 | 用途 | 預設值 | 備注 |
---|---|---|---|
name | 名額評估方法名稱 | CTCLabelDecode | 目前支援 , , |
main_indicator | 主要名額,用于選取最優模型 | acc | 對于檢測方法為hmean,識别和分類方法為acc |
Dataset (ppocr/data)
字段 | 用途 | 預設值 | 備注 |
---|---|---|---|
dataset | 每次疊代傳回一個樣本 | - | - |
name | dataset類名 | SimpleDataSet | 目前支援 和 |
data_dir | 資料集圖檔存放路徑 | ./train_data | \ |
label_file_list | 資料标簽路徑 | ["./train_data/train_list.txt"] | dataset為LMDBDateSet時不需要此參數 |
ratio_list | 資料集的比例 | [1.0] | 若label_file_list中有兩個train_list,且ratio_list為[0.4,0.6],則從train_list1中采樣40%,從train_list2中采樣60%組合整個dataset |
transforms | 對圖檔和标簽進行變換的方法清單 | [DecodeImage,CTCLabelEncode,RecResizeImg,KeepKeys] | 見ppocr/data/imaug |
loader | dataloader相關 | - | |
shuffle | 每個epoch是否将資料集順序打亂 | True | \ |
batch_size_per_card | 訓練時單卡batch size | 256 | \ |
drop_last | 是否丢棄因資料集樣本數不能被 batch_size 整除而産生的最後一個不完整的mini-batch | True | \ |
num_workers | 用于加載資料的子程序個數,若為0即為不開啟子程序,在主程序中進行資料加載 | 8 |
錯誤解決方案
當文本識别使用ResNet50時,會出現 DataLoader reader thread raised an exception!
DataLoader reader thread raised an exception!
将配置檔案的
train loader batch_size_per_card
改為8即可
本人部落格 https://xiaoxiablogs.top