👨💻作者简介: CSDN、阿里云人工智能领域博客专家,新星计划计算机视觉导师,百度飞桨PPDE,专注大数据与AI知识分享。✨公众号:GoAI的学习小屋 ,免费分享书籍、简历、导图等,更有交流群分享宝藏资料,关注公众号回复“加群”或➡️点击链接 加群。
🎉专栏推荐: 点击访问➡️ 《计算机视觉》 总结目标检测、图像分类、分割OCR、等方向资料。 点击访问➡️ 《深入浅出OCR》: 对标全网最全OCR教程,含理论与实战总结。以上专栏内容丰富、价格便宜且长期更新,欢迎订阅,可加入上述交流群长期学习。
🎉学习者福利: 强烈推荐优秀AI学习网站,包括机器学习、深度学习等理论与实战教程,非常适合AI学习者。➡️网站链接。
💚 专栏地址:深入浅出OCR
🍀 专栏导读:恭喜你发现宝藏!本专栏系列主要介绍计算机视觉OCR文字识别领域,每章将分别从OCR技术发展、方向、概念、算法、论文、数据集、对现有平台及未来发展方向等各种角度展开详细介绍,综合基础与实战知识。以下是本系列目录,分为前置篇、基础篇与进阶篇,进阶篇在基础篇基础上进行全面总结,会针对最经典论文及最新算法展开讲解,内容目前包括不限于文字检测、识别、表格分析等方向。 未来看情况更新NLP方向知识,本专栏目前主要面向深度学习及CV同学学习,希望大家能够多多交流,欢迎订阅本专栏,如有错误请大家评论区指正,如有侵权联系删除。
【智慧交通项目实战】 OCR车牌检测与识别项目实战(五):模型部署与加速
💚导读:本项目为新系列 【智慧交通项目实战】《OCR车牌检测和识别》(五)–模型部署与优化》为该系列最后一篇,着重介绍车牌识别系统的模型部署与优化,后续其他系列文章将继续更新相关实战项目。
智慧交通预测系统(PaddleOCR版本)
参考:https://blog.csdn.net/qq_36816848/article/details/128686227
OCR车牌检测+识别
本系列项目目录如下, 代码暂未公开,需要代码和指导可加群联系。
【智慧交通项目实战】《 OCR车牌检测与识别》(一)项目介绍
【智慧交通项目实战】 《 OCR车牌检测与识别》(二):基于YOLO的车牌检测
【智慧交通项目实战】 《 OCR车牌检测与识别》(三):基于CRNN改进版的车牌识别
【智慧交通项目实战】 《 OCR车牌检测与识别》(四):车牌检测与识别可视化
【智慧交通项目实战】《 OCR车牌检测与识别》 (五):模型部署与优化(本篇)
车辆检测
后续更新,且将持续更新其他实战项目系列!
一、项目背景:
车牌识别技术是智能交通的重要环节,目前已广泛应用于例如停车场、收费站等等交通设施中,提供高效便捷的车辆认证的服务,其中较为典型的应用场景为卡口系统。车牌识别即识别车牌上的文字信息,属于光学字符识别(OCR)的一项子任务。
二、车牌识别模型量化与加速
(1)模型部署
1.ONNX
ONNX(Open Neural Network Exchange),开放神经网络交换,是一种模型IR,用于在各种深度学习训练和推理框架转换的一个中间表示格式。在实际业务中,可以使用Pytorch或者TensorFlow训练模型,导出成ONNX格式,然后在转换成目标设备上支撑的模型格式,比如TensorRT Engine、NCNN、MNN等格式。ONNX定义了一组和环境,平台均无关的标准格式,来增强各种AI模型的可交互性,开放性较强。
导图参考:https://zhuanlan.zhihu.com/p/425232454
ONNX介绍
2.OpenVINO
OpenVINO是英特尔推出的一款全面的工具套件(2023.0版本已经发布),用于快速部署应用和解决方案,支持计算机视觉的CNN网络结构超过200余种。OpenVINO是一个Pipeline工具集,同时可以兼容各种开源框架训练好的模型,拥有算法模型上线部署的各种能力,掌握该工具可以轻松的将预训练模型在Intel的CPU上快速部署起来。
https://img-bss.csdnimg.cn/202103311747047950.pdf
本项目支持 检测模型导出onnx,需要安装onnx-sim onnx-simplifier
1. python export.py --weights ./weights/plate_detect.pt --img 640 --batch 1
2. onnxsim weights/plate_detect.onnx weights/plate_detect.onnx
训练好的模型进行检测
python detect_demo.py --detect_model weights/plate_detect.pt
本项目使用ONNX推理如下:
onnx demo
python onnx_infer.py --detect_model weights/plate_detect.onnx --rec_model weights/plate_rec.onnx --image_path imgs --output result_onnx
本项目使用openvino推理如下:
openvino demo
python openvino_infer.py --detect_model weights/plate_detect.onnx --rec_model weights/plate_rec.onnx --image_path imgs --output result_openvino
推荐学习:使用 OpenVINO™ 运行 YOLOv5 推理
(2)模型加速
1. 模型优化加速方法
模型优化加速能够提升网络的计算效率,具体包括:
(1)Op-level的快速算法:FFT Conv2d (7x7, 9x9), Winograd Conv2d (3x3, 5x5) 等;
(2)Layer-level的快速算法:Sparse-block net [1] 等;
(3)优化工具与库:TensorRT (Nvidia), Tensor Comprehension (Facebook) 和 Distiller (Intel) 等;
2. TensorRT加速原理
在计算资源并不丰富的嵌入式设备上,TensorRT之所以能加速神经网络的的推断主要得益于两点:
-
首先是TensorRT支持int8和fp16的计算,通过在减少计算量和保持精度之间达到一个理想的trade-off,达到加速推断的目的。
-
更为重要的是TensorRT对于网络结构进行了重构和优化,主要体现在一下几个方面。
(1) TensorRT通过解析网络模型将网络中无用的输出层消除以减小计算。
(2) 对于网络结构的垂直整合,即将目前主流神经网络的Conv、BN、Relu三个层融合为了一个层,例如将图1所示的常见的Inception结构重构为图2所示的网络结构。
(3) 对于网络结构的水平组合,水平组合是指将输入为相同张量和执行相同操作的层融合一起,例如图2向图3的转化。
3.本项目加速整体流程
(1)Pytorch->TensorRT
python export.py --weights "torch权重路径" --onnx2trt --fp16_trt
(2).TensorRT推理
python torch2trt/main.py --trt_path "trt权重路径"
图像预处理 -> TensorRT推理 -> 可视化结果
def ONNX_to_TRT(onnx_model_path=None,trt_engine_path=None,fp16_mode=False):
"""
仅适用TensorRT V8版本
生成cudaEngine,并保存引擎文件(仅支持固定输入尺度)
fp16_mode: True则fp16预测
onnx_model_path: 将加载的onnx权重路径
trt_engine_path: trt引擎文件保存路径
"""
builder = trt.Builder(TRT_LOGGER)
network = builder.create_network(EXPLICIT_BATCH)
parser = trt.OnnxParser(network, TRT_LOGGER)
config = builder.create_builder_config()
config.max_workspace_size=GiB(1)
if fp16_mode:
config.set_flag(trt.BuilderFlag.FP16)
with open(onnx_model_path, 'rb') as model:
assert parser.parse(model.read())
serialized_engine=builder.build_serialized_network(network, config)
with open(trt_engine_path, 'wb') as f:
f.write(serialized_engine) # 序列化
print('TensorRT file in ' + trt_engine_path)
print('============ONNX->TensorRT SUCCESS============')
耗时对比
Pytorch(ms) | TensorRT_FP16(ms) | |
---|---|---|
yolov5n-0.5 | 7.7 | 2.1 |
yolov5n-face | 7.7 | 2.4 |
yolov5s-face | 5.6 | 2.2 |
yolov5m-face | 9.9 | 3.3 |
yolov5l-face | 15.9 | 4.5 |
python torch2trt/speed.py --torch_path "torch权重路径" --trt_path "trt权重路径"
车牌识别模型最终识别效果:
三、可视化界面识别效果:
四、项目总结:
《智慧交通项目实战《OCR车牌检测和识别》(五)–模型部署与优化》为该系列最后一篇,着重介绍车牌识别系统的模型部署与优化,后续其他系列文章将继续更新相关实战项目。
文章参考 :
1.基于Paddle的智慧交通预测系统
2.Pyqt介绍