文章目录

  • 前言
  • 一、程序思路
  • 二、使用步骤
    • 1.配置环境
    • 2.文件结构
    • 3.准备数据集
    • 4.训练
  • 有问题欢迎指正

前言

项目放这:车牌识别

基于python和pytorch平台,使用CCPD2020新能源车牌数据集进行训练,效果如下:

验证集70%多的识别率吧,效果不算特别好,但也能用,另外CCPD2020数据集里面有一些图片是模糊到肉眼也分辨不出来的,应该也有所影响,剔除掉这一部分应该会再好一点。


一、程序思路

训练:yolov3和LPRnet分别进行训练得到各自的weight
测试:将图片输入后一次经过两个网络得到结果,先经过yolov3进行车牌目标检测,然后分割出车牌区域给LPRnet进行识别(LPR只能识别字符不能检测目标)

二、使用步骤

1.配置环境

Package Version
absl-py 1.0.0
cachetools 4.2.4
certifi 2021.10.8
charset-normalizer 2.0.12
cycler 0.11.0
dataclasses 0.6
fonttools 4.32.0
future 0.18.2
google-auth 1.35.0
google-auth-oauthlib 0.4.6
grpcio 1.44.0
idna 3.3
importlib-metadata 4.11.3
imutils 0.5.4
kiwisolver 1.4.2
lxml 4.8.0
Markdown 3.3.6
matplotlib 3.5.1
numpy 1.21.6
oauthlib 3.2.0
opencv-python 4.3.0.36
packaging 21.3
Pillow 9.1.0
pip 21.2.2
protobuf 3.20.0
pyasn1 0.4.8
pyasn1-modules 0.2.8
pycocotools 2.0.4
pyparsing 3.0.8
python-dateutil 2.8.2
PyYAML 6.0
requests 2.27.1
requests-oauthlib 1.3.1
rsa 4.8
scipy 1.7.3
setuptools 61.2.0
six 1.16.0
tensorboard 2.1.0
torch 1.7.0
torchaudio 0.7.0
torchvision 0.8.1
tqdm 4.64.0
typing_extensions 4.1.1
urllib3 1.26.9
Werkzeug 2.1.1
wheel 0.37.1
zipp 3.8.0

2.文件结构

3.准备数据集

yolov3需要yolo格式的数据集,对yolo格式和网络不太了解的可以参考yolov3源码讲解。LPRnet需要标签为图片名,输入为94*24的图片。

如果使用CCPD数据集,分别可以使用CCPD_trans_yolodataset.py和CCPD_trans_LPRdataset.py转成两个网络所需要的数据类型

4.训练

准备好数据集文件后:
yolov3的训练,在这按自己的需求修改相关配置即可开始训练

parser = argparse.ArgumentParser()parser.add_argument('--epochs', type=int, default=30)parser.add_argument('--batch-size', type=int, default=4)parser.add_argument('--cfg', type=str, default='cfg/my_yolov3.cfg', help="*.cfg path")parser.add_argument('--data', type=str, default='data/my_data.data', help='*.data path')parser.add_argument('--hyp', type=str, default='cfg/hyp.yaml', help='hyperparameters path')parser.add_argument('--multi-scale', type=bool, default=True,help='adjust (67%% - 150%%) img_size every 10 batches')parser.add_argument('--img-size', type=int, default=512, help='test size')parser.add_argument('--rect', action='store_true', help='rectangular training')parser.add_argument('--savebest', type=bool, default=False, help='only save best checkpoint')parser.add_argument('--notest', action='store_true', help='only test final epoch')parser.add_argument('--cache-images', action='store_true', help='cache images for faster training')parser.add_argument('--weights', type=str, default='weights/yolov3-spp-ultralytics-512.pt',help='initial weights path')parser.add_argument('--name', default='', help='renames results.txt to results_name.txt if supplied')parser.add_argument('--device', default='cuda:0', help='device id (i.e. 0 or 0,1 or cpu)')parser.add_argument('--single-cls', action='store_true', help='train as single-class dataset')parser.add_argument('--freeze-layers', type=bool, default=False, help='Freeze non-output layers')# 是否使用混合精度训练(需要GPU支持混合精度)parser.add_argument("--amp", default=False, help="Use torch.cuda.amp for mixed precision training")opt = parser.parse_args()

