深度学习框架【PaddlePaddle】搭建OCR手写体模型,以及模型如何训练、评估、导出、推理等

1、我是基于容器做的,两个我都试了,有CPU的,有GPU的(我用的CUDA12)

CPU:docker pull registry.baidubce.com/paddlepaddle/paddle:2.5.0rc0-cpu
GPU:docker pull registry.baidubce.com/paddlepaddle/paddle:2.6.1-gpu-cuda12.0-cudnn8.9-trt8.6

2、容器启动

2.1、CPU启动容器

数据挂载到了【/data/docker-mount/paddle】下

mkdir -r /data/docker-mount/paddle
docker run -d --name handwriting_ppocr1 \
--network=host \
-v /data/docker-mount/paddle:/paddle \
-it registry.baidubce.com/paddlepaddle/paddle:2.5.0rc0-cpu
2.2、GPU启动容器,需要安装显卡,用的nvidia,同时docker也要安装显卡

直接启动会报错

docker: Error response from daemon: could not select device driver “” with capabilities: [[gpu]].
2.2.1、安装docker的显卡

搜了一下,网上说这么安装,但是也装不上啊,索性把下面的步骤挨个肢解

distribution=$(. /etc/os-release;echo $ID$VERSION_ID)
curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | sudo apt-key add -
curl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.list | sudo tee /etc/apt/sources.list.d/nvidia-docker.list
sudo apt-get update && sudo apt-get install -y nvidia-container-toolkit
sudo systemctl restart docker
2.2.1.1、下载gpgkey文件, 我是ubuntu

下载地址:https://nvidia.github.io/nvidia-docker/gpgkey
弄不下来的话,这有网盘,伺候到位么
链接:https://pan.baidu.com/s/1vvSKYqlp_N2Fe5_00bAwXw?pwd=1234
提取码:1234

2.2.1.2、建了个文件夹,将gpgkey写入文件
mkdir /home/aiuser/docker-nvidia
sudo apt-key add gpgkey
2.2.1.3、获取【https://nvidia.github.io/nvidia-docker/distribution/nvidia-docker.list】这个链接的内容,$distribution是ubuntu的版本号,我的是20.04
#获取版本号命令
lsb_release -a

访问【https://nvidia.github.io/nvidia-docker/20.04/nvidia-docker.list】,我帮你们看了,是如下内容

deb https://nvidia.github.io/libnvidia-container/stable/ubuntu18.04/$(ARCH) /
#deb https://nvidia.github.io/libnvidia-container/experimental/ubuntu18.04/$(ARCH) /
deb https://nvidia.github.io/nvidia-container-runtime/stable/ubuntu18.04/$(ARCH) /
#deb https://nvidia.github.io/nvidia-container-runtime/experimental/ubuntu18.04/$(ARCH) /
deb https://nvidia.github.io/nvidia-docker/ubuntu18.04/$(ARCH) /
2.2.1.4、将上面的内容写到【/etc/apt/sources.list.d/nvidia-docker.list】文件中
vim /etc/apt/sources.list.d/nvidia-docker.list
2.2.1.5、然后执行下面命令,并重启docker
sudo apt-get update && sudo apt-get install -y nvidia-container-toolkit
sudo systemctl restart docker
2.2.1.6、这个时候你的容器就具备了显卡的超能力,咱来试试,就是下面这个效果
sudo docker run --rm --gpus all nvidia/cuda:11.0.3-base-ubuntu20.04 nvidia-smi
设置--rm,容器stop会直接删掉容器
2.2.2、GPU启动容器

数据挂载到了【/data/docker-mount/paddlenew】下

mkdir -r /data/docker-mount/paddlenew
docker run -d --name handwriting_ppocr2 \
--network=host \
--gpus all \
-v /data/docker-mount/paddlenew:/paddle \
-it registry.baidubce.com/paddlepaddle/paddle:2.6.1-gpu-cuda12.0-cudnn8.9-trt8.6

