天天看點

PaddleOCR詳解

@

目錄

  • 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

    unclip_ratio

    是DB後處理所需要的參數,在評估EAST模型時不需要設定

測試檢測效果

測試單張圖像的檢測效果

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 目前支援

Momentum

,

Adam

,

RMSProp

, 見ppocr/optimizer/optimizer.py
beta1 設定一階矩估計的指數衰減率 0.9 \
beta2 設定二階矩估計的指數衰減率 0.999 \
clip_norm 所允許的二範數最大值 \
lr 設定學習率decay方式 - \
name 學習率decay類名 Cosine 目前支援

Linear

,

Cosine

,

Step

,

Piecewise

, 見ppocr/optimizer/learning_rate.py
learning_rate 基礎學習率 0.001 \
regularizer 設定網絡正則化方式 - \
name 正則化類名 L2 目前支援

L1

,

L2

, 見ppocr/optimizer/regularizer.py
factor 學習率衰減系數 0.00004 \

Architecture (ppocr/modeling)

在ppocr中,網絡被劃分為Transform,Backbone,Neck和Head四個階段

字段 用途 預設值 備注
model_type 網絡類型 rec 目前支援

rec

,

det

,

cls

algorithm 模型名稱 CRNN 支援清單見algorithm_overview
Transform 設定變換方式 - 目前僅rec類型的算法支援, 具體見ppocr/modeling/transform
name 變換方式類名 TPS 目前支援

TPS

num_fiducial TPS控制點數 20 上下邊各十個
loc_lr 定位網絡學習率 0.1 \
model_name 定位網絡大小 small 目前支援

small

,

large

Backbone 設定網絡backbone類名 - 具體見ppocr/modeling/backbones
name backbone類名 ResNet 目前支援

MobileNetV3

,

ResNet

layers resnet層數 34 支援18,34,50,101,152,200
model_name MobileNetV3 網絡大小 small 支援

small

,

large

Neck 設定網絡neck - 具體見ppocr/modeling/necks
name neck類名 SequenceEncoder 目前支援

SequenceEncoder

,

DBFPN

encoder_type SequenceEncoder編碼器類型 rnn 支援

reshape

,

fc

,

rnn

hidden_size rnn内部單元數 48 \
out_channels DBFPN輸出通道數 256 \
Head 設定網絡Head - 具體見ppocr/modeling/heads
name head類名 CTCHead 目前支援

CTCHead

,

DBHead

,

ClsHead

fc_decay CTCHead正則化系數 0.0004 \
k DBHead二值化系數 50 \
class_dim ClsHead輸出分類數 2 \

Loss (ppocr/losses)

字段 用途 預設值 備注
name 網絡loss類名 CTCLoss 目前支援

CTCLoss

,

DBLoss

,

ClsLoss

balance_loss DBLossloss中是否對正負樣本數量進行均衡(使用OHEM) True \
ohem_ratio DBLossloss中的OHEM的負正樣本比例 3 \
main_loss_type DBLossloss中shrink_map所采用的的loss DiceLoss 支援

DiceLoss

,

BCELoss

alpha DBLossloss中shrink_map_loss的系數 5 \
beta DBLossloss中threshold_map_loss的系數 10 \

PostProcess (ppocr/postprocess)

字段 用途 預設值 備注
name 後處理類名 CTCLabelDecode 目前支援

CTCLoss

,

AttnLabelDecode

,

DBPostProcess

,

ClsPostProcess

thresh DBPostProcess中分割圖進行二值化的門檻值 0.3 \
box_thresh DBPostProcess中對輸出框進行過濾的門檻值,低于此門檻值的框不會輸出 0.7 \
max_candidates DBPostProcess中輸出的最大文本框數量 1000
unclip_ratio DBPostProcess中對文本框進行放大的比例 2.0 \

Metric (ppocr/metrics)

字段 用途 預設值 備注
name 名額評估方法名稱 CTCLabelDecode 目前支援

DetMetric

,

RecMetric

,

ClsMetric

main_indicator 主要名額,用于選取最優模型 acc 對于檢測方法為hmean,識别和分類方法為acc

Dataset (ppocr/data)

字段 用途 預設值 備注
dataset 每次疊代傳回一個樣本 - -
name dataset類名 SimpleDataSet 目前支援

SimpleDataSet

LMDBDateSet

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!

将配置檔案的

train loader batch_size_per_card

改為8即可

本人部落格 https://xiaoxiablogs.top