PaddlePaddle / PaddleOCR

Awesome multilingual OCR toolkits based on PaddlePaddle (practical ultra lightweight OCR system, support 80+ languages recognition, provide data annotation and synthesis tools, support training and deployment among server, mobile, embedded and IoT devices)
https://paddlepaddle.github.io/PaddleOCR/
Apache License 2.0
43.53k stars 7.77k forks source link

执行版面恢复的时候,指定自定义的版面分析模型报错 #13690

Closed freezehe closed 2 months ago

freezehe commented 2 months ago

🔎 Search before asking

🐛 Bug (问题描述)

我自己使用了自己标注的图片进行版面分析模型的训练,在百度飞浆aistudio平台训练成功后导出模型,上传到服务器执行,我执行的命令是:paddleocr --image_dir=./2021-D-18930FinalReport.pdf --layout_model_dir=/home/ccic/PaddleOCR-main/picodet_lcnet_x1_0_layout --layout_dict_path=/home/ccic/PaddleOCR-main/hjb_dict.txt --type=structure --recovery=true --lang='ch' --output=./hjb0818/ 指定了我自定义的模型,报错内容如下: [2024/08/18 21:55:25] ppocr INFO: **./2021-D-18930FinalReport.pdf** [2024/08/18 21:55:26] ppocr INFO: processing 1/4 page: Traceback (most recent call last): File "/home/ccic/anaconda3/envs/paddle_env_hjb/bin/paddleocr", line 8, in sys.exit(main()) ^^^^^^ File "/home/ccic/anaconda3/envs/paddle_env_hjb/lib/python3.11/site-packages/paddleocr/paddleocr.py", line 938, in main result = engine(img, img_idx=index) ^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/home/ccic/anaconda3/envs/paddle_envhjb/lib/python3.11/site-packages/paddleocr/paddleocr.py", line 855, in call res, = super().call(img, return_ocr_result_in_table, img_idx=img_idx) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/home/ccic/anaconda3/envs/paddle_env_hjb/lib/python3.11/site-packages/paddleocr/ppstructure/predict_system.py", line 120, in call layout_res, elapse = self.layout_predictor(img) ^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/home/ccic/anaconda3/envs/paddle_env_hjb/lib/python3.11/site-packages/paddleocr/ppstructure/layout/predict_layout.py", line 96, in call self.predictor.run() ValueError: (InvalidArgument) The size of Op(Conv) inputs should not be 0. [Hint: Expected in_dims[i] != 0, but received in_dims[i]:0 == 0:0.] (at /paddle/paddle/phi/infermeta/binary.cc:465) [operator < conv2d > error]

image 请问这个bug怎么处理?

🏃‍♂️ Environment (运行环境)

