天天看點

PaddleOCR使用筆記之模型訓練簡介模型訓練步驟四:三模型聯合推理五、放在最後:推理模型清單(V2.0,2021年1月20日更新)

目錄

  • 簡介
  • 模型訓練
    • 步驟一:文本檢測模型(`detection`)
      • 1.準備訓練資料集
      • 2.下載下傳預訓練模型
        • 模型介紹
        • 下載下傳預訓練模型
      • 3. 開始訓練
        • 斷點訓練
      • 4.模型評估
      • 5.模型測試
      • 6.訓練模型轉inference模型
    • 步驟二:文本識别模型(`recognition`)
      • 1.準備訓練資料集
        • 資料下載下傳
        • 資料集劃分
      • 2.下載下傳預訓練模型
        • 模型介紹
        • 下載下傳預訓練模型
      • 3.開始訓練
      • 4.評估
      • 5.測試
      • 6.訓練模型轉inference模型
    • 步驟三:文本角度分類模型
      • 1.準備訓練資料集
        • 資料集劃分
      • 2.開始訓練
        • 資料增強
        • 訓練
      • 3.評估
      • 4.預測
      • 5.訓練模型轉inference模型
  • 步驟四:三模型聯合推理
  • 五、放在最後:推理模型清單(V2.0,2021年1月20日更新)
    • 一、文本檢測模型
    • 二、文本識别模型
      • 1. 中文識别模型
      • 2. 英文識别模型
      • 3. 多語言識别模型(更多語言持續更新中...)
        • 1. 生成意大利語配置檔案測試現有模型
        • 2. 生成意大利語配置檔案訓練自己的資料
    • 三、文本方向分類模型

簡介

PaddleOCR

算法主要包含三個部分,分别是:

  • DB文本檢測(

    detection

    )
  • 檢測框矯正(

    classification

    )
  • CRNN文本識别(

    recognition

    )

在訓練時,這三個模型單獨進行訓練,得到三個模型的訓練權重,在推理預測時會把三個模型整合在一起,即

PaddleOCR

推理模型的最終結果是由上述三個模型串聯推理而得,推理步驟大緻如下:

  • 第一步,進行文本檢測,得到文本位置的檢測框;
  • 第二步,根據得到的文本檢測框對其進行角度分類;
  • 第三步,進行文本識别。

模型訓練

步驟一:文本檢測模型(

detection

)

以文本檢測模型(

detection

)為例,進行訓練

1.準備訓練資料集

icdar2015

資料集可以從官網下載下傳到,首次下載下傳需注冊。

将下載下傳到的資料集解壓到工作目錄下,假設解壓在

PaddleOCR/train_data/

下。另外,

PaddleOCR

将零散的标注檔案整理成單獨的标注檔案,您可以通過

wget

的方式進行下載下傳。

# 在PaddleOCR路徑下
cd PaddleOCR/
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

表示目前文本框的文字,當其内容為“###”時,表示該文本框無效,在訓練時會跳過。

如果您想在其他資料集上訓練,可以按照上述形式建構标注檔案。

2.下載下傳預訓練模型

模型介紹

PaddleOCR

開源的文本檢測算法清單:

  • DB(paper) [2](ppocr推薦)
  • EAST(paper)[1]
  • SAST(paper)[4]

ICDAR2015

文本檢測公開資料集上,算法效果如下:

模型 骨幹網絡 precision recall Hmean 下載下傳連結
EAST ResNet50_vd 85.80% 86.71% 86.25% 下載下傳連結
EAST MobileNetV3 79.42% 80.64% 80.03% 下載下傳連結
DB ResNet50_vd 86.41% 78.72% 82.38% 下載下傳連結
DB MobileNetV3 77.29% 73.08% 75.12% 下載下傳連結
SAST ResNet50_vd 91.39% 83.77% 87.42% 下載下傳連結

Total-text

文本檢測公開資料集上,算法效果如下:

模型 骨幹網絡 precision recall Hmean 下載下傳連結
SAST ResNet50_vd 89.63% 78.44% 83.66% 下載下傳連結

說明:

SAST

模型訓練額外加入了

icdar2013

icdar2017

COCO-Text

ArT

等公開資料集進行調優。

PaddleOCR

用到的經過整理格式的英文公開資料集下載下傳:百度雲位址 (提取碼: 2bpi)

