TensorFlow对象检测-1.0和2.0:训练,导出,优化(TensorRT),推断(Jetson Nano)

本文详细介绍了使用TensorFlow 1.0和2.0在自定义数据集上进行物体检测训练、模型导出、TensorRT优化以及在Jetson Nano设备上的推理过程。文章涵盖了从数据准备、配置更新到模型训练、推理优化的每一步,并特别强调了不同版本TensorFlow之间的差异和在Jetson Nano上部署的注意事项。
摘要由CSDN通过智能技术生成

作者|Abhishek 编译|Flin 来源|analyticsvidhya

第1部分

从在自定义数据集中训练检测器到使用TensorFlow 1.15在Jetson纳米板或云上进行推理的详细步骤

完整代码可在GitHub上获得

一些常见的困难包括
  • 使用对象检测API库查找兼容的TensorFlow(和相关的cuda)版本

  • 将自定义数据转换为tf记录格式

  • 混淆了tf1.0和tf2.0的流程

  • 手动更新模型配置文件以进行训练

  • 运行训练过程并解决配置文件中的问题

  • 将模型从一种格式导出到另一种格式以进行推理

  • 混合了不同的模型格式类型——检查点、冻结图、saved_model (" .pb ")、tensorRT推断图等等

  • 在训练模型上运行推理

  • 将训练后的模型转换为量化格式,以便部署在诸如Jetson Nano的板上

  • 构建引擎和部署引擎之间的tensorRT版本和cuda计算能力不匹配

这个清单永无止境……

为克服上述一些问题,我们在Monk Object Detection Toolkit中的Tensorflow 对象检测 API的两个版本上添加了一个低代码的pythonic包装器

使用它,开发人员和研究人员可以轻松地

  • 使用TF推送定制训练数据集

  • 使用pythonic API配置所有参数的模型文件

  • 根据使用的网络和cuda版本的可用性,在TF1.0和TF2.0之间进行选择

  • 根据自己的数据集训练、导出、优化、推断

  • 使用TensorRT优化模型并导出到云服务器或Jetson Nano等嵌入式板

传统流程概述

下面提到的是使用TF训练和部署定制探测器的过程。在描述过程流程的同时,还强调了一个人在使一切正常工作时所面临的问题;还提到了tf1.0和2.0版本的对象检测库的区别

过程A:TensorFlow与目标检测装置的兼容性

  • 要使用对象检测 2.0,请使用TensorFlow 2.3.0。版本2.0.0和2.1.0通常会导致“ tensorflow_core.keras.utils”. 2.2.0版在使用“CollectiveAllReduceExtended”模块进行训练时会导致错误。

  • 使用TensorFlow 2.3.0时,需要Cuda 10.1。

  • 要使用对象检测 1.0,请使用TensorFlow版本1.15.0或1.15.2。

  • 使用TensorFlow 1.15时,需要Cuda 10.0。

  • TFLite转换仍然存在某些错误(将在以后的博客中讨论)

过程B:设置数据集

  • TensorFlow提供数据集工具以将数据转换为可接受的TF记录格式

  • 但是这些示例仅适用于最常用的数据集,例如COCO,Pascal VOC,OpenImages,Pets-Dataset等。用户需要根据选择的示例笔记本,按照COCO、VOC、OID等格式重新格式化和排列数据集

  • 另一种方法是更新示例代码以便提取自定义数据集,这本身就是一个艰难的过程

  • 为了使自定义数据集的加载变得容易,我们修改了示例并添加了进一步的解析器以支持多种数据注释类型,并将其直接转换为TF-Records。

过程C:更新配置并开始训练过程

  • Monk的对象检测API 1.0包装器支持大约23个模型,对象检测API 2.0支持大约26个模型

  • 一旦选择了模型并下载了权重,就必须手动更新配置文件。

  • API 1.0和2.0的配置文件格式不同,需要以稍微不同的方式进行手动更改

  • tf1.0中的某些配置存在基本特征提取参数的问题。

  • 在对配置文件应用更新后,整个工作区必须按照TF Obj github site站点上的教程指定的方式进行安排。

  • 重新安排后,可以开始训练。同样,针对TF 1.0和TF 2.0模型的训练是不同的。

  • 通过“Monk对象检测”,我们添加了pythonic函数来更新配置文件,并且不再需要为工作空间使用严格的文件夹结构。两种TF版本的训练过程几乎都与Monk的包装程序相同。

