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]

通常并不是代码问题,而是环境问题。

重点检查:

  1. PaddleOCR与PaddlePaddle版本是否匹配
  2. 模型缓存是否损坏
  3. OCR版本与模型版本是否对应
  4. 是否存在旧环境残留

对于老项目,最推荐的方案:

paddleocr 2.7.3

paddlepaddle 2.6.2

删除 .paddleocr 重新下载模型

基本可以解决绝大多数此类报错。

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