本教程来自NVIDIA 官网blog,
原文链接:
https://developer.nvidia.com/blog/creating-a-real-time-license-plate-detection-and-recognition-app/?ncid=em-webi-28960-vt24&sfdcid=EM08#cid=em08_em-webi_en-us
请复制链接后在浏览器上打开,本文只是对这篇文章做一个快速介绍。原文包含了代码和执行细节,请直接阅读原文。
自动车牌识别(ALPR)是智能城市常用的智能视频分析应用程序之一。一些常见的用例包括停车辅助系统,自动收费站,在港口和医疗物资运输仓库进行运输和物流的车辆登记和识别。能够实时做到这一点是为这些市场充分发挥潜力的关键。传统技术依赖于专用相机和处理硬件,这既部署昂贵又难以维护。
用于ALPR的管道包括使用对象检测深度学习模型检测车架中的车辆,使用车牌检测模型对车牌进行定位,然后最终识别车牌上的字符。使用深度神经网络的光学字符识别(OCR)是一种流行的技术,可以识别任何语言的字符。
在本文中,我们向您展示如何结合NVIDIA Transfer Learning Toolkit(TLT)来使用具有生产质量的AI模型,例如车牌检测(LPD)和车牌识别(LPR)模型。即用型模型使您可以快速启动ALPR项目。使用DeepStream SDK可以轻松部署生成的TLT优化模型。
要开始从TLT创建和部署高度精确的,经过预训练的模型,您需要以下资源:
- 从NGC上下载TrafficCamNet或DashCamNet模型来检测车辆
- 车牌检测(LPD)模型来检测车牌
- 车牌识别(LPR)模型将图像转换为文本
- DeepStream SDK
所有预训练的模型都是免费的,并且可以在NVIDIA NGC上轻松获得。TLT提供了两种LPD模型和两种LPR模型:一套在美国车牌上训练过,另一套在中国车牌上训练过。有关更多信息,请参阅LPD和LPR模型。
您可以通过tlt-launcher界面使用TLT进行训练。要运行TLT启动器,请~/tlt-experiments使用该~/.tlt_mounts.json文件将本地计算机上的目录映射到Docker容器。有关更多信息,请参见TLT Launcher。
在NVIDIA的原文blog中,包含:
车牌检测
NVIDIA将引导您如何从NGC中获取经过预训练的基于美国的LPD模型,以及如何使用OpenALPR数据集对模型进行微调。
数据集
使用OpenALPR基准测试作为实验数据集。您可以从NGC提取LPD预训练模型,并在OpenALPR数据集上进行微调。
算法介绍
LPD模型基于TLT的Detectnet_v2网络。训练算法优化了网络,以最大程度地减少对象的定位和置信度损失。
训练分两个阶段进行。在第一阶段,对网络进行正则化训练以利于修剪。在第一阶段之后,请修剪网络删除通道,这些通道的内核规范低于修剪阈值。在第二阶段,对修剪的网络进行重新培训。在第二阶段不包括正则化。
训练LPD模型
设置您的NVIDIA NGC帐户并安装TLT启动器。要微调LPD模型,请从NGC下载LPD笔记本。然后,下载NGC LPD预训练模型(usa_unpruned.tlt)。
-准备数据集
-配置规格文件
-训练
-导出模型
-LPD训练模型的精确性
车牌识别
在本节中,我们将详细介绍LPR模型训练。NVIDIA提供了在美国车牌和中国车牌上训练的LPRNet模型。您可以在模型卡中找到这些模型的详细信息。在以下部分中,您将使用在美国牌照上训练的LPRNet作为微调的起点。
数据集
您还可以在OpenALPR US图像数据集上训练和评估LPRNet。将其拆分为80%(177张图像)进行训练,并拆分为20%(44张图像)进行验证。
算法介绍
对于车牌识别任务,您可以按车牌图像的顺序预测字符。像其他计算机视觉任务一样,您首先要提取图像特征。利用广泛使用的DNN体系结构(例如ResNet 10/18)成为LPRNet的骨干。ResNet网络的原始跨度为32,但为了使其更适用于车牌图像的较小空间大小,请将跨度从32调整为4。然后,将图像特征输入分类器。与正常的图像分类任务不同,在常规的图像分类任务中,模型只为一个图像提供单个类别ID,LPRNet模型会生成一系列的类别ID。图像特征沿水平方向分为多个切片,并且在预测中为每个切片分配了一个字符ID。
最后,使用连接主义者的时间分类(CTC)损失来训练此序列分类器。训练算法优化了网络,以使车牌的地面真实字符序列与预测字符序列之间的CTC损失最小化。
通常,LPRNet是带有已调优ResNet主干的序列分类模型。它以图像作为网络输入并产生序列输出。然后,基于贪婪解码方法,使用CTC解码器从输出的序列中解码车牌。
训练LPR模型
-准备数据
-实验配置
-训练
-导出模型
-LPR训练模型的精确性
使用DeepStream SDK部署LPD和LPR
在本节中,我们将引导您完成在DeepStream中部署LPD和LPR模型的步骤。我们提供了一个示例DeepStream应用程序。LPD / LPR样本应用程序为多个视频流输入构建了管道,并使用级联模型推理批处理的视频,以检测汽车及其车牌并识别字符。
该示例应用程序的源代码分为两部分:
- lpr-test-sample—LPD / LPR示例的主要应用程序,该示例使用DeepStream插件构建Gstreamer管道。
- nvinfer_custom_lpr_parser—nvinfer用于LPR模型的定制DeepStream插件分类器解析器库。默认的DeepStreamnvinfer分类器仅支持置信度分析,并从由配置文件中的labelfile-path参数配置的标签文件中获取标签nvinfer。由于LPR模型argmax以两层输出和置信度,因此需要定制的输出解析功能来解析LPR输出层并为车牌串生成正确的标签。定制的解析器功能应查找指定的词典以查找具有argmax值和置信度值的字符,然后将这些字符组合到车牌字符串中作为标签。
下载并准备模型
对于此应用程序,您需要TLT的三个模型:
- TrafficCamNet可检测车辆。
- LPD检测车牌。
- LPR识别字符。
所有型号均可从NVIDIA NGC下载。或者,如果您遵循前面两节中的训练步骤,则也可以改用训练过的LPD和LPR模型。
生成并运行示例应用程序
从NVIDIA-AI-IOT / deepstream_lpr_app GitHub存储库下载示例代码并构建应用程序。
性能
下表仅显示了美国LPD修剪模型的推断吞吐量(以每秒帧数(FPS)为单位),该模型在具有超过45,000张美国汽车图像的专有数据集上进行了训练。性能随输入大小,修剪比率,设备等的不同而变化。性能是针对NGC上可用的模型的修剪版本,而不是先前部分中训练的模型。
LPR独立性能
下表显示了在不同设备的美国牌照上训练的LPR的推理性能。我们使用trtexecTensorRT的命令分析了模型推断。
示例应用程序性能
此示例应用程序的完整管道运行三种不同的DNN模型。您可以在TLT中使用经过预训练的TrafficCamNet进行汽车检测。LPD和LPR已使用美国车牌的NVIDIA训练数据集进行了预训练。
以下测试是使用示例LPR应用程序对1080p(1920×1080)分辨率的视频进行的。下表显示了使用三种DNN模型处理整个视频分析管道的端到端性能,从摄取视频数据到在帧上呈现元数据开始。数据是在不同的设备上收集的。
概括
在本文中,我们介绍了用于自动车牌识别的端到端AI解决方案。该解决方案涵盖了开发智能视频分析管道的所有方面-使用Transfer Learning Toolkit训练深度神经网络模型,以在DeepStream SDK中部署训练后的模型。
对于训练,您不需要专业知识即可构建自己的DNN和优化模型。TLT提供了一种简化的模型训练方法-您所要做的就是准备数据集并设置配置文件。此外,您可以利用TLT中高度精确的预训练模型,而不必进行随机初始化。
对于部署,DeepStream优化了系统资源以进行视频解码,图像预处理和推理,从而为您提供了最高的通道密度以进行实时视频分析。您可以通过DeepStream轻松地将训练有素的模型快速部署到多流视频分析管道中。