当前位置:   article > 正文

PPOCRv3在ncnn端部署_ppocr rec ncnn

ppocr rec ncnn


前言

之前尝试使用paddle -> onnx -> ncnn的方案,遇到了转ncnn过程中,某些层不支持的问题,经过修改ncnn模型参数,可实现部署,但是修改较复杂,很不易用,现在自己都忘了之前怎么修改的了。
参考文档:
PP-OCRv3 文本识别模型转ncnn模型
PPOCRV3文本识别模型精度损失问题解决
ncnn部署PP-OCRv3

现在尝试利用paddle -> pth -> pt -> pnnx -> ncnn 的方式实现ncnn模型部署,且不需要对PPOCRv3的模型进行修改


一、paddle -> pth -> pt

  1. 开源工程路径:PaddleOCR2Pytorch
  2. 下载工程后,找到"./pytorchocr/base_ocr_v20.py"文件,对其中save_pytorch_weights函数修改:
    def save_pytorch_weights(self, weights_path):
        "转torchsprit"
        input_size = torch.randn(1,3,48, 320)
        mod = torch.jit.trace(self.net, input_size)
        torch.jit.save(mod, "ch_PP-OCRv3_rec_infer.pt")

        try:
            torch.save(self.net.state_dict(), weights_path, _use_new_zipfile_serialization=False)
        except:
            torch.save(self.net.state_dict(), weights_path) # _use_new_zipfile_serialization=False for torch>=1.6.0
        print('model is saved: {}'.format(weights_path))
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  1. 运行代码(注意该工程默认加载的是训练模型best_accuracy)
python converter/ch_ppocr_v3_rec_converter.py --src_model_path "./PaddleOCR-2.7.2/output/01_20240326_ppv3_train/"
  • 1
  1. 第三方依赖
train@train:/Projects/ocr/PaddleOCR2Pytorch-main$ pip list | grep -w torch
torch                        1.7.1+cu101
  • 1
  • 2
  1. 最终生成文件
train@train:/Projects/ocr/PaddleOCR2Pytorch-main$ ls -l ch_*
-rwxr--r-- 1 nobody nogroup 10944466 47 08:59 ch_PP-OCRv3_rec_infer.pt
-rwxr--r-- 1 nobody nogroup 10660036 47 08:59 ch_ptocr_v3_rec_infer.pth
  • 1
  • 2
  • 3

二、pt -> pnnx -> ncnn

  1. 利用第三方库pnnx,ncnn,生成ncnn模型文件(这里应用了2个inputshape是为了实现动态输入,H维上的值是任意设置的)
pnnx ch_PP-OCRv3_rec_infer.pt inputshape=[1,3,48,320] inputshape2=[1,3,48,480]
  • 1
  1. 第三方依赖
train@train:/Projects/ocr/PaddleOCR2Pytorch-main$ pip list | grep -E "pnnx|ncnn"
ncnn                         1.0.20230223
pnnx                         20240226
  • 1
  • 2
  • 3
  1. 最终生成文件(其中ch_PP_OCRv3_rec_infer_ncnn.py为验证脚本,可直接运行验证ncnn模型是否正常)
train@train:/Projects/ocr/PaddleOCR2Pytorch-main/pnnx2ncnn/last_best$ ls -l *ncnn*
-rw-r--r-- 1 train train    5285788 47 09:23 ch_PP_OCRv3_rec_infer.ncnn.bin
-rw-r--r-- 1 train train   10159       47 09:23 ch_PP_OCRv3_rec_infer.ncnn.param
-rw-r--r-- 1 train train   667            47 09:23 ch_PP_OCRv3_rec_infer_ncnn.py
  • 1
  • 2
  • 3
  • 4

三、ncnn模型部署

生成ncnn模型主要为了在PC端或者移动端部署,当前使用vs2019实现了对文本识别模型的推理测试,主要利用开源ncnn库、opencv库实现对ncnn模型的推理,之后有时间会开源demo工程。


参考文档

  1. layer 65 not exists or registered
  2. opencv x86(32位) windows下vs2019编译问题
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Gausst松鼠会/article/detail/679061
推荐阅读
相关标签
  

闽ICP备14008679号