Мне нужно вручную добавить сверточный слой, так как у меня есть специальная операция, которая не поддерживается парсером Tensorflow. Какого порядка весов TensorRT ожидает читать из файла .wts? Например, тензор веса conv2d Tensorflow обычно имеет порядок [H, W, IN_CHANNEL, OUT_CHANNEL]. Я знаю, что TensorRT ожидает, что входные данные будут в порядке NCHW, но нужно ли менять порядок весов, когда он записывается в файл .wts? Если да, то какой заказ получит TensorRT? [IN_CHANNEL, OUT_CHANNEL, H, W]?
Порядок весов TensorRT по сравнению с Tensorflow [H, W, IN_C, OUT_C]
Ответы (1)
Краткое резюме ... если вы спрашиваете о порядке сортировки весов, вас также может беспокоить порядок входных данных. Ответ, опубликованный здесь, вероятно, даст вам большую часть того, что вам нужно по обоим пунктам: Запустите Tensorflow с NVIDIA TensorRT Inference Engine
Дополнительные сведения ... Недавно я решил эти проблемы, используя специальные инструменты, и вот соответствующие факторы, с которыми я столкнулся:
порядок данных входного изображения, который равен NHWC для тензорного потока и NCHW для тензорного потока; а внутри канала изображения - порядок цветов, например RGB против BGR
веса сортировать заказы по слоям
для двумерной свертки тензорный поток использует RSCK ([filter_height, filter_width, input_depth, output_depth]), а tensorrt использует KCRS.
для плотного слоя, следующего за двумерным слоем свертки или объединения, отрегулируйте порядок сортировки весов для другой последовательности сглаживания, эффективно преобразовав RSCK для тензорного потока в KCRS для тензорного, где теперь R и S относятся ко всей высоте и ширине входного слоя, соответственно, C - это input_depth, как и раньше, а теперь глубина вывода K - это количество нейронов плотного слоя
для плотного слоя, следующего за плотным слоем, преобразовать CK в порядок KC
(примечание: этот ответ предполагает, что вы не используете группы ни в одной из сверток)