过程D:导出经过训练的模型以进行推理

  • 两种对象检测API均以检查点 (“.ckpt”) 格式提供训练有素的模型。

  • 为了在TF 1.0中进行推理,通常使用冻结图形格式。

  • 为了在TF 2.0中进行推理,通常使用保存的模型格式。

  • 特别是对于初学者来说,转换模型的过程在两个API中都不相同,通常很难弄清楚

  • 为了简化流程,我们添加了解析器,以使外部包装器格式保持相同,这意味着我们能同时使用TF 1.0 API和TF 2.0 API。

过程E:TensorRT推论的模型优化

  • 导出的模型最终使用TensorRT转换为优化版本。

  • 支持的优化包括浮点32位和16位(FP32,FP16)和整数8位(INT8)量化。

  • 从tf1.0和tf2.0转换导出模型的量化过程是完全不同的。

  • TensorRT的版本存在其他问题。这意味着,使用TensorRT版本5.1.5优化的模型无法在使用TensorRT版本5.1.6的部署计算机上运行。一个非常具体的问题是使用TensorFlow 1.15.0的对象检测1.0。这个TensorFlow带有tensorRT 5.1.5,而Jetpacks中没有这样的版本。

  • TensorRT的另一个问题是cuda计算功能。意思是,除非采取适当措施,否则在具有7.0版计算能力的GPU(V100 Nvidia GPU)上优化的模型不能在具有5.3版计算能力的GPU(Jetson纳米板)上运行。

  • 此博客通过训练和优化对象检测模型澄清了所有疑问

过程F:在Jetson Nano板上设置所有东西
  • 由于两个API都需要不同的TensorFlow版本,因此安装过程有所不同,Jetpack版本,CUDA版本以及TF 1.0在涉及tensorRT版本时都需要进一步注意。

让我们从版本1.0开始,每次使用一个对象检测API模块。

TF对象检测API 1.0

过程A:在开发机器上安装

将要安装的库

  • 先决条件:numpy,scipy,pandas,pillow,OpenCV-python

  • 带TensorRT 5.1.5的TensorFlow-GPU V1.15.0;如果在Nano板上部署则不需要

  • 带TensorRT 6.0.1的TensorFlow-GPU V1.15.2;如果在Nano板上进行部署,则需要

  • 使用Monk Object Detection Toolkit的TF 对象检测 API 1.0

(确保CUDA 10.0和CUDNN 7随系统一起安装了NVidia驱动程序)

当模型要部署在Jetson Nano板上时,请按照以下说明配置你的开发(训练)机器

安装必备的Python库

$ git clone https://github.com/Tessellate-Imaging/Monk_Object_Detection.git

$ cd Monk_Object_Detection/12_tf_obj_1/installation

$ chmod +x install_cuda10_tensorrt6_part1.sh && ./install_cuda10_tensorrt6_part1.sh

安装TensorRT 6.0.1

# Go to https://developer.nvidia.com/tensorrt
# Download 
# - nv-tensorrt-repo-ubuntu1804-cuda10.0-trt6.0.1.5-ga-20190913_1-1_amd64.deb (For Ubuntu18.04)
# - nv-tensorrt-repo-ubuntu1604-cuda10.0-trt6.0.1.5-ga-20190913_1-1_amd64.deb (For Ubuntu16.04)

# Run the following commands to install trt (in a terminal)

$ sudo dpkg -i nv-tensorrt-repo-ubuntu1804-cuda10.0-trt6.0.1.5-ga-20190913_1-1_amd64.deb
$ sudo apt-key add <key value will be mentioned as the output of previous command>
$ sudo apt-get update
$ sudo apt-get install tensorrt
$ sudo apt-get install uff-converter-tf
$ sudo apt-get install python3-libnvinfer-dev

安装Bazel 0.26.1并从GitHub克隆TensorFlow

# Install bazel version 0.26.1
# Download bazel deb package from https://github.com/bazelbuild/bazel/releases/tag/0.26.1

$ sudo dpkg -i bazel_0.26.1-linux-x86_64.deb

# Clone Tensorflow and switch to tensorflow 1.15.2

$ git clone https://github.com/tensorflow/tensorflow.git
$ cd tensorflow
$ git checkout v1.15.2

配置TensorFlow


                
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值