使用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,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) )) 

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

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...