下載下傳預訓練模型

PaddleOCR

的檢測模型目前支援兩種骨幹網絡,分别是

MobileNetV3

ResNet_vd

系列,您可以根據需求使用PaddleClas中的模型更換骨幹網絡。

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
  └─ ......
           

3. 開始訓練

如果您安裝的是cpu版本,請将配置檔案中的

use_gpu

字段修改為

false

# 單機單卡訓練 mv3_db 模型
python tools/train.py -c configs/det/det_mv3_db.yml -o Global.pretrain_weights=./pretrain_models/MobileNetV3_large_x0_5_pretrained/
# 單機多卡訓練,通過 --gpus 參數設定使用的GPU ID;如果使用的paddle版本小于2.0rc1,請使用'--select_gpus'參數選擇要使用的GPU
python -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/
           

上述指令中,通過

-c

選擇訓練使用

configs/det/det_db_mv3.yml

配置檔案。

有關配置檔案的詳細解釋,請參考連結。

您也可以通過

-o

參數在不需要修改

yml

檔案的情況下,改變訓練的參數,比如,調整訓練的學習率為

0.0001

斷點訓練

如果訓練程式中斷,如果希望加載訓練中斷的模型進而恢複訓練,可以通過指定

Global.checkpoints

指定要加載的模型路徑:

python 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

指定的模型。

4.模型評估

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.checkpoints

指向儲存的參數檔案。

注:

box_thresh

unclip_ratio

DB

後處理所需要的參數,在評估

EAST

模型時不需要設定

5.模型測試

測試單張圖像的檢測效果

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" 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/" Global.pretrained_model="./output/det_db/best_accuracy" Global.load_static_weights=false
           

6.訓練模型轉inference模型

截止到目前,我們得到了文本檢測的訓練模型,并對其進行了測試,但這并不是最終的推理模型,需要進行轉換,以

MobileNetV3

backbone

訓練的

DB

算法為例,将訓練好的模型轉換成

inference

模型隻需要運作如下指令:

# -c 後面設定訓練算法的yml配置檔案
# -o 配置可選參數
# Global.pretrained_model 參數設定待轉換的訓練模型位址,不用添加檔案字尾 .pdmodel,.pdopt或.pdparams。
# Global.load_static_weights 參數需要設定為 False。
# Global.save_inference_dir參數設定轉換的模型将儲存的位址。

python3 tools/export_model.py -c configs/det/ch_ppocr_v2.0/ch_det_mv3_db_v2.0.yml -o Global.pretrained_model=./ch_lite/ch_ppocr_mobile_v2.0_det_train/best_accuracy Global.load_static_weights=False Global.save_inference_dir=./inference/det_db/
           

步驟二:文本識别模型(

recognition

)

1.準備訓練資料集

PaddleOCR

支援兩種資料格式:

  • lmdb

    用于訓練公開資料,調試算法;
  • 通用資料

    訓練自己的資料:

資料下載下傳

訓練資料的預設存儲路徑是

PaddleOCR/train_data

,如果您的磁盤上已有資料集,

Windows

系統需要将資料集拷貝至對應位置,

Linux

隻需建立軟連結至資料集目錄:

ln -sf <path/to/dataset> <path/to/paddle_ocr>/train_data/dataset
           

若您本地沒有資料集,可以在官網下載下傳 icdar2015 資料,用于快速驗證。也可以參考DTRB,下載下傳

benchmark

所需的

lmdb

格式資料集。

資料集劃分

若您希望使用自己的資料進行訓練,請參考下文組織您的資料。

  • 訓練集

首先請将訓練圖檔放入同一個檔案夾(

train_images

),并用一個

txt

檔案(

rec_gt_train.txt

)記錄圖檔路徑和标簽。

注意: 預設請将圖檔路徑和圖檔标簽用

\t

分割,如用其他方式分割将造成訓練報錯

" 圖像檔案名                 圖像标注資訊 "
train_data/train_0001.jpg   簡單可依賴
train_data/train_0002.jpg   用科技讓複雜的世界更簡單
           

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"
           

最終訓練集應有如下檔案結構:

|-train_data
    |-ic15_data
        |- rec_gt_train.txt
        |- train
            |- word_001.png
            |- word_002.jpg
            |- word_003.jpg
            | ...
           
  • 測試集

