Работает Deeplab v3+ с тензорным

Я пытаюсь оптимизировать модель Deeplab v3+, используя tennorsRT, и я получаю следующие ошибки:

    UFF Version 0.5.5
=== Automatically deduced input nodes ===
[name: "ImageTensor"
op: "Placeholder"
attr {
  key: "_output_shapes"
  value {
    list {
      shape {
        dim {
          size: 1
        }
        dim {
          size: -1
        }
        dim {
          size: -1
        }
        dim {
          size: 3
        }
      }
    }
  }
}
attr {
  key: "dtype"
  value {
    type: DT_UINT8
  }
}
attr {
  key: "shape"
  value {
    shape {
      dim {
        size: 1
      }
      dim {
        size: -1
      }
      dim {
        size: -1
      }
      dim {
        size: 3
      }
    }
  }
}
]
=========================================

=== Automatically deduced output nodes ===
[name: "Squeeze_1"
op: "Squeeze"
input: "resize_images/ResizeNearestNeighbor"
attr {
  key: "T"
  value {
    type: DT_INT64
  }
}
attr {
  key: "_output_shapes"
  value {
    list {
      shape {
        dim {
          size: 1
        }
        dim {
          size: -1
        }
        dim {
          size: -1
        }
      }
    }
  }
}
attr {
  key: "squeeze_dims"
  value {
    list {
      i: 3
    }
  }
}
]
==========================================

Using output node Squeeze_1
Converting to UFF graph
Warning: No conversion function registered for layer: ResizeNearestNeighbor yet.
Converting resize_images/ResizeNearestNeighbor as custom op: ResizeNearestNeighbor
Warning: No conversion function registered for layer: ExpandDims yet.
Converting ExpandDims_1 as custom op: ExpandDims
Warning: No conversion function registered for layer: Slice yet.
Converting Slice as custom op: Slice
Warning: No conversion function registered for layer: ArgMax yet.
Converting ArgMax as custom op: ArgMax
Warning: No conversion function registered for layer: ResizeBilinear yet.
Converting ResizeBilinear_2 as custom op: ResizeBilinear
Warning: No conversion function registered for layer: ResizeBilinear yet.
Converting ResizeBilinear_1 as custom op: ResizeBilinear
Traceback (most recent call last):
  File "c:\users\iariav\anaconda3\envs\tensorflow\lib\runpy.py", line 193, in _run_module_as_main
    "__main__", mod_spec)
  File "c:\users\iariav\anaconda3\envs\tensorflow\lib\runpy.py", line 85, in _run_code
    exec(code, run_globals)
  File "C:\Users\iariav\Anaconda3\envs\tensorflow\Scripts\convert-to-uff.exe\__main__.py", line 9, in <module>
  File "c:\users\iariav\anaconda3\envs\tensorflow\lib\site-packages\uff\bin\convert_to_uff.py", line 89, in main
    debug_mode=args.debug
  File "c:\users\iariav\anaconda3\envs\tensorflow\lib\site-packages\uff\converters\tensorflow\conversion_helpers.py", line 187, in from_tensorflow_frozen_model
    return from_tensorflow(graphdef, output_nodes, preprocessor, **kwargs)
  File "c:\users\iariav\anaconda3\envs\tensorflow\lib\site-packages\uff\converters\tensorflow\conversion_helpers.py", line 157, in from_tensorflow
    debug_mode=debug_mode)
  File "c:\users\iariav\anaconda3\envs\tensorflow\lib\site-packages\uff\converters\tensorflow\converter.py", line 94, in convert_tf2uff_graph
    uff_graph, input_replacements, debug_mode=debug_mode)
  File "c:\users\iariav\anaconda3\envs\tensorflow\lib\site-packages\uff\converters\tensorflow\converter.py", line 72, in convert_tf2uff_node
    inp_node = tf_nodes[inp_name]
KeyError: 'logits/semantic/biases/read'

насколько я понимаю, это вызвано некоторыми слоями, которые не поддерживаются конвертером uff? Кому-нибудь удалось преобразовать модель Deeplab в UFF? Я использую оригинальную модель Deeplabv3 + в тензорном потоке.

Спасибо

1 ответ

Я запускал модель deeplabv3+ на Jetson Nano с использованием TF-TRT. Согласно примечаниям к выпуску TensorRT

Прекращение поддержки Caffe Parser и UFF Parser. Мы прекращаем поддержку Caffe Parser и UFF Parser в TensorRT 7. Они будут протестированы и будут работать в следующем основном выпуске TensorRT 8, но мы планируем удалить поддержку в следующем основном выпуске. Спланируйте миграцию рабочего процесса на использование tf2onnx, keras2onnx или TensorFlow-TensorRT (TF-TRT) для развертывания.

Используя TF-TRT, я мог получить оптимизированный график TensorRT, и он успешно работал даже после повторного обучения для моего набора данных.

Кроме того, если некоторые операторы не поддерживаются в версии, которую вы используете, то для этих конкретных операторов выполнение откатывается к tenorflow. Это значит, что ошибок при выполнении не будет, только уровень оптимизации будет меньше.

Ссылки:

  1. Руководство пользователя TF-TRT: https://docs.nvidia.com/deeplearning/frameworks/tf-trt-user-guide/index.html
  2. Блог Tensorflow: https://blog.tensorflow.org/2019/06/high-performance-inference-with-TensorRT.html

Да, иногда заставить конкретную модель работать в TensorRT немного сложно из-за поддержки слоев. С новым TensorRT 5GA это поддерживаемые уровни (взяты из Руководства разработчика):

Tensorflow Поддерживаемые слои

Спросите вы можете увидеть, у вас есть несколько слоев, таких как ResizeNearestNeighbor, ResizeBilinear а также ArgMaxВаш лучший подход и то, что я в итоге сделал, это портирование сети до определенной точки и использование cpp API для создания нужных мне слоев. Проверьте IPluginV2 и IPluginCreator и посмотрите, сможете ли вы реализовать слои самостоятельно.

Я думаю, что со временем появится больше поддержки слоев, но я думаю, что если вы не можете ждать, попробуйте сами.

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