ppq入门常见问题解答

**创作不易,真心希望您能留下个赞,也是对我的一点鼓励~**

**

写在前面:感谢商汤张志大佬在群里的问题回复!

**
问题一:

RuntimeError: Error happens when dealing with operation Identity_0(TargetPlatform.SHAPE_OR_INDEX) - inputs:['onnx::Resize_533_0'], outputs:['onnx::Resize_534']`

这个问题是我在量化yolov7的时候出现的算子不支持,其中这个Identity算子在ppq中不支持CPU(大佬说是他们没写),然后大佬给了回复:
(1)把下面代码段复制

def Identity_forward(op: Operation, values: List[torch.Tensor], ctx: TorchBackendContext = None, **kwargs) -> torch.Tensor:
    ASSERT_NUM_OF_INPUT(op=op, values=values, min_num_of_input=1, max_num_of_input=1)
    return values[0]

(2)找到下面的文件,并将上面的代码放进去

ppq/executor/op/torch/shape.py

(3)然后在下面注册

SOI_BACKEND_TABLE = {
    
    
 
    'Identity': Identity_forward
}

问题解决!

问题二:

上面的报错:RuntimeError: shape '[1, 3, 85, 80, 80]' is invalid for input of size 199920
最后的报错:RuntimeError: Error happens when dealing with operation Reshape_298(TargetPlatform.UNSPECIFIED) - inputs:['onnx::Reshape_491', 'onnx::Reshape_540'], outputs:['onnx::Transpose_503']

这个问题是因为你的随机输入尺寸的问题,例子中给的是224的输入,而自己的模型导出的640的,并且没有设置动态输入,所以要将输入尺寸改为640,BUG解决!

问题三:

enable_cuda_kernel

解决二又出现了cuda_kernel的问题,按照ppq给出的提示(害怕我们看不懂,特意用红字提醒),删除了enable_cuda_kernel这个语句,量化成功进行

问题四:
在你解决第一个错误的时候,也许会像我一样把ppq uninstall,随后来了一个恶心的,鄙人真是被折磨死(还是自己太菜了)
No module named 'ppq.api'
这个错误很基础吧,导包失败,按照别人的博客说的方法找路径:

import sys
sys.path.append('../ppq')

然后系统就卡在那里了,也不报错,也不执行~~然后尝试其他各种方法,被反复折磨T-T
无奈弄了三天还是没搞出来,求助大佬:

你把ppq.csrc.build文件夹清空一下

找到文件夹,把其中的lock文件给删除,理论解决!!!
但是我在做的时候,除了把文件删除之外,还把自己项目名字改成了ppl,也就是尽量不要跟ppq重名,免得歧义。
顺利运行!!!!!!!!!!!!!!!!!!!!!T-T

以上是我的PPQ入门插曲,希望能帮到你

猜你喜欢

转载自blog.csdn.net/KD_NO_1/article/details/126350251
今日推荐