同訓練集類似,測試集也需要提供一個包含所有圖檔的檔案夾(

test

)和一個

rec_gt_test.txt

,測試集的結構如下所示:

|-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

階段,會持續優化模型并補充語種,非常歡迎您為我們提供其他語言的字典和字型,如您願意可将字典檔案送出至 dict 将語料檔案送出至corpus,我們會在Repo中感謝您。

  • 自定義字典

如需自定義dic檔案,請在

configs/rec/rec_icdar15_train.yml

中添加

character_dict_path

字段, 指向您的字典路徑。

并将

character_type

設定為

ch

  • 添加空格類别

如果希望支援識别"空格"類别, 請将

yml

檔案中的

use_space_char

字段設定為

True

2.下載下傳預訓練模型

模型介紹

PaddleOCR

基于動态圖開源的文本識别算法清單:

  • CRNN(paper)[7](ppocr推薦)
  • Rosetta(paper)[10]
  • STAR-Net(paper)[11]
  • RARE(paper)[12] coming soon
  • SRN(paper)[5] coming soon

參考[DTRB]3文字識别訓練和評估流程,使用

MJSynth

SynthText

兩個文字識别資料集訓練,在

IIIT

,

SVT

,

IC03

,

IC13

,

IC15

,

SVTP

,

CUTE

資料集上進行評估,算法效果如下:

模型 骨幹網絡 Avg Accuracy 模型存儲命名 下載下傳連結
Rosetta Resnet34_vd 80.9% rec_r34_vd_none_none_ctc 下載下傳連結
Rosetta MobileNetV3 78.05% rec_mv3_none_none_ctc 下載下傳連結
CRNN Resnet34_vd 82.76% rec_r34_vd_none_bilstm_ctc 下載下傳連結
CRNN MobileNetV3 79.97% rec_mv3_none_bilstm_ctc 下載下傳連結
StarNet Resnet34_vd 84.44% rec_r34_vd_tps_bilstm_ctc 下載下傳連結
StarNet MobileNetV3 81.42% rec_mv3_tps_bilstm_ctc 下載下傳連結

下載下傳預訓練模型

PaddleOCR

提供了訓練腳本、評估腳本和預測腳本,本節将以

CRNN

識别模型為例:

首先下載下傳預訓練模型,您可以下載下傳訓練好的模型在

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
           

3.開始訓練

如果您安裝的是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

如果驗證集很大,測試将會比較耗時,建議減少評估次數,或訓練完再進行評估。

提示: 可通過

-c

參數選擇

configs/rec/

路徑下的多種模型配置進行訓練,

PaddleOCR

支援的識别算法有:

配置檔案 算法名稱 backbone trans seq pred

rec_chinese_lite_train_v2.0.yml

CRNN Mobilenet_v3 small 0.5 None BiLSTM ctc

rec_chinese_common_train_v2.0.yml

CRNN ResNet34_vd None BiLSTM ctc

rec_icdar15_train.yml

CRNN Mobilenet_v3 large 0.5 None BiLSTM ctc

rec_mv3_none_bilstm_ctc.yml

CRNN Mobilenet_v3 large 0.5 None BiLSTM ctc

rec_mv3_none_none_ctc.yml

Rosetta Mobilenet_v3 large 0.5 None None ctc

rec_r34_vd_none_bilstm_ctc.yml

CRNN Resnet34_vd None BiLSTM ctc

rec_r34_vd_none_none_ctc.yml

Rosetta Resnet34_vd None None ctc

訓練中文資料,推薦使用

rec_chinese_lite_train_v2.0.yml

,如您希望嘗試其他算法在中文資料集上的效果,請參考下列說明修改配置檔案:

rec_chinese_lite_train_v2.0.yml

為例:

Global:
  ...
  # 添加自定義字典,如修改字典請将路徑指向新字典
  character_dict_path: ppocr/utils/ppocr_keys_v1.txt
  # 修改字元類型
  character_type: ch
  ...
  # 識别空格
  use_space_char: True


Optimizer:
  ...
  # 添加學習率衰減政策
  lr:
    name: Cosine
    learning_rate: 0.001
  ...

...