centos7环境 (paddle_env_hjb) [ccic@localhost PaddleOCR-main]$ pip freeze list anyio @ file:///croot/anyio_1706220167567/work astor==0.8.1 attrdict==2.0.1 Babel==2.15.0 bce-python-sdk==0.9.17 beautifulsoup4==4.12.3 blinker==1.8.2 cachetools==5.3.3 certifi @ file:///croot/certifi_1717618050233/work/certifi charset-normalizer==3.3.2 click==8.1.7 contourpy==1.2.1 cssselect==1.2.0 cssutils==2.11.1 cycler==0.12.1 Cython==3.0.10 decorator @ file:///opt/conda/conda-bld/decorator_1643638310831/work easydict==1.13 et-xmlfile==1.1.0 faiss-cpu==1.8.0.post1 fire==0.6.0 Flask==3.0.3 flask-babel==4.0.0 fonttools==4.53.0 future==1.0.0 gast==0.3.3 h11 @ file:///croot/h11_1706652277403/work httpcore @ file:///croot/httpcore_1706728464539/work httpx @ file:///croot/httpx_1706887096329/work idna @ file:///croot/idna_1714398848350/work imageio==2.34.2 imgaug==0.4.0 itsdangerous==2.2.0 Jinja2==3.1.4 joblib==1.4.2 kiwisolver==1.4.5 lazy_loader==0.4 lmdb==1.5.1 lxml==5.2.2 MarkupSafe==2.1.5 matplotlib==3.9.1 mkl-fft @ file:///croot/mkl_fft_1695058164594/work mkl-random @ file:///croot/mkl_random_1695059800811/work mkl-service==2.4.0 more-itertools==10.3.0 networkx==3.3 numpy @ file:///croot/numpy_and_numpy_base_1708638617955/work/dist/numpy-1.26.4-cp311-cp311-linux_x86_64.whl#sha256=5f96f274d410a1682519282ae769c877d32fdbf171aa8badec7bf5e1d3a1748a opencv-contrib-python==4.6.0.66 opencv-python==4.6.0.66 opencv-python-headless==4.10.0.84 openpyxl==3.1.5 opt-einsum @ file:///tmp/build/80754af9/opt_einsum_1621500238896/work packaging==24.1 paddleclas==2.5.2 paddleocr==2.8.0 paddlepaddle==2.5.2 pandas==2.2.2 pdf2docx==0.5.8 pillow @ file:///croot/pillow_1714398848491/work premailer==3.10.0 prettytable==3.10.0 protobuf==4.25.3 psutil==6.0.0 pyclipper==1.3.0.post5 pycryptodome==3.20.0 PyMuPDF==1.24.7 PyMuPDFb==1.24.6 pyparsing==3.1.2 python-dateutil==2.9.0.post0 python-docx==1.1.2 pytz==2024.1 PyYAML==6.0.1 rapidfuzz==3.9.4 rarfile==4.2 requests==2.32.3 scikit-image==0.24.0 scikit-learn==1.5.1 scipy==1.14.0 shapely==2.0.4 six==1.16.0 sniffio @ file:///croot/sniffio_1705431295498/work soupsieve==2.5 termcolor==2.4.0 threadpoolctl==3.5.0 tifffile==2024.7.2 tqdm==4.66.4 typing_extensions==4.12.2 tzdata==2024.1 ujson==5.10.0 urllib3==2.2.2 visualdl==2.5.3 wcwidth==0.2.13 Werkzeug==3.0.3

🌰 Minimal Reproducible Example (最小可复现问题的Demo)

paddleocr --image_dir=./2021-D-18930FinalReport.pdf --layout_model_dir=/home/ccic/PaddleOCR-main/picodet_lcnet_x1_0_layout --layout_dict_path=/home/ccic/PaddleOCR-main/hjb_dict.txt --type=structure --recovery=true --lang='ch' --output=./hjb0818/

SWHL commented 2 months ago

所给信息不能复现你的问题。 建议:替换官方模型,尝试同样PDF,看是否报错。

freezehe commented 2 months ago

所给信息不能复现你的问题。 建议:替换官方模型,尝试同样PDF,看是否报错。

官方模型不会报错,我是自己训练的模型,官方模型不能满足我的需求

freezehe commented 2 months ago

我再补充一下,我提供我在百度aistudio训练的导出的模型,还有dict文件给你,还上传不了模型的tar包

SWHL commented 2 months ago

官方给的模型不报错,自己训练的报错。猜不出来是哪里问题了。 自己训练的模型单独推理报错吗?

freezehe commented 2 months ago

官方给的模型不报错,自己训练的报错。猜不出来是哪里问题了。 自己训练的模型单独推理报错吗?

能否有什么其他联系方式可以直接进行交流吗?这种回复太慢了,我们现在项目在使用你们这个框架,遇到瓶颈了,烦请官方人员能够帮忙协助一下,谢谢!如果需要付费答疑也是可以的,可以加一下我的vx 18817326785.麻烦了,这个问题卡了很久了,导致项目卡住了

GreatV commented 2 months ago

@freezehe,paddleocr目前是社区成员在维护,只能提供有限的支持。如果想获得官方支持可以考虑使用paddlex来完成,paddlex目前是官方人员积极维护、支持的状态。

freezehe commented 2 months ago

@freezehe,paddleocr目前是社区成员在维护,只能提供有限的支持。如果想获得官方支持可以考虑使用paddlex来完成,paddlex目前是官方人员积极维护、支持的状态。

但是我们这个项目目前是采用paddleocr的

changdazhou commented 2 months ago

@freezehe 该问题为已知问题,系PaddlePaddle版本升级和PicoDet_layout的特殊模型结构导致,具体原因参考issue:https://github.com/PaddlePaddle/PaddleOCR/discussions/13490 可以参考如下流程得到可用的静态图权重:

  1. 安装PaddleDetection
  2. 准备好星河零代码产线下载的动态图权重,即best_model.pdparams
  3. 修改一下configs/picodet/legacy_model/application/layout_analysis/picodet_lcnet_x1_0_layout.yml的配置,主要是类别数以及数据集和你的模型对齐,不然可能导出失败或者导出类别标签不对,也可以直接使用星河零代码产线上的那个Config文件,注意一定要在导出时加载自己实际训练的数据集
  4. 使用PaddleDetection重新导出静态图,命令:python tools/export_model.py -c configs/picodet/legacy_model/application/layout_analysis/picodet_lcnet_x1_0_layout.yml -o weights=path/to/best_model.pdparams export.benchmark=True
  5. 对产出的静态图权重重新命名,将model.xxx全部改为inference.xxx
  6. 加载重新导出的静态图即可