3、进入容器,开始PaddlePaddle的操作

3.1、先升级pip
pip install -U pip
3.2、拉取PaddleOCR代码,并安装必备的环境
cd /paddle
git clone https://gitee.com/paddlepaddle/PaddleOCR.git
cd PaddleOCR
pip install -r requirements.txt -i https://mirror.baidu.com/pypi/simple
3.3、准备训练的数据,这个是中科院手写数据和网上开源数据合并组合的数据集
https://aistudio.baidu.com/datasetdetail/102884/0
3.4、下载预训练模型
# 使用该指令下载需要的预训练模型
wget -P ./pretrained_models/ https://paddleocr.bj.bcebos.com/PP-OCRv3/chinese/ch_PP-OCRv3_rec_train.tar
# 解压预训练模型文件
tar -xf ./pretrained_models/ch_PP-OCRv3_rec_train.tar -C pretrained_models
3.5、修改配置文件
vim /paddle/PaddleOCR/configs/rec/PP-OCRv3/ch_PP-OCRv3_rec_distillation.yml
  epoch_num: 100 # 训练epoch数
  save_model_dir: ./output/ch_PP-OCR_v3_rec
  save_epoch_step: 10
  eval_batch_step: [0, 100] # 评估间隔,每隔100step评估一次
  pretrained_model: ./pretrained_models/ch_PP-OCRv3_rec_train/best_accuracy  # 预训练模型路径


  lr:
    name: Cosine # 修改学习率衰减策略为Cosine
    learning_rate: 0.0001 # 修改fine-tune的学习率
    warmup_epoch: 2 # 修改warmup轮数

Train:
  dataset:
    name: SimpleDataSet
    data_dir: ./train_data # 训练集图片路径
    ext_op_transform_idx: 1
    label_file_list:
    - ./train_data/train.txt
    ratio_list:
    - 1.0
  loader:
    shuffle: true
    batch_size_per_card: 64
    drop_last: true
    num_workers: 0
Eval:
  dataset:
    name: SimpleDataSet
    data_dir: ./train_data # 测试集图片路径
    label_file_list:
    - ./train_data/test.txt
  loader:
    shuffle: false
    drop_last: false
    batch_size_per_card: 64
    num_workers: 0

由于数据集大多是长文本,因此需要注释掉下面的数据增广策略,以便训练出更好的模型

- RecConAug:
    prob: 0.5
    ext_data_num: 2
    image_shape: [48, 320, 3]
3.6、训练之前可以评估一下模型
# 评估预训练模型
python tools/eval.py -c configs/rec/PP-OCRv3/ch_PP-OCRv3_rec_distillation.yml -o Global.pretrained_model="./pretrained_models/ch_PP-OCRv3_rec_train/best_accuracy"

CPU版本评估可能会报错,安装一下

pip install scikit-image -i https://mirror.baidu.com/pypi/simple

pip install imgaug -i https://mirror.baidu.com/pypi/simple

pip install pyclipper -i https://mirror.baidu.com/pypi/simple

pip install lmdb -i https://mirror.baidu.com/pypi/simple

pip install tqdm -i https://mirror.baidu.com/pypi/simple

pip install rapidfuzz -i https://mirror.baidu.com/pypi/simple

pip install visualdl -i https://mirror.baidu.com/pypi/simple

pip install rapidfuzz -i https://mirror.baidu.com/pypi/simple
3.7、模型训练
# 开始训练识别模型
python tools/train.py -c configs/rec/PP-OCRv3/ch_PP-OCRv3_rec_distillation.yml
3.8、训练完成之后,再对模型进行评估
# 评估finetune效果
python tools/eval.py -c configs/rec/PP-OCRv3/ch_PP-OCRv3_rec_distillation.yml -o Global.pretrained_model="./output/ch_PP-OCR_v3_rec/best_accuracy"
image.png
3.9、模型导出,导出之后分为Student(小、快、准确率稍低)和Teacher(大、慢、准确率高)
# 转化为推理模型
python tools/export_model.py -c configs/rec/PP-OCRv3/ch_PP-OCRv3_rec_distillation.yml -o Global.pretrained_model="./output/ch_PP-OCR_v3_rec/best_accuracy" Global.save_inference_dir="./inference/rec_ppocrv3/"
3.10、模型推理
# 推理预测
python tools/infer/predict_rec.py --image_dir="train_data/train_data/o.jpg" --rec_model_dir="./inference/rec_ppocrv3/Student"