Train:
  dataset:
    # 資料集格式,支援LMDBDateSet以及SimpleDataSet
    name: SimpleDataSet
    # 資料集路徑
    data_dir: ./train_data/
    # 訓練集标簽檔案
    label_file_list: ["./train_data/train_list.txt"]
    transforms:
      ...
      - RecResizeImg:
          # 修改 image_shape 以适應長文本
          image_shape: [3, 32, 320]
      ...
  loader:
    ...
    # 單卡訓練的batch_size
    batch_size_per_card: 256
    ...

Eval:
  dataset:
    # 資料集格式,支援LMDBDateSet以及SimpleDataSet
    name: SimpleDataSet
    # 資料集路徑
    data_dir: ./train_data
    # 驗證集标簽檔案
    label_file_list: ["./train_data/val_list.txt"]
    transforms:
      ...
      - RecResizeImg:
          # 修改 image_shape 以适應長文本
          image_shape: [3, 32, 320]
      ...
  loader:
    # 單卡驗證的batch_size
    batch_size_per_card: 256
    ...
           

注意,預測/評估時的配置檔案請務必與訓練一緻。

4.評估

評估資料集可以通過

configs/rec/rec_icdar15_train.yml

修改

Eval

中的

label_file_path

設定。

# GPU 評估, Global.checkpoints 為待測權重
python -m paddle.distributed.launch --gpus '0' tools/eval.py -c configs/rec/rec_icdar15_train.yml -o Global.checkpoints={path/to/weights}/best_accuracy
           

5.測試

使用

PaddleOCR

訓練好的模型,可以通過以下腳本進行快速預測。

預設預測圖檔存儲在

infer_img

裡,通過

-o Global.checkpoints

指定權重:

# 預測英文結果
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
           

6.訓練模型轉inference模型

識别模型轉

inference

模型與檢測的方式相同,如下:

# -c 後面設定訓練算法的yml配置檔案
# -o 配置可選參數
# Global.pretrained_model 參數設定待轉換的訓練模型位址,不用添加檔案字尾 .pdmodel,.pdopt或.pdparams。
# Global.load_static_weights 參數需要設定為 False。
# Global.save_inference_dir參數設定轉換的模型将儲存的位址。

python3 tools/export_model.py -c configs/rec/ch_ppocr_v2.0/rec_chinese_lite_train_v2.0.yml -o Global.pretrained_model=./ch_lite/ch_ppocr_mobile_v2.0_rec_train/best_accuracy Global.load_static_weights=False Global.save_inference_dir=./inference/rec_crnn/
           

注意:如果您是在自己的資料集上訓練的模型,并且調整了中文字元的字典檔案,請注意修改配置檔案中的

character_dict_path

是否是所需要的字典檔案。

轉換成功後,在目錄下有三個檔案:

/inference/rec_crnn/
    ├── inference.pdiparams         # 識别inference模型的參數檔案
    ├── inference.pdiparams.info    # 識别inference模型的參數資訊,可忽略
    └── inference.pdmodel           # 識别inference模型的program檔案
           

步驟三:文本角度分類模型

1.準備訓練資料集

請按如下步驟設定資料集:

訓練資料的預設存儲路徑是

PaddleOCR/train_data/cls

,如果您的磁盤上已有資料集,

Windows

系統需要将資料集拷貝至對應位置,

Linux

隻需建立軟連結至資料集目錄:

ln -sf <path/to/dataset> <path/to/paddle_ocr>/train_data/cls/dataset
           

資料集劃分

  • 訓練集

首先請将訓練圖檔放入同一個檔案夾(

train_images

),并用一個

txt

檔案(

cls_gt_train.txt

)記錄圖檔路徑和标簽。

注意: 預設請将圖檔路徑和圖檔标簽用

\t

分割,如用其他方式分割将造成訓練報錯

180

分别表示圖檔的角度為

度和

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
            | ...
           
  • 測試集

同訓練集類似,測試集也需要提供一個包含所有圖檔的檔案夾(

train

)和一個

cls_gt_test.txt

,測試集的結構如下所示:

|-train_data
    |-cls
        |- cls_gt_test.txt
        |- test
            |- word_001.jpg
            |- word_002.jpg
            |- word_003.jpg
            | ...
           

2.開始訓練

将準備好的

txt

檔案和圖檔檔案夾路徑分别寫入配置檔案的

Train/Eval.dataset.label_file_list

Train/Eval.dataset.data_dir

字段下,

