Я использую TensorRT 2.1
и хочу реализовать простой пользовательский слой. (Цель состоит в том, чтобы запустить Single Shot Detector
с помощью TensorRT
в системе встраивания.)
Для практики я хотел создать слой Inc
(просто добавив 1.0 к входным значениям тензора и сохранив размерность прежней).
Я реализую класс Inc
, следуя примеру class Reshape : public Iplugin
в sampleFasterRNN.cpp
. Я оставил все почти таким же, кроме getOutputDimensions()
, чтобы сохранить тот же размер. (это кажется прекрасным.)
Где я должен реализовать часть "добавление 1.0"? Думаю, это должно быть в "enqueue()". Итак, я попытался
int enqueue(int batchSize, const void*const *inputs, void** outputs, void*, cudaStream_t stream) override
{
# the below is from the Reshape class. seems to copy from input to output
CHECK(cudaMemcpyAsync(outputs[0], inputs[0], mCopySize * batchSize, cudaMemcpyDeviceToDevice, stream));
# add 1.0 to first ten values
float* foutputs = (float*) outputs[0];
int i; for (i = 0; i < 10; i++) foutputs[i] += 1.0;
return 0;
}
Однако эта часть приводит к ошибке «ошибка сегментации».
Мои вопросы:
- Где и как я могу реализовать некоторый расчет между вводом и выводом?
- Кто-нибудь может привести простой пример?