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