Train/Eval.dataset.data_dir

字段下的路徑和檔案裡記載的圖檔名構成了圖檔的絕對路徑。

如果您安裝的是cpu版本,請将配置檔案中的

use_gpu

字段修改為false

# GPU訓練 支援單卡,多卡訓練,通過 '--gpus' 指定卡号,如果使用的paddle版本小于2.0rc1,請使用'--select_gpus'參數選擇要使用的GPU
# 啟動訓練,下面的指令已經寫入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 # 訓練日志
           

如果驗證集很大,測試将會比較耗時,建議減少評估次數,或訓練完再進行評估。

注意,預測/評估時的配置檔案請務必與訓練一緻。

3.評估

評估資料集可以通過修改

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
           

4.預測

使用 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
           

5.訓練模型轉inference模型

方向分類模型轉inference模型與檢測的方式相同,如下:

# -c 後面設定訓練算法的yml配置檔案
# -o 配置可選參數
# Global.pretrained_model 參數設定待轉換的訓練模型位址,不用添加檔案字尾 .pdmodel,.pdopt或.pdparams。
# Global.load_static_weights 參數需要設定為 False。
# Global.save_inference_dir參數設定轉換的模型将儲存的位址。

python3 tools/export_model.py -c configs/cls/cls_mv3.yml -o Global.pretrained_model=./ch_lite/ch_ppocr_mobile_v2.0_cls_train/best_accuracy Global.load_static_weights=False Global.save_inference_dir=./inference/cls/
           

轉換成功後,在目錄下有三個檔案:

/inference/cls/
    ├── inference.pdiparams         # 分類inference模型的參數檔案
    ├── inference.pdiparams.info    # 分類inference模型的參數資訊,可忽略
    └── inference.pdmodel           # 分類inference模型的program檔案
           

步驟四:三模型聯合推理

以下代碼實作了文本檢測、方向分類器和文本識别串聯推理,在執行預測時,需要通過參數image_dir指定單張圖像或者圖像集合的路徑、參數

det_model_dir

指定檢測inference模型的路徑、參數

rec_model_dir

指定識别inference模型的路徑、參數

use_angle_cls

指定是否使用方向分類器、參數

cls_model_dir

指定方向分類器inference模型的路徑、參數

use_space_char

指定是否預測空格字元。可視化識别結果預設儲存到

./inference_results

檔案夾裡面。

# 預測image_dir指定的單張圖像
python tools/infer/predict_system.py --image_dir="./inference_img/11.jpg" --det_model_dir="./inference/ch_ppocr_mobile_v2.0_det_infer"  --rec_model_dir="./inference/ch_ppocr_mobile_v2.0_rec_infer" --cls_model_dir="./inference/ch_ppocr_mobile_v2.0_cls_infer" --use_angle_cls=True --use_space_char=True

# 預測image_dir指定的圖像集合
python tools/infer/predict_system.py --image_dir="./doc/imgs/" --det_model_dir="./inference/ch_ppocr_mobile_v2.0_det_infer/"  --rec_model_dir="./inference/ch_ppocr_mobile_v2.0_rec_infer/" --cls_model_dir="./inference/ch_ppocr_mobile_v2.0_cls_infer/" --use_angle_cls=True --use_space_char=True

# 如果想使用CPU進行預測,需設定use_gpu參數為False
python tools/infer/predict_system.py --image_dir="./doc/imgs/11.jpg" --det_model_dir="./inference/ch_ppocr_mobile_v2.0_det_infer/"  --rec_model_dir="./inference/ch_ppocr_mobile_v2.0_rec_infer/" --cls_model_dir="./inference/ch_ppocr_mobile_v2.0_cls_infer/" --use_angle_cls=True --use_space_char=True --use_gpu=False
           

五、放在最後:推理模型清單(V2.0,2021年1月20日更新)

說明 :2.0版模型和1.1版模型的主要差別在于動态圖訓練vs.靜态圖訓練,模型性能上無明顯差距。

PaddleOCR提供的可下載下傳模型包括

推理模型

訓練模型

預訓練模型

slim模型

,模型差別說明如下:

模型類型 模型格式 簡介
推理模型 inference.pdmodel、inference.pdiparams 用于python預測引擎推理,詳情
訓練模型、預訓練模型 *.pdparams、*.pdopt、*.states 訓練過程中儲存的模型的參數、優化器狀态和訓練中間資訊,多用于模型名額評估和恢複訓練
slim模型 *.nb 用于lite部署

