随着智慧城市、自动驾驶的快速落地,车辆的检测和识别应用场景非常广泛,如车牌识别、车流统计、车辆属性识别等。
近日,在英伟达x量子位发起的系列CV公开课第一期课程直播中,NVIDIA社区开发者经理何琨老师分享了如何利用TLT 3.0、DeepStream等工具低门槛、快速搭建一个车辆信息识别系统。
分享大纲如下:
· 车辆信息识别任务介绍
· NVIDIA DeepStream SDK简介及其使用
· NVIDIA Transfer Learning Toolkit介绍及其使用
· 实战演示:快速搭建车辆信息识别系统
· 下期直播报名
以下为分享内容整理:
大家好,我来自NVIDIA开发者社区,今天的分享内容是“快速搭建基于Python的车辆信息识别系统”。
今天的分享仍然以一个具体的项目来做实例,包含源码和部署流程,课后会把课程PPT、源码分享给大家(见文末),希望大家能够有所收获。
首先,通过这个动图说明我们今天“车辆信息识别”的任务,首先我们需要检测到车辆,然后检测到这辆车的车牌并识别;另外我们还需要识别这辆车的颜色、品牌、类型等。这就是我们今天课程的任务,我们可以将上述任务拆解为5个小任务:
1.检测到车辆
2.识别车类型
3.识别车品牌
4.检测到车牌
5.识别车牌号
我将分两部分演示这5个小任务。一部分是完成车辆检测,车牌检测与识别;另一部分是识别车辆品牌与车辆型号。
拿到这个任务,首先我们需要考虑采用什么样的数据集;其次在训练过程中还要考虑在什么框架下完成训练,如何对模型进行剪枝、优化;模型训练完成后,还需要考虑部署到哪里,比如服务器终端还是一些嵌入式产品。
首先,是数据的准备部分。NVIDIA提供的是一些美国车牌的视频,跟国内车牌有一些区别。大家在实际训练中,可以自行收集更合适的数据集。
其次,为快速完成一个模型训练,需要用到迁移学习工具:Transfer Learning Toolkit(TLT)。
最后,部署模型时,可以使用DeepStream工具便捷实现。
在今天的示例展示开始前,先为大家介绍一下这两个工具的功能及如何使用。
DeepStream是NVIDIA专门为视觉相关的应用来设计的一整套工具链,集成了很多工具。
它的核心任务之一是帮用户搭建视频应用的完整产业链。当我们要做一个基于视觉的应用时,我们不只是在训练一个模型,还需要处理很多流程,比如编解码、批处理等,DeepStream可以帮助用户完成这些流程。
如上图,最底层基础部分,NVIDIA有一系列的硬件;
再往上看,在不同硬件部署时,我们可以再采用不同的基于CUDA-X的工具,比如要做视频的编、解码可能用到CUDA,做视频的inference时可以用到TensorRT、Triton Inference Server,不同的工具对应不同的调用方式;
大家用DeepStream搭建系统时,只需要调用DeepStream SDK这一个应用,它是一系列软件搭建起来的工具的集合,并且可以投产于真实的项目中。
说明文档:https://docs.nvidia.com/metropolis/deepstream/dev-guide/text/DS_Quickstart.html#quickstart-guide
具体看下DeepStream SDK每一步的处理过程。
我们要搭建一个基于视觉应用的程序,第一步是数据源。今天我们展示的实例代码是基于本地的视频,大家也可以使用不同的视频源,都可以接入到SDK系统里。
第二步,对视频源的数据进行处理。包括Code、DeCode的过程,使程序、算法能够直接使用和识别数据。这一步可以极大提升我们的处理效率、节省时间。
第三步,视频预处理,包括缩放、剪切、调整分辨率等。
第四部,Batching,即设置一定延迟,将几张图片组合起来,组成一张大图再传输给GPU,同时处理多张图片来提高效率。
第五步,深度学习推理任务。这里可以使用您已有的模型、或者NVIDIA提供的预训练模型等,不需要再从头开始进行训练。推理主要包含检测、识别、图像分割三部分,今天的课程任务都会涵盖到。
推理完成后,还可以进行二级推理网络或者多级网络的搭建。比如今天的课程任务,检测到车辆后,再在检测框里检测车牌,就是二级网络。接下来可能还要识别车牌号,这个识别网络就是三级网络。
第六步,深度学习的结果出来之后,针对某些需要Tracking的任务,DeepStream里边也已经内置了相应模块,直接调用就可以进行跟踪任务的处理。
这时,主要的计算任务就完成了,第七步就需要将结果显示出来,比如显示在屏幕上、传输到远端,或者储存为本地的文件。(今天直播里我们将用到一个嵌入式设备—NX来显示画面,将处理完的视频存到本地后播放。)
以上就是一套完整的流程,我们通过使用DeepStream SDK,只需100多行代码就可以实现整个流程。
上图是关于DeepStream的注意事项,大家在实际应用的时候,可以参考相关内容、应用场景等。
TensorRT是英伟达专门为GPU深度学习推理设置的一个工具(相关课程可参考英伟达开发者社区:https://www.nvidia.cn/developer/online-training/community-training/),可以帮助GPU更快的做深度学习推理任务。
它会在内部做一系列优化,如精度校正,动态Memory,多流的执行,Kernel调用,网络层融合计算等。正是通过这一系列优化,生成了可执行的推理引擎,就可以进行一个深度学习推理任务。
接下来介绍一下NVIDIA Transfer Learning Toolkit(TLT)工具。
上述介绍了部署工具,那么如何得到推理引擎呢?这就需要用到TLT工具(目前版本已更新至TLT 3.0)。
TLT 3.0是一个简单的、集成化的工具,可以帮助大家快速的训练一个模型,并且把这个模型转化成TensorRT或者DeepStream可以直接使用的深度学习推理引擎。
TLT 3.0为开发者提供了一系列的预训练模型,并且提供了一系列工具,大家可以在预训练模型的基础上进行模型训练、调整、剪枝,以及导出模型进行部署等。而且大家可以通过简单的几行代码来实现上述功能。
目前,TLT 3.0已经涵盖了很多内容,在视觉、语音等方面都有很多可以实际应用的模型。
我们今天的主题是“车辆信息识别”,课程任务中主要会涉及图像分类、目标检测和图像分割方面的预训练模型,大家都可以去NGC下载(ngc.nvidia.com)。
接下来,何琨老师通过代码演示,带大家实现了“车辆信息识别”任务。大家可观看视频、继续学习:
直播回放链接:
https://www.bilibili.com/video/BV1Vf4y1h74b/ (p.s.代码演示部分从第30分钟开始~)
源代码下载链接:
Python:https://github.com/NVIDIA-AI-IOT/deepstream_python_apps
C:https://github.com/NVIDIA-AI-IOT/deepstream_lpr_app
课程PPT链接:https://images.nvidia.cn/cn/webinars/2021/May18/%E5%BF%AB%E9%80%9F%E6%90%AD%E5%BB%BA%E5%9F%BA%E4%BA%8EPython%E7%9A%84%E8%BD%A6%E8%BE%86%E4%BF%A1%E6%81%AF%E8%AF%86%E5%88%AB%E7%B3%BB%E7%BB%9F.pdf
本次CV公开课还有2期课程未直播,分别为:
第2期(6.02 周三 20:00-21:30):利用TLT3.0和Triton快速搭建情感识别系统
第3期(6.17 周四 20:00-21:30):利用TLT3.0和Triton快速搭建手势识别系统
欢迎人工智能从业者、有AI开发需求的小伙伴扫码/阅读原文报名~