PaddleOCR詳解

@python

PaddleOCR簡介

PaddleOCR分爲文本檢測、文本識別和方向分類器三部分,其中文本檢測有三個模型,分別是MobileNetV三、ResNet18_vd和ResNet50,其中最常使用的是MobileNetV3模型,總體比較小,適合應用於手機端。文本識別只有一個MobileNetV3預訓練模型。方向分類器使用默認的模型。linux

環境配置

PaddleOCR2.0的配置環境

PaddleOCR2.0的配置環境爲:git

  • PaddlePaddle 2.0.0
  • Python 3.7
  • glibc 2.23
  • cuDNN 7.6+(GPU)

其中,PaddlePaddle可使用2.0.*github

Docker

若是使用docker運行,能夠直接使用 paddlepaddle/paddle:2.0.1-gpu-cuda11.0-cudnn8鏡像,根據我的使用習慣,能夠更換,可是paddlepaddle的版本和cudnn版本不能低於PaddleOCR2.0的配置環境。算法

數據集

其中,文本檢測和文本識別使用的都是icdar2015數據集,方向分類器的數據集需自備docker

icdar2015數據集能夠從官網下載,首次下載需註冊。shell

文本檢測

文本檢測的icdar2015數據集的標註文件下載:json

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文件中,文件目錄爲:dom

/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,分別是MobileNetV三、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.ymlsave_res_path指定的測試集檢測結果文件,計算評估指標。

評估時設置後處理參數box_thresh=0.5unclip_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_threshunclip_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_listTrain/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下的RecAugRandAugment字段的註釋。

默認的擾動方式有:顏色空間轉換(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 目前支持SimpleDataSetLMDBDateSet
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

相關文章
相關標籤/搜索