一、文本檢測模型

模型名稱 模型簡介 配置檔案 推理模型大小 下載下傳位址
ch_ppocr_mobile_slim_v2.0_det slim裁剪版超輕量模型,支援中英文、多語種文本檢測 ch_det_mv3_db_v2.0.yml 推理模型 (coming soon) / 訓練模型 (coming soon)
ch_ppocr_mobile_v2.0_det 原始超輕量模型,支援中英文、多語種文本檢測 ch_det_mv3_db_v2.0.yml 3M 推理模型 / 訓練模型
ch_ppocr_server_v2.0_det 通用模型,支援中英文、多語種文本檢測,比超輕量模型更大,但效果更好 ch_det_res18_db_v2.0.yml 47M 推理模型 / 訓練模型

二、文本識别模型

1. 中文識别模型

模型名稱 模型簡介 配置檔案 推理模型大小 下載下傳位址
ch_ppocr_mobile_slim_v2.0_rec slim裁剪量化版超輕量模型,支援中英文、數字識别 rec_chinese_lite_train_v2.0.yml 推理模型 / 訓練模型
ch_ppocr_mobile_v2.0_rec 原始超輕量模型,支援中英文、數字識别 rec_chinese_lite_train_v2.0.yml 3.71M 推理模型 / 訓練模型 / 預訓練模型
ch_ppocr_server_v2.0_rec 通用模型,支援中英文、數字識别 rec_chinese_common_train_v2.0.yml 94.8M 推理模型 / 訓練模型 / 預訓練模型

說明:

訓練模型

是基于預訓練模型在真實資料與豎排合成文本資料上finetune得到的模型,在真實應用場景中有着更好的表現,

預訓練模型

則是直接基于全量真實資料與合成資料訓練得到,更适合用于在自己的資料集上finetune。

2. 英文識别模型

模型名稱 模型簡介 配置檔案 推理模型大小 下載下傳位址
en_number_mobile_slim_v2.0_rec slim裁剪量化版超輕量模型,支援英文、數字識别 rec_en_number_lite_train.yml 推理模型 / 訓練模型
en_number_mobile_v2.0_rec 原始超輕量模型,支援英文、數字識别 rec_en_number_lite_train.yml 2.56M 推理模型 / 訓練模型

3. 多語言識别模型(更多語言持續更新中…)

說明: 新增的多語言模型的配置檔案通過代碼方式生成,您可以通過

--help

參數檢視目前PaddleOCR支援生成哪些多語言的配置檔案:

# 該代碼需要在指定目錄運作
cd {your/path/}PaddleOCR/configs/rec/multi_language/
python3 generate_multi_language_configs.py --help
           

下面以生成意大利語配置檔案為例:

1. 生成意大利語配置檔案測試現有模型

如果您僅僅想用配置檔案測試PaddleOCR提供的多語言模型可以通過下面指令生成預設的配置檔案,使用PaddleOCR提供的小語種字典進行預測。

# 該代碼需要在指定目錄運作
cd {your/path/}PaddleOCR/configs/rec/multi_language/
# 通過-l或者--language參數設定需要生成的語種的配置檔案,該指令會将預設參數寫入配置檔案
python3 generate_multi_language_configs.py -l it
           

2. 生成意大利語配置檔案訓練自己的資料

如果您想訓練自己的小語種模型,可以準備好訓練集檔案、驗證集檔案、字典檔案和訓練資料路徑,這裡假設準備的意大利語的訓練集、驗證集、字典和訓練資料路徑為:

  • 訓練集:{your/path/}PaddleOCR/train_data/train_list.txt
  • 驗證集:{your/path/}PaddleOCR/train_data/val_list.txt
  • 使用PaddleOCR提供的預設字典:{your/path/}PaddleOCR/ppocr/utils/dict/it_dict.txt
  • 訓練資料路徑:{your/path/}PaddleOCR/train_data

使用以下指令生成配置檔案:

