赞
踩
之前尝试使用paddle -> onnx -> ncnn的方案,遇到了转ncnn过程中,某些层不支持的问题,经过修改ncnn模型参数,可实现部署,但是修改较复杂,很不易用,现在自己都忘了之前怎么修改的了。
参考文档:
PP-OCRv3 文本识别模型转ncnn模型
PPOCRV3文本识别模型精度损失问题解决
ncnn部署PP-OCRv3
现在尝试利用paddle -> pth -> pt -> pnnx -> ncnn 的方式实现ncnn模型部署,且不需要对PPOCRv3的模型进行修改
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))
python converter/ch_ppocr_v3_rec_converter.py --src_model_path "./PaddleOCR-2.7.2/output/01_20240326_ppv3_train/"
train@train:/Projects/ocr/PaddleOCR2Pytorch-main$ pip list | grep -w torch
torch 1.7.1+cu101
train@train:/Projects/ocr/PaddleOCR2Pytorch-main$ ls -l ch_*
-rwxr--r-- 1 nobody nogroup 10944466 4月 7 08:59 ch_PP-OCRv3_rec_infer.pt
-rwxr--r-- 1 nobody nogroup 10660036 4月 7 08:59 ch_ptocr_v3_rec_infer.pth
pnnx ch_PP-OCRv3_rec_infer.pt inputshape=[1,3,48,320] inputshape2=[1,3,48,480]
train@train:/Projects/ocr/PaddleOCR2Pytorch-main$ pip list | grep -E "pnnx|ncnn"
ncnn 1.0.20230223
pnnx 20240226
train@train:/Projects/ocr/PaddleOCR2Pytorch-main/pnnx2ncnn/last_best$ ls -l *ncnn*
-rw-r--r-- 1 train train 5285788 4月 7 09:23 ch_PP_OCRv3_rec_infer.ncnn.bin
-rw-r--r-- 1 train train 10159 4月 7 09:23 ch_PP_OCRv3_rec_infer.ncnn.param
-rw-r--r-- 1 train train 667 4月 7 09:23 ch_PP_OCRv3_rec_infer_ncnn.py
生成ncnn模型主要为了在PC端或者移动端部署,当前使用vs2019实现了对文本识别模型的推理测试,主要利用开源ncnn库、opencv库实现对ncnn模型的推理,之后有时间会开源demo工程。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。