LPRnet的训练,如果遇到loss为Nan尝试修改learning_rate即可,其他按自己的需求修改即可开始训练

def get_parser():parser = argparse.ArgumentParser(description='parameters to train net')parser.add_argument('--max_epoch', default=100, help='epoch to train the network')parser.add_argument('--img_size', default=[94, 24], help='the image size')parser.add_argument('--train_img_dirs', default=r"./My_LPRnet_Dataset/train/", help='the train images path')parser.add_argument('--test_img_dirs', default=r"./My_LPRnet_Dataset/val/", help='the test images path')parser.add_argument('--savebest', type=bool, default=False, help='only save best checkpoint')parser.add_argument('--dropout_rate', default=0.5, help='dropout rate.')parser.add_argument('--learning_rate', default=0.005, help='base value of learning rate.')parser.add_argument('--lpr_max_len', default=8, help='license plate number max length.')parser.add_argument('--train_batch_size', default=128, help='training batch size.')parser.add_argument('--test_batch_size', default=120, help='testing batch size.')parser.add_argument('--phase_train', default=True, type=bool, help='train or test phase flag.')parser.add_argument('--num_workers', default=8, type=int, help='Number of workers used in dataloading')parser.add_argument('--cuda', default=True, type=bool, help='Use cuda to train model')parser.add_argument('--resume_epoch', default=0, type=int, help='resume iter for retraining')parser.add_argument('--save_interval', default=2000, type=int, help='interval for save model state dict')parser.add_argument('--test_interval', default=2000, type=int, help='interval for evaluate')parser.add_argument('--momentum', default=0.9, type=float, help='momentum')parser.add_argument('--weight_decay', default=2e-5, type=float, help='Weight decay for SGD')parser.add_argument('--lr_schedule', default=[4, 8, 12, 14, 16], help='schedule for learning rate.')parser.add_argument('--save_folder', default='./weights/', help='Location to save checkpoint models')parser.add_argument('--save_weight_name', default='myLPRweight.pth', help='Location to save checkpoint models')# parser.add_argument('--pretrained_model', default='./weights/Final_LPRNet_model.pth', help='pretrained base model')parser.add_argument('--pretrained_model', default='', help='pretrained base model')args = parser.parse_args()return args

有问题欢迎指正

