PaddleOCR报错:OneDnnContext does not have the input Filter 解决方案汇总
·
PaddleOCR报错:OneDnnContext does not have the input Filter 解决方案汇总
问题现象
在使用 PaddleOCR 进行文字识别时,程序启动后出现如下错误:
(NotFound) OneDnnContext does not have the input Filter.
[Hint: Expected it != inputs_name_.end(),
but received it == inputs_name_.end().]
(at ..\paddle\phi\backends\onednn\onednn_context.cc:345)
[operator < fused_conv2d > error]
完整错误类似:
RuntimeError:
(NotFound) OneDnnContext does not have the input Filter.
[Hint: Expected it != inputs_name_.end(),
but received it == inputs_name_.end().]
(at ..\paddle\phi\backends\onednn\onednn_context.cc:345)
[operator < fused_conv2d > error]
问题原因分析
该错误本质上是:
PaddleOCR
PaddlePaddle
模型文件
三者之间存在版本不兼容问题。
错误发生在:
fused_conv2d
卷积算子执行过程中。
通常有以下几种原因。
原因1:PaddleOCR 与 PaddlePaddle 版本不匹配
这是最常见的原因。
例如当前环境:
paddleocr 2.7.3
paddlepaddle 3.3.1
看起来都安装成功了,但实际上:
PaddleOCR 2.7.3
发布时间:2023年
PaddlePaddle 3.3.1
发布时间:2026年
两者跨越多个大版本。
导致:
推理图结构发生变化
↓
模型参数无法正确解析
↓
fused_conv2d找不到Filter
↓
程序报错
查看当前版本
执行:
pip list | findstr paddle
输出类似:
paddleocr 2.7.3
paddlepaddle 3.3.1
如果版本跨度过大,建议统一版本。
原因2:模型缓存损坏
PaddleOCR会自动下载模型。
默认位置:
C:\Users\用户名\.paddleocr
例如:
C:\Users\gv\.paddleocr
模型下载过程中如果:
- 网络中断
- 强制关闭程序
- 版本升级
都可能导致模型损坏。
此时会出现:
fused_conv2d error
或者:
load parameter failed
等问题。
原因3:OCR版本与模型版本不匹配
例如:
PaddleOCR 2.7.3
却下载了:
PP-OCRv4
模型。
日志中经常可以看到:
ch_PP-OCRv4_det_infer
ch_PP-OCRv4_rec_infer
而:
OCR 2.7.x
主要对应:
PP-OCRv3
此时容易出现:
OneDnnContext does not have the input Filter
等算子兼容问题。
解决方案一:降级 PaddlePaddle(推荐)
如果项目是老项目,推荐保持:
paddleocr 2.7.3
不变。
仅降级:
paddlepaddle
卸载当前版本
pip uninstall paddlepaddle -y
安装兼容版本
推荐:
pip install paddlepaddle==2.6.2
或者:
pip install paddlepaddle==2.5.2
验证版本
pip list | findstr paddle
输出:
paddleocr 2.7.3
paddlepaddle 2.6.2
即可。
解决方案二:升级 PaddleOCR
如果是新项目。
可以保留:
paddlepaddle 3.3.1
升级 OCR:
pip uninstall paddleocr -y
pip install paddleocr
或者:
pip install paddleocr==3.0.0
但需要注意:
PaddleOCR 3.x
接口发生了较大变化。
例如:
PaddleOCR(
use_angle_cls=True,
show_log=False
)
中的:
show_log
参数已经不再支持。
会出现:
ValueError:
Unknown argument: show_log
因此老项目不推荐直接升级。
解决方案三:删除模型缓存重新下载
删除目录:
C:\Users\用户名\.paddleocr
例如:
C:\Users\gv\.paddleocr
或者命令行:
rmdir /s /q %USERPROFILE%\.paddleocr
重新启动程序。
PaddleOCR会自动下载模型:
ch_PP-OCRv4_det_infer
ch_PP-OCRv4_rec_infer
ch_ppocr_mobile_v2.0_cls_infer
重新生成干净缓存。
解决方案四:重新创建虚拟环境
如果经过多次安装:
numpy
opencv
paddleocr
paddlepaddle
环境已经混乱。
推荐直接重建。
创建新环境
conda create -n paddleocr python=3.10
激活:
conda activate paddleocr
安装:
pip install numpy==1.26.4
pip install paddlepaddle==2.6.2
pip install paddleocr==2.7.3
验证:
python -c "import paddle,paddleocr;print(paddle.__version__)"
正常输出即可。
推荐稳定组合
对于工业AOI项目、OCR识别项目,推荐如下版本:
Python 3.10
numpy 1.26.4
opencv-python 4.10.x
paddleocr 2.7.3
paddlepaddle 2.6.2
该组合经过大量项目验证,兼容性最好。
总结
出现:
OneDnnContext does not have the input Filter
[operator < fused_conv2d > error]
通常并不是代码问题,而是环境问题。
重点检查:
- PaddleOCR与PaddlePaddle版本是否匹配
- 模型缓存是否损坏
- OCR版本与模型版本是否对应
- 是否存在旧环境残留
对于老项目,最推荐的方案:
paddleocr 2.7.3
paddlepaddle 2.6.2
删除 .paddleocr 重新下载模型
基本可以解决绝大多数此类报错。
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐
所有评论(0)