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

Error compiling model with Vitis-AI : Data value is out of range

我正在构建一个简单的自定义 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's Vitis AI tutorials 概述的步骤编译模型。

但是,我们 运行 在编译阶段遇到以下错误:

[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_c_tensorflow2 仅支持 Keras 函数式 API。顺序 API 将是 未来版本支持。”手册 v1-3 第 86 页

因此,如果您使用的是 tf2,请首先将您的模型重写为函数格式。 functional api

如果错误仍然存​​在,请同时查看您正在使用的层是否都受支持 tf1 和 tf2 之间支持的层之间存在差异。

对于 VITIS AI,CNN 模型的输入需要是平方的。上述问题中提供的模型没有任何错误或不受支持的地方。

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

[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) )) 

我希望这个回答对某人有所帮助。