4、使用Paddle Serving启动服务

4.1、下载相关的whl
cd /paddle/PaddleOCR
# 安装serving,用于启动服务 
wget https://paddle-serving.bj.bcebos.com/test-dev/whl/paddle_serving_server-0.8.3-py3-none-any.whl 
pip install paddle_serving_server-0.8.3-py3-none-any.whl -i https://pypi.tuna.tsinghua.edu.cn/simple 
# 安装client,用于向服务发送请求
wget https://paddle-serving.bj.bcebos.com/test-dev/whl/paddle_serving_client-0.8.3-cp37-none-any.whl 
pip install paddle_serving_client-0.8.3-cp37-none-any.whl -i https://pypi.tuna.tsinghua.edu.cn/simple 
# 安装serving-app 
wget https://paddle-serving.bj.bcebos.com/test-dev/whl/paddle_serving_app-0.8.3-py3-none-any.whl 
pip install paddle_serving_app-0.8.3-py3-none-any.whl -i https://pypi.tuna.tsinghua.edu.cn/simple
4.2、下载文本检测和文本识别模型
cd deploy/pdserving/ 
# 下载并解压 OCR 文本检测模型
 wget https://paddleocr.bj.bcebos.com/PP-OCRv3/chinese/ch_PP-OCRv3_det_infer.tar -O ch_PP-OCRv3_det_infer.tar && tar -xf ch_PP-OCRv3_det_infer.tar 
# 下载并解压 OCR 文本识别模型 
wget https://paddleocr.bj.bcebos.com/PP-OCRv3/chinese/ch_PP-OCRv3_rec_infer.tar -O ch_PP-OCRv3_rec_infer.tar && tar -xf ch_PP-OCRv3_rec_infer.tar 
4.3、用安装的paddle_serving_client把下载的inference模型转换成易于server部署的模型格式
# 转换检测模型 
python -m paddle_serving_client.convert --dirname ./ch_PP-OCRv3_det_infer/ \
                                         --model_filename inference.pdmodel \
                                         --params_filename inference.pdiparams \
                                         --serving_server ./ppocr_det_v3_serving/ \
                    --serving_client ./ppocr_det_v3_client/
# 转换识别模型 
python -m paddle_serving_client.convert --dirname ./ch_PP-OCRv3_rec_infer/ \
                                         --model_filename inference.pdmodel \
                                         --params_filename inference.pdiparams \
                                         --serving_server ./ppocr_rec_v3_serving/ \
                                         --serving_client ./ppocr_rec_v3_client/

这个时候,可以将Student拷贝过来./deploy/pdserving/mymodel/Student,然后使用咱们训练好的识别模型

# 转换识别模型 
python -m paddle_serving_client.convert --dirname ./mymodel/Student/ \
                                         --model_filename inference.pdmodel \
                                         --params_filename inference.pdiparams \
                                         --serving_server ./ppocr_rec_v3_serving/ \
                                         --serving_client ./ppocr_rec_v3_client/
4.4、启动服务
#启动服务,测试时使用,窗口关闭服务停止 
python web_service.py --config=config.yml 

# 启动服务(后台运行),运行日志保存在log.txt 
nohup python web_service.py --config=config.yml &>log.txt & 
tail -f ./log.txt   
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,287评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,346评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,277评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,132评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,147评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,106评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,019评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,862评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,301评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,521评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,682评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,405评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,996评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,651评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,803评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,674评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,563评论 2 352

推荐阅读更多精彩内容