基于YOLOv5与CRNN的车牌识别系统设计与优化
1. 项目背景与核心价值车牌识别作为智能交通系统的核心技术之一在停车场管理、违章抓拍、高速公路收费等场景有着广泛应用。传统基于图像处理的车牌识别方法在复杂环境下的准确率往往难以突破85%而基于深度学习的方案在实测中普遍能达到95%以上的识别率。这个毕业设计项目采用YOLOv5实现车牌检测结合CRNN卷积循环神经网络完成字符识别整套系统在Python环境下开发使用PyTorch框架。相比传统方案具有三大优势对倾斜、模糊车牌的鲁棒性更强支持多车牌同时识别识别速度可达15FPSGTX1060显卡2. 技术架构解析2.1 整体处理流程图像采集支持USB摄像头/视频文件/RTSP流输入车牌检测YOLOv5定位车牌区域图像预处理灰度化二值化形态学处理字符分割垂直投影法分割单个字符字符识别CRNN网络序列识别结果输出JSON格式结构化数据2.2 关键模型选型车牌检测模块选用YOLOv5s2.4M参数而非更大的YOLOv5m在保持92%mAP的同时推理速度提升40%自定义数据集包含2000张涵盖不同光照、角度的车牌图片数据增强策略随机旋转±15°、HSV色彩扰动、高斯模糊字符识别模块CRNN网络结构CNN部分4层卷积2层LSTM使用CTC损失函数解决不定长序列对齐问题字符集包含34类数字字母汉字省份简称训练技巧采用动态学习率初始0.001每10epoch衰减0.5使用Label Smoothing缓解过拟合3. 环境搭建与源码解析3.1 开发环境配置# 创建conda环境 conda create -n plate_rec python3.8 conda activate plate_rec # 安装PyTorchCUDA11.3版本 pip install torch1.10.0cu113 torchvision0.11.1cu113 -f https://download.pytorch.org/whl/torch_stable.html # 安装其他依赖 pip install opencv-python scikit-image matplotlib pandas3.2 核心代码结构├── configs/ # 模型配置文件 ├── datasets/ # 训练数据 ├── models/ # YOLOv5CRNN模型定义 ├── utils/ # 工具函数 │ ├── augmentation.py # 数据增强 │ ├── logger.py # 训练日志 ├── detect.py # 检测入口脚本 ├── train.py # 训练脚本3.3 关键代码片段# 车牌检测推理示例 def detect_plate(img): model torch.hub.load(ultralytics/yolov5, custom, pathweights/plate_det.pt) results model(img) return results.pandas().xyxy[0] # 返回DataFrame格式的检测结果 # CRNN字符识别 def recognize_characters(cropped_plate): transformer transforms.Compose([ transforms.Resize((32, 100)), transforms.ToTensor(), transforms.Normalize(0.5, 0.5) ]) image transformer(cropped_plate).unsqueeze(0) output crnn_model(image) pred_text ctc_decode(output) return pred_text4. 训练优化与调参技巧4.1 数据准备要点车牌检测数据集标注要求annotation object namelicense_plate/name bndbox xmin256/xmin ymin128/ymin xmax420/xmax ymax180/ymax /bndbox /object /annotation字符识别数据增强策略添加椒盐噪声概率0.3随机调整对比度0.8-1.2倍模拟运动模糊最大kernel_size34.2 超参数设置参数项车牌检测模型字符识别模型初始学习率0.010.001Batch Size1664Epochs10050优化器SGDAdam学习率衰减策略CosineStep4.3 模型压缩方案知识蒸馏用大模型YOLOv5x指导小模型训练量化部署# 模型动态量化 quantized_model torch.quantization.quantize_dynamic( model, {torch.nn.Linear}, dtypetorch.qint8 )TensorRT加速FP16精度下推理速度提升2-3倍5. 常见问题与解决方案5.1 检测阶段典型问题问题1小尺寸车牌漏检解决方案修改YOLOv5的anchor box尺寸训练时添加更多小车牌样本测试时使用多尺度检测--img-size 640,1280问题2相邻车牌误合并解决方案调整NMS的iou_threshold至0.3后处理中添加最小间距判断如20px则视为不同车牌5.2 识别阶段典型问题问题1相似字符混淆如0与D解决方案数据集中增加困难样本在CRNN后添加字符级置信度过滤问题2汉字识别错误率高解决方案单独训练汉字识别模块引入注意力机制强化局部特征实测建议夜间场景建议增加红外补光避免因光照不足导致识别率下降超过15%6. 扩展应用与优化方向6.1 工程化改进使用ONNX Runtime实现跨平台部署添加DBnet替代传统字符分割方法开发Flask/Vue.js可视化管理系统6.2 学术优化方向引入Transformer改进CRNN的序列建模能力尝试YOLOv8的RT-DETR架构研究无监督域适应应对不同国家车牌我在实际部署中发现三个关键经验车牌检测模型输入分辨率保持640×640可获得最佳性价比LSTM层数超过3层时识别准确率反而下降1-2%使用混合精度训练可使训练时间缩短40%