# 該代碼需要在指定目錄運作
cd {your/path/}PaddleOCR/configs/rec/multi_language/
# -l或者--language字段是必須的
# --train修改訓練集,--val修改驗證集,--data_dir修改資料集目錄,-o修改對應預設參數
# --dict指令改變字典路徑,示例使用預設字典路徑則該參數可不填
python3 generate_multi_language_configs.py -l it \
--train train_data/train_list.txt \
--val train_data/val_list.txt \
--data_dir train_data \
-o Global.use_gpu=False
           
模型名稱 模型簡介 配置檔案 推理模型大小 下載下傳位址
french_mobile_v2.0_rec 法文識别 rec_french_lite_train.yml 2.65M 推理模型 / 訓練模型
german_mobile_v2.0_rec 德文識别 rec_german_lite_train.yml 2.65M 推理模型 / 訓練模型
korean_mobile_v2.0_rec 韓文識别 rec_korean_lite_train.yml 3.9M 推理模型 / 訓練模型
japan_mobile_v2.0_rec 日文識别 rec_japan_lite_train.yml 4.23M 推理模型 / 訓練模型
it_mobile_v2.0_rec 意大利文識别 rec_it_lite_train.yml 2.53M 推理模型 / 訓練模型
xi_mobile_v2.0_rec 西班牙文識别 rec_xi_lite_train.yml 2.53M 推理模型 / 訓練模型
pu_mobile_v2.0_rec 葡萄牙文識别 rec_pu_lite_train.yml 2.63M 推理模型 / 訓練模型
ru_mobile_v2.0_rec 俄羅斯文識别 rec_ru_lite_train.yml 2.63M 推理模型 / 訓練模型
ar_mobile_v2.0_rec 阿拉伯文識别 rec_ar_lite_train.yml 2.53M 推理模型 / 訓練模型
hi_mobile_v2.0_rec 印地文識别 rec_hi_lite_train.yml 2.63M 推理模型 / 訓練模型
chinese_cht_mobile_v2.0_rec 中文繁體識别 rec_chinese_cht_lite_train.yml 5.63M 推理模型 / 訓練模型
ug_mobile_v2.0_rec 維吾爾文識别 rec_ug_lite_train.yml 2.63M 推理模型 / 訓練模型
fa_mobile_v2.0_rec 波斯文識别 rec_fa_lite_train.yml 2.63M 推理模型 / 訓練模型
ur_mobile_v2.0_rec 烏爾都文識别 rec_ur_lite_train.yml 2.63M 推理模型 / 訓練模型
rs_mobile_v2.0_rec 塞爾維亞文(latin)識别 rec_rs_lite_train.yml 2.53M 推理模型 / 訓練模型
oc_mobile_v2.0_rec 歐西坦文識别 rec_oc_lite_train.yml 2.53M 推理模型 / 訓練模型
mr_mobile_v2.0_rec 馬拉地文識别 rec_mr_lite_train.yml 2.63M 推理模型 / 訓練模型
ne_mobile_v2.0_rec 尼泊爾文識别 rec_ne_lite_train.yml 2.63M 推理模型 / 訓練模型
rsc_mobile_v2.0_rec 塞爾維亞文(cyrillic)識别 rec_rsc_lite_train.yml 2.63M 推理模型 / 訓練模型
bg_mobile_v2.0_rec 保加利亞文識别 rec_bg_lite_train.yml 2.63M 推理模型 / 訓練模型
uk_mobile_v2.0_rec 烏克蘭文識别 rec_uk_lite_train.yml 2.63M 推理模型 / 訓練模型
be_mobile_v2.0_rec 白俄羅斯文識别 rec_be_lite_train.yml 2.63M 推理模型 / 訓練模型
te_mobile_v2.0_rec 泰盧固文識别 rec_te_lite_train.yml 2.63M 推理模型 / 訓練模型
ka_mobile_v2.0_rec 卡納達文識别 rec_ka_lite_train.yml 2.63M 推理模型 / 訓練模型
ta_mobile_v2.0_rec 泰米爾文識别 rec_ta_lite_train.yml 2.63M 推理模型 / 訓練模型

三、文本方向分類模型

模型名稱 模型簡介 配置檔案 推理模型大小 下載下傳位址
ch_ppocr_mobile_slim_v2.0_cls slim量化版模型 cls_mv3.yml 推理模型 / 訓練模型
ch_ppocr_mobile_v2.0_cls 原始模型 cls_mv3.yml 1.38M 推理模型 / 訓練模型

繼續閱讀