Как найти операцию, не поддерживаемую TensorRT

Когда я преобразовываю свою модель тензорного потока (сохраненную как файл.pb) в файл uff, журнал ошибок выглядит следующим образом:

Using output node final/lanenet_loss/instance_seg
Using output node final/lanenet_loss/binary_seg
Converting to UFF graph
Warning: No conversion function registered for layer: Slice yet.
Converting as custom op Slice final/lanenet_loss/Slice
name: "final/lanenet_loss/Slice"
op: "Slice"
input: "final/lanenet_loss/Shape_1"
input: "final/lanenet_loss/Slice/begin"
input: "final/lanenet_loss/Slice/size"
attr {
  key: "Index"
  value {
    type: DT_INT32
  }
}
attr {
  key: "T"
  value {
    type: DT_INT32
  }
}

Traceback (most recent call last):
  File "tfpb_to_uff.py", line 16, in <module>
    uff_model = uff.from_tensorflow(graphdef=output_graph_def, output_filename=output_path, output_nodes=["final/lanenet_loss/instance_seg", "final/lanenet_loss/binary_seg"], text=True)
  File "/home/dream/.local/lib/python3.5/site-packages/uff/converters/tensorflow/conversion_helpers.py", line 75, in from_tensorflow
    name="main")
  File "/home/dream/.local/lib/python3.5/site-packages/uff/converters/tensorflow/converter.py", line 64, in convert_tf2uff_graph
    uff_graph, input_replacements)
  File "/home/dream/.local/lib/python3.5/site-packages/uff/converters/tensorflow/converter.py", line 51, in convert_tf2uff_node
    op, name, tf_node, inputs, uff_graph, tf_nodes=tf_nodes)
  File "/home/dream/.local/lib/python3.5/site-packages/uff/converters/tensorflow/converter.py", line 28, in convert_layer
    fields = cls.parse_tf_attrs(tf_node.attr)
  File "/home/dream/.local/lib/python3.5/site-packages/uff/converters/tensorflow/converter.py", line 177, in parse_tf_attrs
    for key, val in attrs.items()}
  File "/home/dream/.local/lib/python3.5/site-packages/uff/converters/tensorflow/converter.py", line 177, in <dictcomp>
    for key, val in attrs.items()}
  File "/home/dream/.local/lib/python3.5/site-packages/uff/converters/tensorflow/converter.py", line 172, in parse_tf_attr_value
    return cls.convert_tf2uff_field(code, val)
  File "/home/dream/.local/lib/python3.5/site-packages/uff/converters/tensorflow/converter.py", line 146, in convert_tf2uff_field
    return TensorFlowToUFFConverter.convert_tf2numpy_dtype(val)
  File "/home/dream/.local/lib/python3.5/site-packages/uff/converters/tensorflow/converter.py", line 74, in convert_tf2numpy_dtype
    return np.dtype(dt[dtype])
TypeError: list indices must be integers or slices, not AttrValue

Это означает, что слой: "Slice" в настоящее время не поддерживается TensorRT. Поэтому я планирую изменить этот слой в моем коде. Однако я не могу найти слой "Slice" в своем коде, даже если я получаю информацию о "Slice" с помощью функции sess.graph.get_operation_by_name:

graph list name: "final/lanenet_loss/Slice"
op: "Slice"
input: "final/lanenet_loss/Shape_1"
input: "final/lanenet_loss/Slice/begin"
input: "final/lanenet_loss/Slice/size"
attr {
  key: "Index"
  value {
    type: DT_INT32
  }
}
attr {
  key: "T"
  value {
    type: DT_INT32
  }
}

Как найти слой "Slice" в строках кода, чтобы я мог изменить его с помощью пользовательского слоя TensorRT?

1 ответ

Поскольку вы анализируете Tensorflow, возможно, лучше посмотреть, какие слои поддерживает TensorRT. Начиная с TensorRT 4 поддерживаются следующие уровни:

  • Заполнитель
  • Const
  • Добавить, Sub, Mul, Div, Минимальное и Максимальное
  • BiasAdd
  • Отрицательный, Abs, Sqrt, Rsqrt, Pow, Exp и Log
  • FusedBatchNorm
  • ReLU, TanH, Сигмоид
  • SoftMax
  • Имею в виду
  • ConcatV2
  • Переформуйте
  • транспонировать
  • Conv2D
  • DepthwiseConv2dNative
  • ConvTranspose2D
  • MaxPool
  • AvgPool
  • Pad поддерживается, если за ним следует один из следующих слоев TensorFlow: Conv2D, DepthwiseConv2dNative, MaxPool и AvgPool

Из того, что я вижу в ваших журналах, вы пытаетесь развернуть LaneNet, это LaneNet этого документа?

Если это так, то, похоже, это вариант H-Net, я не читал об этом, но, согласно статье, архитектура следующая:

Архитектура LaneNet

Итак, я вижу Convs, Relus, Maxpool и Linear, все из которых поддерживаются, не знают об этом BN, возможно, проверьте это, чтобы увидеть, на какой уровень он ссылается, если его нет в списке поддерживаемых сетей, вы будете должны реализовать это с нуля. Удачи!

Другие вопросы по тегам