Ошибка компиляции модели с помощью Vitis-AI: значение данных выходит за пределы диапазона

#tensorflow #machine-learning #keras #xilinx #vitis-ai

#tensorflow #машинное обучение #keras #xilinx #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 должна быть скомпилирована с использованием Vitis-AI Xilinx для запуска на 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.

Ответ №1:

В руководстве Vitis AI упоминается: «В настоящее время vai_c_tensorflow2 поддерживает только функциональные API Keras. Последовательные API-интерфейсы будут поддерживаться в будущих выпусках «. руководство пользователя v1-3 страница 86

Поэтому, если вы используете tf2, начните с переписывания вашей модели в функциональный формат. функциональный api

Если ошибка сохраняется, также посмотрите на слои, которые вы используете, если все они поддерживаются, есть различия между поддерживаемыми слоями между tf1 и tf2.

Ответ №2:

ВХОДНЫЕ ДАННЫЕ ДЛЯ МОДЕЛИ 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) )) 
  

Я надеюсь, что этот ответ кому-то поможет.