基于yolov3的目标检测与LPRnet字符识别的车牌识别(CCPD2020新能源车牌数据集)相关推荐

  1. 智慧交通day02-车流量检测实现12:基于yoloV3的目标检测

    在本章节代码编写中,发现之前的代码所处的环境是python3,因此导致了cv2.dnn.readNetFromDarknet()在代码运行中导致了i[0]的获值失败,故总结如下: cv2.dnn.re ...

  2. 目标检测—基于Yolov3的目标检测项目实战(学习笔记)

    最近在学习tensorflow,尝试运行学习了github上基于yolov3的一个目标检测项目,此算法可对视频.图片.摄像头实时进行检测,本文主要讲述了,在windows电脑上,复现这一目标检测项目的 ...

  3. yolov3为什么对大目标检测不好_基于改进Yolov3的目标检测的研究

    晏世武 罗金良 严庆 摘要:目标检测在视频监控.无人驾驶系统.机械自动化等领域起着重要作用.在如今大数据的背景下,为进一步提高Yolov3在不同数据集下的性能,本文以KITTI数据集为基础,利用重新調 ...

  4. 【目标检测】基于yolov3交通标志检测和识别(附代码和数据集)

    Hello,大家好,我是augustqi.今天给大家分享的目标检测项目是:基于yolov3交通标志检测和识别(附代码和数据集)[目前yolov7都出来了,为什么要用2018年的yolov3呢?因为我想 ...

  5. 【目标检测】基于yolov3的红细胞检测、计数项目(附代码+数据集)

    先看训练得到的模型,在测试集上的检测效果: 大家好,我是augustqi.今天手把手带大家做一个深度学习实战项目:基于yolov3的红细胞检测.计数项目.yolov3模型的训练在Windows系统下进 ...

  6. 【目标检测】基于yolov3的血细胞检测和计数(无bug教程+附代码+数据集)

    多的不说,少的不唠,先看检测效果图: 共检测三类:红细胞RBC.白细胞WBC.血小板Platelets Hello,大家好,我是augustqi.今天给大家带来的保姆级教程是:基于yolov3的血细胞 ...

  7. 深度神经网络在基于视觉的目标检测中的应用

    简 介: 目标检测是计算机视觉的一个重要应用方向,深度神经网络的提出极大地帮助基于视觉的目标检测提高了准确度.自2014年以来,深度神经网络在基于视觉的目标检测中被广泛应用,出现了多种算法.本文分别讨 ...

  8. 【教程】opencv-python+yolov3实现目标检测

    目录 [教程]opencv-python+yolov3实现目标检测 目标检测概况 目标检测是? 目标检测算法? yolov3模型简介 性能介绍 架构介绍 opencv-python实现 why ope ...

  9. OpenCV+yolov3实现目标检测(C++,Python)

    OpenCV+yolov3实现目标检测(C++,Python) 目标检测算法主要分为两类:一类是基于Region Proposal(候选区域)的算法,如R-CNN系算法(R-CNN,Fast R-CN ...

最新文章

  1. kernel 自定义字符驱动 第一次实验
  2. 滚动条的出现导致居中的元素会晃动
  3. 高德地图天气图标符号大全_共享雨伞,高德这波营销格外暖!
  4. CentOS7 Ambari2.7.5编译
  5. 大连理工优化方法matlab,大连理工大学2016年秋季优化方法大作业.pdf
  6. 【HIbernate异常】could not initialize proxy - no Session (已解决)
  7. 多点测试:while的写法
  8. ASP与ActiveX控件交互实战(一)
  9. 任正非认为自己的成功没有秘诀
  10. Mac磁盘如何分区?Mac系统磁盘自由分区教程!
  11. FCKEditor报java.lang.NullPointerException
  12. DataGrid + JS 的應用示例
  13. Linux设备驱动之字符设备(二)
  14. JAVA毕业设计华水疫情预警与防护用品调度系统计算机源码+lw文档+系统+调试部署+数据库
  15. [转]Sublime Text 2 设置文件详解
  16. Mac自带Safari浏览器如何清除缓存
  17. Google Analytic谷歌分析
  18. 串口通信-电脑控制单片机点亮LED
  19. C++ 优先队列priority_queue,如何定义大小根堆
  20. python利用pyinstaller打包文件

热门文章

  1. 花菁染料(cas773041-79-5|cas427882-78-8|cas14134-81-7)结构图及合成路线图
  2. Flutter couldn‘t find “libflutter.so“
  3. 第2章 初学 emWin 的准备工作及其快速上手
  4. 【win10】屏幕亮度无法调节的解决办法及相关注册表详解
  5. kaldi 学习笔记-三音素训练1(Decision Tree)
  6. java jdk7.0安装包_jdk7下载|java jdk 1.7下载 安装包 - 跑跑车手游网
  7. 计算机维护系统Win8PE,Win8PE x86应急维护系统BIOS-MBR硬盘版
  8. 部署社区版deepflow
  9. 利用python绘制勾股定理赵爽弦图
  10. 兵棋系列2----兵棋游戏中地图滑动和委托消息