我发现我们可以通过多种方式优化 Tensorflow 模型。如果我错了,请告诉我。
1- 使用TF-TRT,由 tensorflow 开发的这个 API 开发人员将 TensoRT 集成到 Tensorflow,这个 API 称为:
从 tensorflow.python.compiler.tensorrt 导入 trt_convert 作为 trt
此 API 可应用于任何 tensorflow 模型(新旧版本模型)而不会出现任何转换错误,因为如果此 API 不支持任何新层,请不要将这些层用于 TensorRT 引擎,这些层将保留用于 Tensorflow 引擎和在张量流上运行。对?
2- 使用TensorRT,这个 API 由 NVIDA 开发,独立于 Tenorflow 库(未集成到 Tensorflow),这个 API 称为:
将 tensorrt 导入为 trt
如果我们想使用这个 api,首先我们必须使用 uff-convertor 将 tensorflow 图转换为 UFF,然后将 UFF 图解析到这个 API。在这种情况下,如果 Tensorflow 图有不受支持的层,我们必须为这些层使用插件或自定义代码,对吗?
3-我不知道,当我们使用Tensorflow模型时,为什么我们使用UFF转换器然后使用TensorRT,我们可以直接使用TF-TRT API,对吗?如果是这样,您是否从这两种方法测试了 Tensorflow 优化模型以获得相同的性能?这种 UFF 转换器方法有什么优势?
我对上述两种情况有一些疑问:
4-我使用两种情况转换 ssd_mobilenet_v2,在情况 1 中,我的速度略有提高,但在情况 2 中,我取得了更多的进步,为什么?我的观点是,在案例 1 中,API 只考虑转换精度(FP32 到 FP16)并将可能的层合并在一起,但在案例 2 中,图形被 UFF 清理,例如删除任何冗余节点,如 Asserts 和标识然后转换为 tensorrt 图,对吗?
5- 当我们将训练好的模型文件(如.ckpt
and .meta
, ...)转换为冻结推理图(.pb file
)时,这些层不会从图中删除?只有损失状态和优化器状态,...被删除?