changdazhou commented 2 months ago

最好使用PaddlePaddle2.6.1版本进行导出,因为和星河零代码产线的框架版本对齐

freezehe commented 2 months ago

最好使用PaddlePaddle2.6.1版本进行导出,因为和星河零代码产线的框架版本对齐

感谢你的耐心回答,我加了export.benchmark=True 这个配置以后重新导出以后,是可以使用的,但是版面恢复的docx文件很差,针对你的这6点回答,我有几个疑问,1.星河零代码产线是什么?这个不太清楚。2.“注意一定要在导出时加载自己实际训练的数据集”这句话不是很理解,这个在导出的时候怎么指定呢?

freezehe commented 2 months ago

最好使用PaddlePaddle2.6.1版本进行导出,因为和星河零代码产线的框架版本对齐

感谢你的耐心回答,我加了export.benchmark=True 这个配置以后重新导出以后,是可以使用的,但是版面恢复的docx文件很差,针对你的这6点回答,我有几个疑问,1.星河零代码产线是什么?这个不太清楚。2.“注意一定要在导出时加载自己实际训练的数据集”这句话不是很理解,这个在导出的时候怎么指定呢?

@changdazhou

changdazhou commented 2 months ago

@freezehe 星河零代码产线就是AIStudio平台上的PaddleX,导出模型使用的配置文件中的数据集信息,应该使用你训练的数据集信息,因为在导出的时候会一并读取你数据集中的标签信息,如果不加载你自己训练的数据集,会使用默认的coco标签,显然这样导出的结果是会有问题的,另外想问下为什么不使用PaddleX最新的高性能推理功能呢

freezehe commented 2 months ago

@freezehe 星河零代码产线就是AIStudio平台上的PaddleX,导出模型使用的配置文件中的数据集信息,应该使用你训练的数据集信息,因为在导出的时候会一并读取你数据集中的标签信息,如果不加载你自己训练的数据集,会使用默认的coco标签,显然这样导出的结果是会有问题的,另外想问下为什么不使用PaddleX最新的高性能推理功能呢

@changdazhou 我刚才看了一下paddlex,不知道是我没找到还是没有符合我们项目的需求。我们项目的需求是:通过输入一个pdf文件,通过版面恢复来处理的,会用到最新的det、rec、table模型,版面分析模型是我们自己标注图片训练出来的,AP值是74.7,这个是我们的项目需求,不知道paddlex是否支持我们这个需求?

changdazhou commented 2 months ago

@freezehe 星河零代码产线的表格识别产线了解一下哈

freezehe commented 2 months ago

@freezehe 星河零代码产线的表格识别产线了解一下哈

@changdazhou 你好,想再请教一下,我标注过的版面分析模型,训练出来模型AP值是79分,然后模型导出后也进行过单张图片的推理,效果也还可以。但是,我整合到版面恢复命令的时候:官方提供的这个命令 %cd /home/aistudio/PaddleOCR !paddleocr --image_dir=/home/aistudio/PaddleOCR/1.pdf \ --layout_model_dir=/home/aistudio/PaddleDetection/output_inference/ccic/picodet_lcnet_x1_0_layout \ --layout_dict_path=/home/aistudio/PaddleOCR/hjb_dict.txt \ --type=structure \ --recovery=true \ --lang='ch' \ --output=/home/aistudio/PaddleOCR/hjb0819_test/

执行完这个命令生成的docx文件,版面恢复效果很差,请问一下出现这样问题,一般问题会是在哪里?我们没有头绪,版面恢复会使用4个模型,最新的det+rec+table 这三个模型我们没有动,使用官方下载的,只是可插拔式的使用了自己的版面分析模型,项目又卡在这里了,还希望有空能帮忙回复一下。我们训练集是500张,验证集100张,模型AP值是0.79

changdazhou commented 1 month ago

建议使用PaddleX官方部署包推理试试,看起来是训练数据太少了