预先准备

在开始建立和部署 TLT 中高准确率的车辆训练模型时,需要以下资源:

  • NGC 账号
  • DeepStream SDK

我们将使用 TLT 进行训练

pip3 install nvidia-pyindex
pip3 install nvidia-tlt

创建 ~/.tlt_mounts.json 文件,并加入以下内容:

{"Mounts": [{"source": "/home/<username>/tlt-experiments","destination": "/workspace/tlt-experiments"},{"source": "/home/<username>/openalpr","destination": "/workspace/openalpr"}]
}

将本机电脑上的路径 /home/<username>/tlt-experiments,装载为Docker内的路径 /workspace/tlt-experiments。 另外,将本机电脑上的路径 /home/<username>/openalpr,装载为Docker内的路径 /workspace/openalpr

车牌识别 LPR(License plate recognition)

本节将逐步阐述如何从 NGC 取得预先训练好的美国 LPRNet 模型,并以此为基础进行微调。

资料集

使用 OpenALPR 资料集对 LPRNet 模型进行调整和验证。我们会将其中的 80%(177 张图片)用于训练,20%(44 张图片)则用于验证。

算法简介

LPRNet 可以在截取出的车牌图片中检测字符。LPRNet 首先是撷取图片的特征。利用广泛采用之 DNN 架构(例如 ResNet 10/18)做为 LPRNet 的骨干。 ResNet 网路的原始跨度为 32,但是为了能更适用于车牌影像的空间大小,请将跨度从 32 调整成 4。然后,将影像特征传送至分类器。不同于一般的影像分类任务(模型仅为一张影像提供单一类别 ID),LPRNet 模型会产生类别 ID 的序列。将影像特征沿着水平方向分成多个片段,在预测中为各个片段分配字元 ID。

最后,使用连接时间分类(connectionist temporal classification,CTC)损失,训练此序列分类器。训练演算法最佳化网路,以减少车牌的真值字元序列与预测字元序列之间的 CTC 损失。

基本上,LPRNet 是具有已调整 ResNet 骨干的序列分类模型。它是以影像做为网路输入,并产生序列输出。之后,使用以贪婪解码方法为基础的 CTC 解码器,从序列输出中将车牌解码。

准备数据集

首先,从 Github 上,将 OpenALPR 克隆下来:

$ git clone https://github.com/openalpr/benchmarks benchmarks

下载用于分割数据集的 Python 脚本 preprocess_openalpr_benchmark.py,并运行。它将把数据集分为"训练"、"检测"两个部分

$ wget https://github.com/NVIDIA-AI-IOT/deepstream_tlt_apps/blob/release/tlt3.0/misc/dev_blog/LPDR/lpr/preprocess_openalpr_benchmark.py$ python preprocess_openalpr_benchmark.py --input_dir=./benchmarks/endtoend/us --output_dir=./data/openalpr

每一张处理后的图片,都有对应的标签档。同时创建了 characters_list.txt 文件,该文件包含了美国车牌中所有的字符。

下载 tutorial_spec.txt LPR训练配置文件。

$ wget https://raw.githubusercontent.com/NVIDIA-AI-IOT/deepstream_tlt_apps/release/tlt3.0/misc/dev_blog/LPDR/lpr/tutorial_spec.txt

调整 tutorial_spec.txt 文件中的路径。

执行以下命令进行训练

$ tlt lprnet train -e /workspace/tlt-experiments/lprnet/tutorial_spec.txt \-r /workspace/tlt-experiments/lprnet/ \-k nvidia_tlt \-m /workspace/tlt-experiments/lprnet/us_lprnet_baseline18_trainable.tlt

TLT 同时支援多 GPU 训练(资料平行)和自动混合精度(automatic mixed precision,AMP)。想要提高训练速度时,可以使用 –gpus <num_gpus> 参数执行多个 GPU,并使用 –use_amp 参数执行混合精度训练。训练纪录包含验证资料集的准确率、训练损失和学习率,是以 .csv 格式储存在 <results_dir> 目录中。以下程式码范例是显示具有预先训练权重的训练纪录:

epoch,accuracy,loss,lr
0,nan,1.085993747589952,1e-05
1,nan,0.9726232198503731,1e-05
2,nan,0.9452087508756563,1e-05
3,nan,0.7897920507495686,1e-05
4,0.8409090909090909,0.5753771635772145,1e-05
…….

导出模型

想要在 DeepStream 或其他应用程式中部署 LPR 模型时,请汇出为 .etlt 格式。目前,LPR 仅支援 FP32 和 FP16 精度。相较于 LPD 的模型汇出命令,LPR 较简单:

$ tlt lprnet export -m /workspace/tlt-experiments/lprnet/weights/lprnet_epoch-24.tlt \-k nvidia_tlt \-e /workspace/tlt-experiments/lprnet/tutorial_spec.txt

输出 .etlt 模型是储存在与已训练 .tlt 模型相同的目录中。

已训练 LPR 模型的准确率
LPR 之评估指标为车牌辨识的准确率。如果车牌上的所有字元和顺序都正确,则视为辨识准确。您可以在 TLT Docker 中使用以下命令,在实验配置档中指定的验证资料集上执行评估:

$ tlt lprnet evaluate -m /workspace/tlt-experiments/lprnet/weights/lprnet_epoch-24.tlt -k nvidia_tlt -e /workspace/tlt-experiments/lprnet/tutorial_spec.txt
模型 Epochs 训练准确率 验证准确率
baseline18_unpruned_from_scratch 100 0% 0%
baseline18_unpruned_from_pretrained 24 98.87% 90.90%

使用预先训练模型时,可以使用较小的期数达到高准确率。相反地​​,从零开始训练时,在期数增加 4 倍的情况下模型仍未开始汇聚。因此,必须大幅增加资料集,而导致训练时间和成本增加。

NVIDIA中文车牌识别系列-3:使用TLT训练车牌号识别LPR模型相关推荐

  1. NVIDIA中文车牌识别系列-1” 在Jetson上用DeepStream识别中文车牌

    前言 这是NVIDIA在2021年初公布的一个开源项目,用NVIDA Jetson设备上的DeepStream视频分析套件实现"车牌识别"的功能,这是个实用性非常高的应用,能应用在 ...

  2. 基于u-net,cv2以及cnn的中文车牌定位,矫正和端到端识别软件

    本文链接:https://blog.csdn.net/qq_32194791/article/details/106748685,转载请注明出处 完整项目已上传至github: https://git ...

  3. 人脸识别系列(七):百度的人脸识别

    原文链接:Targeting Ultimate Accuracy: Face Recognition via Deep Embedding 网络结构: 输入的是对齐好了的人脸图像,将人脸图像通过面部标 ...

  4. 微博验证码识别系列三:根据微博验证码图片建立模型

    我们在上期已经制作好了通用模型,这期就要制作微博验证码的识别模型了 首先我们去微博获取验证码图片并对这些图片打标签(注意:这里打标签的图片越多生成的模型越好,识别率越高) 废话不多说,我们看代码: i ...

  5. 基于谷歌街景多位数字识别技术:TensorFlow的车牌号识别系统

    向AI转型的程序员都关注了这个号

  6. 车牌识别系列(二)生成具有真实感的(realistic)车牌数据

    接上篇车牌识别系列,Tensorflow生成车牌数据(一),实际上上篇生成的数据仅仅是一个字符串序列,加上对应的label,使用Pygame或者其他库生成图片后,并不具备真实感觉的车牌.考虑到实际车牌 ...

  7. EasyPR中文车牌识别系统开发

    EasyPR中文车牌识别系统开发,我主要介绍如何使用开源的EasyPR中文车牌识别系统,我会介绍训练机器学习 SVM 支持向量机和 ANN 人工神经网络模型在车牌识别的应用,并公开训练数据. 目录: ...

  8. 基于Opencv的开源的中文车牌识别系统

    真正的大师,永远都怀着一颗学徒的心! 一.项目简介 基于Opencv的开源的中文车牌识别系统. 二.实现功能 车牌定位 车牌判断 车牌监测 字符分割 字符鉴别 字符识别 车牌识别 车牌抽象 训练车牌识 ...

  9. HyperLPR 高性能开源中文车牌识别框架

    概要 HyperLRP是一个开源的.基于深度学习高性能中文车牌识别库,由北京智云视图科技有限公司开发,支持PHP.C/C++.Python语言,Windows/Mac/Linux/Android/IO ...

最新文章

  1. Cookie和Session的区别
  2. 二、1、怎么做都好做,没flag就抓包
  3. ASP长文章内容自动分页函数
  4. Swift之深入解析如何使用Xcode和LLDB v2修改UI元素
  5. 鸿蒙系统公测版发布,鸿蒙OS2.0系统公测版什么时候发布-适配机型
  6. Tiny之Web工程构建
  7. 使用Gatling + Gradle + Jenkins Pipeline为您的JAX-RS(和JavaEE)应用程序进行连续压力测试...
  8. Linux进阶之路————远程登录与vim编辑器
  9. java排序方式(冒泡,选择,JDK)
  10. 论文阅读笔记——拥塞控制算法PCC
  11. java-net-php-python-java《Linux基础及技术》课程网站演示录像修改计算机毕业设计程序
  12. 如何修改Windows(可移植)桌面文件夹图标
  13. Android组件化开发实践和案例分享 | 融合数10个项目模块
  14. 秦嘉哲:12.13黄金原油欧盘操作计划、黄金原油最新分析及策略布局
  15. PDF文档物理结构概述
  16. 先进先出页面置换算法的模拟(c++实现)
  17. 使用kail破解wifi密码
  18. Notes: harddisk performance testing
  19. pdf压缩方法总结pdf如何减少体积方法
  20. 【自用】simetrix/simplis操作体验与问题分析(1)

热门文章

  1. 支付宝支付提示“提示系统繁忙,请稍后再试(ALI69)”
  2. 蓝桥杯 ALGO-128 Cowboys
  3. 移动端 UI设计尺寸(一)篇
  4. 洛谷——P7583 [COCI2012-2013#1] DOM(java实现)
  5. 字符串加密后md5为 0exxxx 的字符串
  6. c语言float代码,[求助]float
  7. 当你在浏览器上,指尖轻轻输入 www.taobao.com 以后发生了什么?
  8. 服务器中了挖矿病毒的检测及删除方法
  9. 带你7天玩转可视化建站平台
  10. 九针串口接线问题, 232, 485