【NVDLA】错误:Pooling层feature出现重复

遇到一个挺奇怪的问题,希望对于NVDLA比较有经验的朋友能提供帮助。

我目前做的是在NVDLA上运行YOLO Tiny v1(很简单的CNN目标识别算法,Caffe的prototxt在这里:https://raw.githubusercontent.com/xingwangsfu/caffe-yolo/master/prototxt/yolo_tiny_deploy.prototxt UltraScale+ MPSoC ZCU102。然后就遇到了一个很奇怪的bug——在NVDLA上最前面的4层(conv1, bn1, scale1, relu1) 都能正确运行,但是到了第5层pool1,每一个feature map里面居然出现了两个同样的pattern,能看到同一张图片被pool了两次,所以pool1之后的层自然就都是错的了。可以通过以下两张图片很明显得看出来:第一张是用Python运行的Caffe模型在pool1层的结果,然后是NVDLA上运行的结果。

img

img

可以看到NVDLA上的每一个feature map和Caffe相比都有一个重复,大概是从中间偏右的地方开始,然后到了最右边后又从左边开始。可以和原图做个对比更容易看出来:

img

在用Compiler根据.caffemodel,.prototxt和calib table生成NVDLA支持的loadable之前,我已经验证了Caffe和用TensorRT量化成int8之后的模型是正确的,所以看起来只能是生成的loadable或者是硬件的配置有问题。而且我已经试了网上一个成功例子的硬件配置: https://github.com/SCLUO/ITRI-OpenDLA/blob/master/FPGA_RTL_nvsmall64/RTL_nv_small_07/src/project.vh,但还是会出现这个问题。另外说一下,我目前用的是github上默认的nv_small配置,并且运行和YOLO原理差不多的ResNet20,ResNet56都没有问题。YOLO唯一比较不同的地方就是输入图像的分辨率,YOLO是448x448x3,而ResNet是32x32x3。我现在一点思路都没有,希望比较懂NVDLA的朋友能提供一点帮助,真的很想知道出现这个bug的原因是什么。非常感谢。