使用Vitis AI编译模型时出错:数据值超出范围



我正在构建一个简单的自定义Keras模型,如下所示:

model = Sequential()
model.add(Conv2D(16, (16, 1), activation='relu', input_shape=(300,2,1) ))   
model.add(Dropout(0.1))
model.add(Conv2D(32, (16, 1), activation='relu'))                               
model.add(Dropout(0.2))
model.add(Flatten())
model.add(Dense(32, activation='relu'))
model.add(Dropout(0.5))
model.add(Dense(3, activation='softmax'))

Keras模型需要使用Xilinx的Vitis AI进行编译,才能在FPGA上运行。我们正在按照Xilinx的Vitis AI教程中概述的步骤编译模型。

然而,我们在编译阶段遇到了以下错误:

[VAI_C-BACKEND][Check Failed: (kernel_h - stride_h) <= 3 * pixel_parallel * stride_h][/home/xbuild/conda-bld/dnnc_1592904456005/work/submodules/asicv2com/src/Operator/OperatorConv.cpp:53][DATA_OUTRANGE][Data value is out of range!]

关于这个错误信息可能意味着什么,有什么想法吗?甚至,我们如何获得更多的调试信息?

我们以前已经在python环境中使用该模型成功地训练和运行了推理。

Vitis AI手册提到:"目前,vai_csorflow2只支持Keras功能API。顺序API将在将来的版本中支持"手册v1-3第86页

因此,如果您正在使用tf2,请从将模型重写为函数格式开始。功能api

如果错误仍然存在,请查看您正在使用的层,如果它们都受支持,则tf1和tf2之间受支持的层之间存在差异。

CNN模型的输入对于VITIS AI来说需要是方形的。上面问题中提出的模型没有任何错误或不支持的地方。

如果输入图像不是正方形的,编译步骤将失败,如下所示:

[VAI_C-BACKEND][Check Failed: (kernel_h - stride_h) <= 3 * pixel_parallel * stride_h][/home/xbuild/conda-bld/dnnc_1592904456005/work/submodules/asicv2com/src/Operator/OperatorConv.cpp:53][DATA_OUTRANGE][Data value is out of range!]

如果输入不是正方形,则必须对其进行填充以形成正方形。

padding = int(input_shape[0] - input_shape[1])
model.add(Conv2D(16, (16, 1), activation='relu', input_shape=(300,2+padding,1) )) 

我希望这个答案能帮助到别人。

最新更新