1. Регулярный сезон: распознавание текста на китайском языке
Адрес конкурса:Студия любви Baidu.com/love studio/co…
1. Введение в конкурс
Технология распознавания текста китайской сцены привлекла большое внимание в повседневной жизни людей и имеет множество сценариев применения, таких как перевод фотографий, поиск изображений, понимание сцены и т. д. Однако текст в сценах на китайском языке сталкивается со сложными ситуациями, включая изменение освещения, низкое разрешение, разнообразие шрифтов и компоновки, а также множество типов китайских иероглифов. Как решить вышеуказанные проблемы становится чрезвычайно сложной задачей.
Регулярный сезон распознавания текста китайской сцены был недавно обновлен, чтобы предоставлять облегченные данные распознавания текста китайской сцены.Игроки должны использовать рамку весла, чтобы предсказывать текстовые строки в области изображения и возвращать содержимое текстовых строк.
2. Описание набора данных
Набор данных для этого конкурса включает в себя в общей сложности 60 000 изображений, из которых 50 000 используются в качестве тренировочного набора, а 10 000 — в качестве тестового набора. Набор данных собирается из просмотра улиц в Китае и формируется путем извлечения областей текстовых строк (таких как вывески магазинов, ориентиры и т. д.) на изображениях просмотра улиц.
Введение конкретных данных
Все изображения в наборе данных прошли некоторую предварительную обработку, как показано на изображении ниже:
(a) Этикетка: Бильярдный клуб Джойс
(b) Этикетка: Shanghai Chuangke Pump Manufacturing Co., Ltd.
Файл аннотации
Файл аннотации, предоставляемый платформой, имеет формат файла .csv, а четыре столбца в файле — это ширина, высота, имя файла и текстовая аннотация изображения соответственно. Пример выглядит следующим образом:
name | value |
---|---|
0.jpg | текст 0 |
-------- | -------- |
1.jpg | текст 0 |
2. Параметры среды
PaddleOCR GitHub.com/paddle pad DL…Это самая мощная библиотека инструментов OCR во вселенной, она работает сразу и очень быстро.
# 从gitee上下载PaddleOCR代码,也可以从GitHub链接下载
!git clone https://gitee.com/paddlepaddle/PaddleOCR.git --depth=1
# 升级pip
!pip install -U pip
# 安装依赖
%cd ~/PaddleOCR
%pip install -r requirements.txt
%cd ~/PaddleOCR/
!tree -L 1
/home/aistudio/PaddleOCR
.
├── benchmark
├── configs
├── deploy
├── doc
├── __init__.py
├── LICENSE
├── MANIFEST.in
├── paddleocr.py
├── ppocr
├── PPOCRLabel
├── ppstructure
├── README_ch.md
├── README.md
├── requirements.txt
├── setup.py
├── StyleText
├── test_tipc
├── tools
└── train.sh
10 directories, 9 files
3. Подготовка данных
Сообщается, что набор данных поезда содержит в общей сложности 100 000 фрагментов, распакованных и разделенных на 10 000 фрагментов в качестве тестового набора.
1. Загрузка и распаковка данных
# 解压缩数据集
%cd ~
!unzip -qa data/data62842/train_images.zip -d data/data62842/
!unzip -qa data/data62843/test_images.zip -d data/data62843/
/home/aistudio
# 使用命令查看训练数据文件夹下数据量是否是5万张
!cd ~/data/data62842/train_images && ls -l | grep "^-" | wc -l
50000
# 使用命令查看test数据文件夹下数据量是否是1万张
!cd ~/data/data62843/test_images && ls -l | grep "^-" | wc -l
10000
2. Разделение набора данных
# 读取数据列表文件
import pandas as pd
%cd ~
data_label=pd.read_csv('data/data62842/train_label.csv', encoding='gb2312')
data_label.head()
/home/aistudio
name | value | |
---|---|---|
0 | 0.jpg | Лала |
1 | 1.jpg | № 6 |
2 | 2.jpg | толстый |
3 | 3.jpg | Главный магазин Цяньмэнь Дашилань |
4 | 4.jpg | Вы приходите в пик сезона |
# 对数据列表文件进行划分
%cd ~/data/data62842/
print(data_label.shape)
train=data_label[:45000]
val=data_label[45000:]
train.to_csv('train.txt',sep='\t',header=None,index=None)
val.to_csv('val.txt',sep='\t',header=None,index=None)
/home/aistudio/data/data62842
(50000, 2)
# 查看数量
print(train.shape)
print(val.shape)
(45000, 2)
(5000, 2)
!head val.txt
45000.jpg 责任单位:北京市环清环卫设施维修
45001.jpg 眼镜
45002.jpg 光临
45003.jpg 主治
45004.jpg 菜饭骨头汤
45005.jpg 理
45006.jpg 要多者提前预定
45007.jpg 干洗湿洗
45008.jpg 画布咖啡
45009.jpg 电焊、气割、专业自卸车
!head train.txt
0.jpg 拉拉
1.jpg 6号
2.jpg 胖胖
3.jpg 前门大栅栏总店
4.jpg 你来就是旺季
5.jpg 毛衣厂家直销
6.jpg 13761916218
7.jpg 福鼎白茶
8.jpg 妍心美容
9.jpg 童车童床
В-четвертых, настройте параметры тренировки
Настройка на основе PaddleOCR/configs/rec/ch_ppocr_v2.0/rec_chinese_lite_train_v2.0.yml
1. Настройте сеть модели
Используя алгоритм CRNN, магистраль — MobileNetV3, а функция потерь — CTCLoss.
Architecture:
model_type: rec
algorithm: CRNN
Transform:
Backbone:
name: MobileNetV3
scale: 0.5
model_name: small
small_stride: [1, 2, 2, 2]
Neck:
name: SequenceEncoder
encoder_type: rnn
hidden_size: 48
Head:
name: CTCHead
fc_decay: 0.00001
2. Данные конфигурации
Настройка Train.data_dir, Train.label_file_list, Eval.data_dir, Eval.label_file_list
Train:
dataset:
name: SimpleDataSet
data_dir: /home/aistudio/data/data62842/train_images
label_file_list: ["/home/aistudio/data/data62842/train.txt"]
...
...
Eval:
dataset:
name: SimpleDataSet
data_dir: /home/aistudio/data/data62842/train_images
label_file_list: ["/home/aistudio/data/data62842/val.txt"]
3. Видеокарта, настройки оценки
use_gpu, cal_metric_during_train — GPU, переключатель оценки соответственно
Global:
use_gpu: false # true 使用GPU
.....
cal_metric_during_train: False # true 打开评估
4. Многопоточные задачи
Train.loader.num_workers:4
Eval.loader.num_workers: 4
5. Полная конфигурация
Global:
use_gpu: true
epoch_num: 500
log_smooth_window: 20
print_batch_step: 10
save_model_dir: ./output/rec_chinese_lite_v2.0
save_epoch_step: 3
# evaluation is run every 5000 iterations after the 4000th iteration
eval_batch_step: [0, 2000]
cal_metric_during_train: True
pretrained_model: ./ch_ppocr_mobile_v2.0_rec_pre/best_accuracy
checkpoints:
save_inference_dir:
use_visualdl: True
infer_img: doc/imgs_words/ch/word_1.jpg
# for data or label process
character_dict_path: ppocr/utils/ppocr_keys_v1.txt
max_text_length: 25
infer_mode: False
use_space_char: True
save_res_path: ./output/rec/predicts_chinese_lite_v2.0.txt
Optimizer:
name: Adam
beta1: 0.9
beta2: 0.999
lr:
name: Cosine
learning_rate: 0.001
warmup_epoch: 5
regularizer:
name: 'L2'
factor: 0.00001
Architecture:
model_type: rec
algorithm: CRNN
Transform:
Backbone:
name: MobileNetV3
scale: 0.5
model_name: small
small_stride: [1, 2, 2, 2]
Neck:
name: SequenceEncoder
encoder_type: rnn
hidden_size: 48
Head:
name: CTCHead
fc_decay: 0.00001
Loss:
name: CTCLoss
PostProcess:
name: CTCLabelDecode
Metric:
name: RecMetric
main_indicator: acc
Train:
dataset:
name: SimpleDataSet
data_dir: /home/aistudio/data/data62842/train_images
label_file_list: ["/home/aistudio/data/data62842/train.txt"]
transforms:
- DecodeImage: # load image
img_mode: BGR
channel_first: False
- RecAug:
- CTCLabelEncode: # Class handling label
- RecResizeImg:
image_shape: [3, 32, 320]
- KeepKeys:
keep_keys: ['image', 'label', 'length'] # dataloader will return list in this order
loader:
shuffle: True
batch_size_per_card: 256
drop_last: True
num_workers: 8
Eval:
dataset:
name: SimpleDataSet
data_dir: /home/aistudio/data/data62842/train_images
label_file_list: ["/home/aistudio/data/data62842/val.txt"]
transforms:
- DecodeImage: # load image
img_mode: BGR
channel_first: False
- CTCLabelEncode: # Class handling label
- RecResizeImg:
image_shape: [3, 32, 320]
- KeepKeys:
keep_keys: ['image', 'label', 'length'] # dataloader will return list in this order
loader:
shuffle: False
drop_last: False
batch_size_per_card: 256
num_workers: 8
6. Используйте предварительно обученную модель
Сообщается, что при использовании предварительно обученной модели скорость обучения выше! ! !
Загружаемые модели из PaddleOCR включают推理模型
,训练模型
,预训练模型
,slim模型
, различия моделей объясняются следующим образом:
тип модели | Формат модели | Введение |
---|---|---|
модель вывода | inference.pdmodel, inference.pdiparams | для предиктивного вывода двигателя,Подробности |
обучающая модель, предтренировочная модель | *.pdparams, *.pdopt, *.states | Параметры, состояние оптимизатора и промежуточная обучающая информация модели, сохраненные в процессе обучения, в основном используются для оценки индикаторов модели и обучения восстановлению. |
стройная модель | *.nb | Модель, сжатая с помощью инструмента сжатия модели PaddleSlim, подходит для сквозных сценариев развертывания, таких как мобильные терминалы/терминалы IoT (требуется развертывание Paddle Lite). |
Взаимосвязь различных моделей показана на диаграмме ниже.
модель обнаружения текста
наименование модели | Введение модели | конфигурационный файл | Размер модели вывода | ссылка для скачивания |
---|---|---|---|---|
ch_ppocr_mobile_slim_v2.0_det | Тонкая укороченная версия сверхлегкой модели поддерживает распознавание текста на китайском, английском и нескольких языках. | ch_det_mv3_db_v2.0.yml | 2.6M | модель вывода |
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 | модель вывода / Обучите модель |
модель распознавания текста
Китайская модель распознавания
наименование модели | Введение модели | конфигурационный файл | Размер модели вывода | ссылка для скачивания |
---|---|---|---|---|
ch_ppocr_mobile_slim_v2.0_rec | Тонкая и количественная версия сверхлегкой модели, поддержка китайского и английского языков, цифровое распознавание | rec_chinese_lite_train_v2.0.yml | 6M | модель вывода / Обучите модель |
ch_ppocr_mobile_v2.0_rec | Оригинальная сверхлегкая модель, поддержка китайского и английского языков, распознавание номеров | rec_chinese_lite_train_v2.0.yml | 5.2M | модель вывода / Обучите модель / предварительно обученная модель |
ch_ppocr_server_v2.0_rec | Универсальная модель, поддержка китайского и английского языков, распознавание номеров | rec_chinese_common_train_v2.0.yml | 94.8M | модель вывода / Обучите модель / предварительно обученная модель |
инструкция: 训练模型
Это модель, полученная путем точной настройки на основе предварительно обученной модели на реальных данных и вертикальных синтетических текстовых данных, и имеет лучшую производительность в реальных сценариях приложений.预训练模型
Он напрямую основан на полном объеме реальных данных и обучении на синтетических данных, что больше подходит для тонкой настройки на собственном наборе данных.
Английская модель распознавания
наименование модели | Введение модели | конфигурационный файл | Размер модели вывода | ссылка для скачивания |
---|---|---|---|---|
en_number_mobile_slim_v2.0_rec | Тонкая квантованная версия сверхлегкой модели с поддержкой английского и цифрового распознавания. | rec_en_number_lite_train.yml | 2.7M | модель вывода / Обучите модель |
en_number_mobile_v2.0_rec | Оригинальная сверхлегкая модель, поддерживающая английский язык и цифровое распознавание | rec_en_number_lite_train.yml | 2.6M | модель вывода / Обучите модель |
%cd ~/PaddleOCR/
!wget https://paddleocr.bj.bcebos.com/dygraph_v2.0/ch/ch_ppocr_mobile_v2.0_rec_pre.tar
!tar -xf ch_ppocr_mobile_v2.0_rec_pre.tar
/home/aistudio/PaddleOCR
--2021-12-30 17:57:27-- https://paddleocr.bj.bcebos.com/dygraph_v2.0/ch/ch_ppocr_mobile_v2.0_rec_pre.tar
Resolving paddleocr.bj.bcebos.com (paddleocr.bj.bcebos.com)... 182.61.200.229, 182.61.200.195, 2409:8c04:1001:1002:0:ff:b001:368a
Connecting to paddleocr.bj.bcebos.com (paddleocr.bj.bcebos.com)|182.61.200.229|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 16130750 (15M) [application/x-tar]
Saving to: ‘ch_ppocr_mobile_v2.0_rec_pre.tar’
ch_ppocr_mobile_v2. 100%[===================>] 15.38M 21.9MB/s in 0.7s
2021-12-30 17:57:28 (21.9 MB/s) - ‘ch_ppocr_mobile_v2.0_rec_pre.tar’ saved [16130750/16130750]
5. Обучение
%cd ~/PaddleOCR/
!python tools/train.py -c ./configs/rec/ch_ppocr_v2.0/rec_chinese_lite_train_v2.0.yml -o Global.checkpoints=./output/rec_chinese_lite_v2.0/latest
1. Выберите подходящий размер партии
2. Журнал тренировок
[2021/12/30 23:26:54] root INFO: epoch: [68/500], iter: 9930, lr: 0.000962, loss: 5.635038, acc: 0.521482, norm_edit_dis: 0.745346, reader_cost: 0.01405 s, batch_cost: 0.26990 s, samples: 2560, ips: 948.50786
[2021/12/30 23:27:11] root INFO: epoch: [68/500], iter: 9940, lr: 0.000962, loss: 5.653114, acc: 0.509764, norm_edit_dis: 0.740487, reader_cost: 0.01402 s, batch_cost: 0.26862 s, samples: 2560, ips: 953.03473
[2021/12/30 23:27:26] root INFO: epoch: [68/500], iter: 9950, lr: 0.000962, loss: 5.411234, acc: 0.515623, norm_edit_dis: 0.748549, reader_cost: 0.00091 s, batch_cost: 0.26371 s, samples: 2560, ips: 970.76457
[2021/12/30 23:27:40] root INFO: epoch: [68/500], iter: 9960, lr: 0.000962, loss: 5.588465, acc: 0.525389, norm_edit_dis: 0.755345, reader_cost: 0.00684 s, batch_cost: 0.25901 s, samples: 2560, ips: 988.38445
[2021/12/30 23:27:48] root INFO: epoch: [68/500], iter: 9970, lr: 0.000961, loss: 5.789876, acc: 0.513670, norm_edit_dis: 0.740609, reader_cost: 0.00095 s, batch_cost: 0.15022 s, samples: 2560, ips: 1704.17763
[2021/12/30 23:27:51] root INFO: epoch: [68/500], iter: 9974, lr: 0.000961, loss: 5.787237, acc: 0.511717, norm_edit_dis: 0.747102, reader_cost: 0.00018 s, batch_cost: 0.05935 s, samples: 1024, ips: 1725.41448
[2021/12/30 23:27:51] root INFO: save model in ./output/rec_chinese_lite_v2.0/latest
[2021/12/30 23:27:51] root INFO: Initialize indexs of datasets:['/home/aistudio/data/data62842/train.txt']
[2021/12/30 23:28:21] root INFO: epoch: [69/500], iter: 9980, lr: 0.000961, loss: 5.801509, acc: 0.517576, norm_edit_dis: 0.749756, reader_cost: 1.10431 s, batch_cost: 1.37585 s, samples: 1536, ips: 111.64048
[2021/12/30 23:28:40] root INFO: epoch: [69/500], iter: 9990, lr: 0.000961, loss: 5.548770, acc: 0.533201, norm_edit_dis: 0.762078, reader_cost: 0.00839 s, batch_cost: 0.32035 s, samples: 2560, ips: 799.11578
[2021/12/30 23:28:56] root INFO: epoch: [69/500], iter: 10000, lr: 0.000961, loss: 5.449094, acc: 0.537107, norm_edit_dis: 0.762517, reader_cost: 0.00507 s, batch_cost: 0.25845 s, samples: 2560, ips: 990.51517
eval model:: 100%|██████████████████████████████| 20/20 [00:15<00:00, 1.98it/s]
[2021/12/30 23:29:12] root INFO: cur metric, acc: 0.4641999071600186, norm_edit_dis: 0.6980459628854201, fps: 4204.853978632389
[2021/12/30 23:29:12] root INFO: best metric, acc: 0.48179990364001923, start_epoch: 12, norm_edit_dis: 0.7096561279006699, fps: 4618.199275059127, best_epoch: 46
3. визуальная визуализация
- Установить visualdl локально
pip install visualdl
- Загрузить журналы на локальный
- запустить визуализацию visualdl
visualdl --logdir ./
- Откройте браузер для просмотра
http://localhost:8040/
6. Оценка модели
# GPU 评估, Global.checkpoints 为待测权重
%cd ~/PaddleOCR/
!python -m paddle.distributed.launch tools/eval.py -c configs/rec/ch_ppocr_v2.0/rec_chinese_lite_train_v2.0.yml \
-o Global.checkpoints=./output/rec_chinese_lite_v2.0/latest
/home/aistudio/PaddleOCR
----------- Configuration Arguments -----------
backend: auto
elastic_server: None
force: False
gpus: None
heter_devices:
heter_worker_num: None
heter_workers:
host: None
http_port: None
ips: 127.0.0.1
job_id: None
log_dir: log
np: None
nproc_per_node: None
run_mode: None
scale: 0
server_num: None
servers:
training_script: tools/eval.py
training_script_args: ['-c', 'configs/rec/ch_ppocr_v2.0/rec_chinese_lite_train_v2.0.yml', '-o', 'Global.checkpoints=./output/rec_chinese_lite_v2.0/latest']
worker_num: None
workers:
------------------------------------------------
WARNING 2021-12-31 11:38:43,737 launch.py:423] Not found distinct arguments and compiled with cuda or xpu. Default use collective mode
launch train in GPU mode!
INFO 2021-12-31 11:38:43,740 launch_utils.py:528] Local start 1 processes. First process distributed environment info (Only For Debug):
+=======================================================================================+
| Distributed Envs Value |
+---------------------------------------------------------------------------------------+
| PADDLE_TRAINER_ID 0 |
| PADDLE_CURRENT_ENDPOINT 127.0.0.1:33326 |
| PADDLE_TRAINERS_NUM 1 |
| PADDLE_TRAINER_ENDPOINTS 127.0.0.1:33326 |
| PADDLE_RANK_IN_NODE 0 |
| PADDLE_LOCAL_DEVICE_IDS 0 |
| PADDLE_WORLD_DEVICE_IDS 0 |
| FLAGS_selected_gpus 0 |
| FLAGS_selected_accelerators 0 |
+=======================================================================================+
INFO 2021-12-31 11:38:43,740 launch_utils.py:532] details abouts PADDLE_TRAINER_ENDPOINTS can be found in log/endpoints.log, and detail running logs maybe found in log/workerlog.0
launch proc_id:3811 idx:0
[2021/12/31 11:38:45] root INFO: Architecture :
[2021/12/31 11:38:45] root INFO: Backbone :
[2021/12/31 11:38:45] root INFO: model_name : small
[2021/12/31 11:38:45] root INFO: name : MobileNetV3
[2021/12/31 11:38:45] root INFO: scale : 0.5
[2021/12/31 11:38:45] root INFO: small_stride : [1, 2, 2, 2]
[2021/12/31 11:38:45] root INFO: Head :
[2021/12/31 11:38:45] root INFO: fc_decay : 1e-05
[2021/12/31 11:38:45] root INFO: name : CTCHead
[2021/12/31 11:38:45] root INFO: Neck :
[2021/12/31 11:38:45] root INFO: encoder_type : rnn
[2021/12/31 11:38:45] root INFO: hidden_size : 48
[2021/12/31 11:38:45] root INFO: name : SequenceEncoder
[2021/12/31 11:38:45] root INFO: Transform : None
[2021/12/31 11:38:45] root INFO: algorithm : CRNN
[2021/12/31 11:38:45] root INFO: model_type : rec
[2021/12/31 11:38:45] root INFO: Eval :
[2021/12/31 11:38:45] root INFO: dataset :
[2021/12/31 11:38:45] root INFO: data_dir : /home/aistudio/data/data62842/train_images
[2021/12/31 11:38:45] root INFO: label_file_list : ['/home/aistudio/data/data62842/val.txt']
[2021/12/31 11:38:45] root INFO: name : SimpleDataSet
[2021/12/31 11:38:45] root INFO: transforms :
[2021/12/31 11:38:45] root INFO: DecodeImage :
[2021/12/31 11:38:45] root INFO: channel_first : False
[2021/12/31 11:38:45] root INFO: img_mode : BGR
[2021/12/31 11:38:45] root INFO: CTCLabelEncode : None
[2021/12/31 11:38:45] root INFO: RecResizeImg :
[2021/12/31 11:38:45] root INFO: image_shape : [3, 32, 320]
[2021/12/31 11:38:45] root INFO: KeepKeys :
[2021/12/31 11:38:45] root INFO: keep_keys : ['image', 'label', 'length']
[2021/12/31 11:38:45] root INFO: loader :
[2021/12/31 11:38:45] root INFO: batch_size_per_card : 256
[2021/12/31 11:38:45] root INFO: drop_last : False
[2021/12/31 11:38:45] root INFO: num_workers : 8
[2021/12/31 11:38:45] root INFO: shuffle : False
[2021/12/31 11:38:45] root INFO: Global :
[2021/12/31 11:38:45] root INFO: cal_metric_during_train : True
[2021/12/31 11:38:45] root INFO: character_dict_path : ppocr/utils/ppocr_keys_v1.txt
[2021/12/31 11:38:45] root INFO: checkpoints : ./output/rec_chinese_lite_v2.0/latest
[2021/12/31 11:38:45] root INFO: debug : False
[2021/12/31 11:38:45] root INFO: distributed : False
[2021/12/31 11:38:45] root INFO: epoch_num : 500
[2021/12/31 11:38:45] root INFO: eval_batch_step : [0, 2000]
[2021/12/31 11:38:45] root INFO: infer_img : doc/imgs_words/ch/word_1.jpg
[2021/12/31 11:38:45] root INFO: infer_mode : False
[2021/12/31 11:38:45] root INFO: log_smooth_window : 20
[2021/12/31 11:38:45] root INFO: max_text_length : 25
[2021/12/31 11:38:45] root INFO: pretrained_model : ./ch_ppocr_mobile_v2.0_rec_pre/best_accuracy
[2021/12/31 11:38:45] root INFO: print_batch_step : 10
[2021/12/31 11:38:45] root INFO: save_epoch_step : 3
[2021/12/31 11:38:45] root INFO: save_inference_dir : None
[2021/12/31 11:38:45] root INFO: save_model_dir : ./output/rec_chinese_lite_v2.0
[2021/12/31 11:38:45] root INFO: save_res_path : ./output/rec/predicts_chinese_lite_v2.0.txt
[2021/12/31 11:38:45] root INFO: use_gpu : True
[2021/12/31 11:38:45] root INFO: use_space_char : True
[2021/12/31 11:38:45] root INFO: use_visualdl : True
[2021/12/31 11:38:45] root INFO: Loss :
[2021/12/31 11:38:45] root INFO: name : CTCLoss
[2021/12/31 11:38:45] root INFO: Metric :
[2021/12/31 11:38:45] root INFO: main_indicator : acc
[2021/12/31 11:38:45] root INFO: name : RecMetric
[2021/12/31 11:38:45] root INFO: Optimizer :
[2021/12/31 11:38:45] root INFO: beta1 : 0.9
[2021/12/31 11:38:45] root INFO: beta2 : 0.999
[2021/12/31 11:38:45] root INFO: lr :
[2021/12/31 11:38:45] root INFO: learning_rate : 0.001
[2021/12/31 11:38:45] root INFO: name : Cosine
[2021/12/31 11:38:45] root INFO: warmup_epoch : 5
[2021/12/31 11:38:45] root INFO: name : Adam
[2021/12/31 11:38:45] root INFO: regularizer :
[2021/12/31 11:38:45] root INFO: factor : 1e-05
[2021/12/31 11:38:45] root INFO: name : L2
[2021/12/31 11:38:45] root INFO: PostProcess :
[2021/12/31 11:38:45] root INFO: name : CTCLabelDecode
[2021/12/31 11:38:45] root INFO: Train :
[2021/12/31 11:38:45] root INFO: dataset :
[2021/12/31 11:38:45] root INFO: data_dir : /home/aistudio/data/data62842/train_images
[2021/12/31 11:38:45] root INFO: label_file_list : ['/home/aistudio/data/data62842/train.txt']
[2021/12/31 11:38:45] root INFO: name : SimpleDataSet
[2021/12/31 11:38:45] root INFO: transforms :
[2021/12/31 11:38:45] root INFO: DecodeImage :
[2021/12/31 11:38:45] root INFO: channel_first : False
[2021/12/31 11:38:45] root INFO: img_mode : BGR
[2021/12/31 11:38:45] root INFO: RecAug : None
[2021/12/31 11:38:45] root INFO: CTCLabelEncode : None
[2021/12/31 11:38:45] root INFO: RecResizeImg :
[2021/12/31 11:38:45] root INFO: image_shape : [3, 32, 320]
[2021/12/31 11:38:45] root INFO: KeepKeys :
[2021/12/31 11:38:45] root INFO: keep_keys : ['image', 'label', 'length']
[2021/12/31 11:38:45] root INFO: loader :
[2021/12/31 11:38:45] root INFO: batch_size_per_card : 256
[2021/12/31 11:38:45] root INFO: drop_last : True
[2021/12/31 11:38:45] root INFO: num_workers : 8
[2021/12/31 11:38:45] root INFO: shuffle : True
[2021/12/31 11:38:45] root INFO: profiler_options : None
[2021/12/31 11:38:45] root INFO: train with paddle 2.2.1 and device CUDAPlace(0)
[2021/12/31 11:38:45] root INFO: Initialize indexs of datasets:['/home/aistudio/data/data62842/val.txt']
W1231 11:38:45.574332 3811 device_context.cc:447] Please NOTE: device: 0, GPU Compute Capability: 7.0, Driver API Version: 10.1, Runtime API Version: 10.1
W1231 11:38:45.579066 3811 device_context.cc:465] device: 0, cuDNN Version: 7.6.
[2021/12/31 11:38:50] root INFO: resume from ./output/rec_chinese_lite_v2.0/latest
[2021/12/31 11:38:50] root INFO: metric in ckpt ***************
[2021/12/31 11:38:50] root INFO: acc:0.48179990364001923
[2021/12/31 11:38:50] root INFO: start_epoch:72
[2021/12/31 11:38:50] root INFO: norm_edit_dis:0.7096561279006699
[2021/12/31 11:38:50] root INFO: fps:4618.199275059127
[2021/12/31 11:38:50] root INFO: best_epoch:46
eval model:: 0%| | 0/20 [00:00<?, ?it/s]
eval model:: 5%|▌ | 1/20 [00:03<01:12, 3.79s/it]
eval model:: 10%|█ | 2/20 [00:04<00:52, 2.92s/it]
eval model:: 15%|█▌ | 3/20 [00:05<00:38, 2.29s/it]
eval model:: 20%|██ | 4/20 [00:06<00:29, 1.85s/it]
eval model:: 25%|██▌ | 5/20 [00:07<00:23, 1.54s/it]
eval model:: 30%|███ | 6/20 [00:07<00:18, 1.32s/it]
eval model:: 35%|███▌ | 7/20 [00:08<00:15, 1.17s/it]
eval model:: 40%|████ | 8/20 [00:09<00:12, 1.07s/it]
eval model:: 45%|████▌ | 9/20 [00:10<00:10, 1.00it/s]
eval model:: 50%|█████ | 10/20 [00:11<00:09, 1.06it/s]
eval model:: 55%|█████▌ | 11/20 [00:12<00:08, 1.10it/s]
eval model:: 60%|██████ | 12/20 [00:12<00:07, 1.14it/s]
eval model:: 65%|██████▌ | 13/20 [00:13<00:06, 1.16it/s]
eval model:: 70%|███████ | 14/20 [00:14<00:05, 1.19it/s]
eval model:: 75%|███████▌ | 15/20 [00:15<00:04, 1.20it/s]
eval model:: 80%|████████ | 16/20 [00:16<00:03, 1.21it/s]
eval model:: 85%|████████▌ | 17/20 [00:16<00:02, 1.21it/s]
eval model:: 90%|█████████ | 18/20 [00:17<00:01, 1.22it/s]
eval model:: 95%|█████████▌| 19/20 [00:18<00:00, 1.22it/s]
eval model:: 100%|██████████| 20/20 [00:19<00:00, 1.41it/s]
[2021/12/31 11:39:09] root INFO: metric eval ***************
[2021/12/31 11:39:09] root INFO: acc:0.4737999052400189
[2021/12/31 11:39:09] root INFO: norm_edit_dis:0.706719055893877
[2021/12/31 11:39:09] root INFO: fps:4160.243256411111
INFO 2021-12-31 11:39:10,794 launch.py:311] Local processes completed.
7. Прогноз результатов
Сценарий прогнозирования использует предсказанную обученную модель и сохраняет результаты в формате txt, которые можно напрямую отправить на вход для подачи заявок на участие в конкурсе для оценки.Файл по умолчанию сохраняется в output/rec/predicts_chinese_lite_v2.0.txt.
1. Содержание и формат представления
В этом конкурсе участники должны представить модели, обученные с помощью платформы глубокого обучения PaddlePaddle. Участники должны представить результаты в текстовом формате .txt, в котором каждая строка является результатом имени изображения и текстового предсказания, с «\t» в качестве разделителя посередине, пример выглядит следующим образом:
new_name | value |
---|---|
0.jpg | текст 0 |
2. модификация infer_rec.py
with open(save_res_path, "w") as fout:
#添加列头
fout.write('new_name' + "\t" + 'value' +'\n')
for file in get_image_file_list(config['Global']['infer_img']):
logger.info("infer_img: {}".format(file))
with open(file, 'rb') as f:
img = f.read()
data = {'image': img}
batch = transform(data, ops)
if config['Architecture']['algorithm'] == "SRN":
encoder_word_pos_list = np.expand_dims(batch[1], axis=0)
gsrm_word_pos_list = np.expand_dims(batch[2], axis=0)
gsrm_slf_attn_bias1_list = np.expand_dims(batch[3], axis=0)
gsrm_slf_attn_bias2_list = np.expand_dims(batch[4], axis=0)
others = [
paddle.to_tensor(encoder_word_pos_list),
paddle.to_tensor(gsrm_word_pos_list),
paddle.to_tensor(gsrm_slf_attn_bias1_list),
paddle.to_tensor(gsrm_slf_attn_bias2_list)
]
if config['Architecture']['algorithm'] == "SAR":
valid_ratio = np.expand_dims(batch[-1], axis=0)
img_metas = [paddle.to_tensor(valid_ratio)]
images = np.expand_dims(batch[0], axis=0)
images = paddle.to_tensor(images)
if config['Architecture']['algorithm'] == "SRN":
preds = model(images, others)
elif config['Architecture']['algorithm'] == "SAR":
preds = model(images, img_metas)
else:
preds = model(images)
post_result = post_process_class(preds)
info = None
if isinstance(post_result, dict):
rec_info = dict()
for key in post_result:
if len(post_result[key][0]) >= 2:
rec_info[key] = {
"label": post_result[key][0][0],
"score": float(post_result[key][0][1]),
}
info = json.dumps(rec_info)
else:
if len(post_result[0]) >= 2:
info = post_result[0][0] + "\t" + str(post_result[0][1])
if info is not None:
logger.info("\t result: {}".format(info))
# fout.write(file + "\t" + info)
# 格式化输出
fout.write(file + "\t" + post_result[0][0] +'\n')
logger.info("success!")
%cd ~/PaddleOCR/
!python tools/infer_rec.py -c configs/rec/ch_ppocr_v2.0/rec_chinese_lite_train_v2.0.yml \
-o Global.infer_img="/home/aistudio/data/data62843/test_images" \
Global.pretrained_model="./output/rec_chinese_lite_v2.0/best_accuracy"
[2021/12/31 11:52:29] root INFO: infer_img: /home/aistudio/data/data62843/test_images/9401.jpg
журнал прогнозов
[2021/12/30 23:53:50] root INFO: result: 萧记果点 0.66611135
[2021/12/30 23:53:50] root INFO: infer_img: /home/aistudio/data/data62843/test_images/9995.jpg
[2021/12/30 23:53:50] root INFO: result: 福 0.1693737
[2021/12/30 23:53:50] root INFO: infer_img: /home/aistudio/data/data62843/test_images/9996.jpg
[2021/12/30 23:53:50] root INFO: result: 279 0.97771764
[2021/12/30 23:53:50] root INFO: infer_img: /home/aistudio/data/data62843/test_images/9997.jpg
[2021/12/30 23:53:50] root INFO: result: 公牛装饰开关 0.9916236
[2021/12/30 23:53:50] root INFO: infer_img: /home/aistudio/data/data62843/test_images/9998.jpg
[2021/12/30 23:53:50] root INFO: result: 专酒 0.118371546
[2021/12/30 23:53:50] root INFO: infer_img: /home/aistudio/data/data62843/test_images/9999.jpg
[2021/12/30 23:53:50] root INFO: result: 东之家 0.871051
[2021/12/30 23:53:50] root INFO: success!
...
...
8. Прогнозирование на основе механизма прогнозирования
1. Ограничение размера модели
Ограничение 1: общий размер модели не превышает 10 МБ (исходя из суммы несжатого дискового пространства файлов .pdmodel и .pdiparams);
2. Решения
Модель, сохраненная в процессе обучения, является моделью контрольных точек, и сохраняются только параметры модели, которые в основном используются для возобновления обучения. По сути, ограничения здесь ограничивают размер модели вывода. Модель логического вывода обычно представляет собой обучение модели, твердую модель, которая сохраняет структуру модели и параметры модели в файле и в основном используется для прогнозирования сценариев развертывания. По сравнению с моделью контрольных точек, модель логического вывода дополнительно сохраняет структурную информацию модели. Она имеет превосходную производительность в прогнозировании развертывания и ускорении логического вывода, а также является гибкой и удобной. Она подходит для фактической системной интеграции, а размер модели будет меньше.
# 静态模型导出
%cd ~/PaddleOCR/
!python tools/export_model.py -c configs/rec/ch_ppocr_v2.0/rec_chinese_lite_train_v2.0.yml -o Global.pretrained_model=./output/rec_chinese_lite_v2.0/best_accuracy.pdparams Global.save_inference_dir=./inference/rec_inference/
/home/aistudio/PaddleOCR
W1230 23:54:48.747483 13346 device_context.cc:447] Please NOTE: device: 0, GPU Compute Capability: 7.0, Driver API Version: 11.0, Runtime API Version: 10.1
W1230 23:54:48.752360 13346 device_context.cc:465] device: 0, cuDNN Version: 7.6.
[2021/12/30 23:54:52] root INFO: load pretrain successful from ./output/rec_chinese_lite_v2.0/best_accuracy
[2021/12/30 23:54:54] root INFO: inference model is saved to ./inference/rec_inference/inference
%cd ~/PaddleOCR/
!du -sh ./inference/rec_inference/
/home/aistudio/PaddleOCR
5.2M ./inference/rec_inference/
- Можно видеть, что после того, как алгоритм CRNN, используемый в настоящее время для обучения, выводит вывод, остается только 5,2 млн.
- Экспортированную модель вывода также можно использовать для прогнозирования, а логика прогнозирования показана в следующем коде.
# 使用导出静态模型预测
%cd ~/PaddleOCR/
!python3.7 tools/infer/predict_rec.py --rec_model_dir=./inference/rec_inference/ --image_dir="/home/aistudio/data/A榜测试数据集/TestAImages"
журнал прогнозов
[2021/12/30 13:20:08] root INFO: Predicts of /home/aistudio/data/A榜测试数据集/TestAImages/TestA_000001.jpg:('MJ', 0.2357887)
[2021/12/30 13:20:08] root INFO: Predicts of /home/aistudio/data/A榜测试数据集/TestAImages/TestA_000002.jpg:('中门', 0.7167614)
[2021/12/30 13:20:08] root INFO: Predicts of /home/aistudio/data/A榜测试数据集/TestAImages/TestA_000003.jpg:('黄焖鸡米饭', 0.7325407)
[2021/12/30 13:20:08] root INFO: Predicts of /home/aistudio/data/A榜测试数据集/TestAImages/TestA_000004.jpg:('加行', 0.06699998)
[2021/12/30 13:20:08] root INFO: Predicts of /home/aistudio/data/A榜测试数据集/TestAImages/TestA_000005.jpg:('学商烤面航', 0.40579563)
[2021/12/30 13:20:08] root INFO: Predicts of /home/aistudio/data/A榜测试数据集/TestAImages/TestA_000006.jpg:('绿村装机 滋光彩机 CP口出国', 0.38243735)
[2021/12/30 13:20:08] root INFO: Predicts of /home/aistudio/data/A榜测试数据集/TestAImages/TestA_000007.jpg:('有酸锁 四好吃', 0.38957664)
[2021/12/30 13:20:08] root INFO: Predicts of /home/aistudio/data/A榜测试数据集/TestAImages/TestA_000008.jpg:('婚汽中海', 0.36037388)
[2021/12/30 13:20:08] root INFO: Predicts of /home/aistudio/data/A榜测试数据集/TestAImages/TestA_000009.jpg:('L', 0.25453746)
[2021/12/30 13:20:08] root INFO: Predicts of /home/aistudio/data/A榜测试数据集/TestAImages/TestA_000010.jpg:('清女装', 0.79736567)
[2021/12/30 13:20:08] root INFO: Predicts of /home/aistudio/data/A榜测试数据集/TestAImages/TestA_000011.jpg:('幼小数学视食', 0.50577885)
...
...
9. Отправить
Результаты прогнозирования сохраняются в файле output/rec/predicts_chinese_lite_v2.0.txt, указанном в файле конфигурации, который можно отправить напрямую.
%cd ~
!head PaddleOCR/output/rec/predicts_chinese_lite_v2.0.txt
/home/aistudio
new_name value
0.jpg 邦佳洗衣
1.jpg 不锈钢配件大全
10.jpg 诊疗科目:中医科
100.jpg 210
1000.jpg 电线电装等
1001.jpg 20
1002.jpg 进口湖纸 专业制造
1003.jpg 1567C
1004.jpg iTNoW
Отправьте свой результат. . . Относительно низкий, вы можете ссылаться на предыдущую пост-обработку данных, такую как удаление пробелов, использование заглавных букв, а также полную и половинную ширину для оптимизации.