基于 YOLOv2 Tiny的车牌检测

2023-05-16

文章目录

  • YOLO安装
    • 源码获取
    • 安装
  • 车牌检测
    • 转换样本格式
    • 修改网络
    • 其它
  • 训练
  • 可视化训练
  • 测试

YOLO安装

源码获取

从 darknet 下载。

git clone https://github.com/pjreddie/darknet.git

安装

修改Makefile文件,启用GPU、CUDNN等,不启用的话,相应值置零:

GPU=1
CUDNN=1
OPENCV=1
OPENMP=0
DEBUG=0

然后执行:

make -j32

无错误安装完成

车牌检测

转换样本格式

关于样本参见:YOLO样本

VOC格式为采用xml标记格式:

<xmin> <ymin> <xmax> <ymax>

如下面为一段标记代码

<annotation>
	<folder>VOC2007</folder>
	<filename>000001.jpg</filename>
	<source>
		<database>The VOC2007 Database</database>
		<annotation>PASCAL VOC2007</annotation>
		<image>flickr</image>
		<flickrid>341012865</flickrid>
	</source>
	<owner>
		<flickrid>Fried Camels</flickrid>
		<name>Jinky the Fruit Bat</name>
	</owner>
	<size>
		<width>353</width>
		<height>500</height>
		<depth>3</depth>
	</size>
	<segmented>0</segmented>
	<object>
		<name>dog</name>
		<pose>Left</pose>
		<truncated>1</truncated>
		<difficult>0</difficult>
		<bndbox>
			<xmin>48</xmin>
			<ymin>240</ymin>
			<xmax>195</xmax>
			<ymax>371</ymax>
		</bndbox>
	</object>
	<object>
		<name>person</name>
		<pose>Left</pose>
		<truncated>1</truncated>
		<difficult>0</difficult>
		<bndbox>
			<xmin>8</xmin>
			<ymin>12</ymin>
			<xmax>352</xmax>
			<ymax>498</ymax>
		</bndbox>
	</object>
</annotation>

YOLO的标记格式为:

<类别标签数字> <物体中心水平方向坐标/宽度> <物体中心垂直方向坐标/高度> <物体区域宽度> <物体区域高度>

如上面的xml标记对应于YOLO格式为:

11 0.341359773371 0.609 0.416430594901 0.262
14 0.507082152975 0.508 0.974504249292 0.972

其中,11 14 表示类别,(0.34,0.609) (0.50,0.508) 为中心坐标,(0.416,0.262) (0.97,0.972) 分别为宽度和高度

使用scripts中的 voc_label.py 转换即可。

修改网络

车牌检测仅包含1类,需要修改以下内容:

复制文件 "cfg/yolov2-tiny-voc.cfg“ 并重命名为 “cfg/yolov2-tiny-lpd.cfg” ,修改以下内容:


###########

[convolutional]
batch_normalize=1
size=3
stride=1
pad=1
filters=1024
activation=leaky

[convolutional]
size=1
stride=1
pad=1
filters=30 # (classes+ coords+ 1)* (NUM)
activation=linear

[region]
anchors = 1.08,1.19,  3.42,4.41,  6.63,11.38,  9.42,5.11,  16.62,10.52
bias_match=1
classes=1
coords=4
num=5
softmax=1
jitter=.2
rescore=1

object_scale=5
noobject_scale=1
class_scale=1
coord_scale=1

absolute=1
thresh = .6
random=1

修改内容:

  • classes=1 : 只有1类
  • filters=30

“filters”的值需要修改,计算方法 num×(classes+ coords + 1)

其它

修改 cfg/data/lpd/lpd.data ,其中,train、test、valid来自 voc_label.py 运行输出的对应文件:

classes=1
train = /mnt/d/DataSets/LPR/2018_trainval.txt
valid = /mnt/d/DataSets/LPR/2018_val.txt
test = /mnt/d/DataSets/LPR/2018_test.txt
names = [yourdir]/darknet/cfg/data/lpd/lpd.names
backup = [yourdir]/darknet/backup/

cfg/data/lpd/lpd.names 修改为:

LicensePlate

训练

./darknet detector train cfg/data/lpd/lpd.data cfg/yolov2-tiny-lpd.cfg darknet53.conv.74 -gpus 0,1 >> backup/training.log

可视化训练

新建两个文件 extract_log.py , train_visualization.py, 并以此执行:

python extract_log.py
python train_visualization.py

可视化的车牌检测网络训练损失函数:

损失函数

由上图可见网络训练还没有收敛到最优。

extract_log.py :

#!/usr/bin/env python

in_log_file = '../../backup/training.log'
out_loss_file = './train_loss.log'
out_iou_file = './train_iou.log'


def extract_log(log_file, new_log_file, key_word):
    f = open(log_file)
    train_log = open(new_log_file, 'w')
    for line in f:
        # remove Sync log of multi-gpu
        if 'Syncing' in line:
            continue
        # remove error log
        if 'nan' in line:
            continue
        if key_word in line:
            train_log.write(line)

    f.close()
    train_log.close()

extract_log(in_log_file, out_loss_file, 'images')
extract_log(in_log_file, out_iou_file, 'IOU')

train_visualization.py:

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
#%matplotlib inline

loss_log_file = './train_loss.log'


lines = 100

skiprows = [x for x in range(lines)]
print(skiprows)

result = pd.read_csv(loss_log_file, skiprows=skiprows, error_bad_lines=False, names=[
                     'loss', 'avg', 'rate', 'seconds', 'images'])

result.head()
result['loss'] = result['loss'].str.split(' ').str.get(1)
result['avg'] = result['avg'].str.split(' ').str.get(1)
result['rate'] = result['rate'].str.split(' ').str.get(1)
result['seconds'] = result['seconds'].str.split(' ').str.get(1)
result['images'] = result['images'].str.split(' ').str.get(1)
result.head()
result.tail()

# print(result.head())
# print(result.tail())
# print(result.dtypes)

print(result['loss'])
print(result['avg'])
print(result['rate'])
print(result['seconds'])
print(result['images'])

result['loss'] = pd.to_numeric(result['loss'])
result['avg'] = pd.to_numeric(result['avg'])
result['rate'] = pd.to_numeric(result['rate'])
result['seconds'] = pd.to_numeric(result['seconds'])
result['images'] = pd.to_numeric(result['images'])
result.dtypes


fig = plt.figure()
ax = fig.add_subplot(1, 1, 1)
ax.plot(result['avg'].values, label='avg_loss')
# ax.plot(result['loss'].values,label='loss')
ax.legend(loc='best')
ax.set_title('The loss curves')
ax.set_xlabel('batches')
fig.savefig('avg_loss')
# fig.savefig('loss')

测试

./darknet detector test cfg/data/lpd/lpd.data cfg/yolov2-tiny-lpd.cfg backup/yolov2-tiny-lpd_80000.weights data/009.jpg -thresh 0.3

带文字,83%
检测结果0

不知到是车牌颜色问题,还是角度问题,这个只有5%的置信度,可能是训练样本中没有白色的车牌
检测结果1

分辨率较低的情况,42%的置信度,摩托的只有1%,这里给的0.3的置信度
检测结果2

多个车辆,分别为73%,70%置信度
检测结果3

夜间,87%置信度
检测结果4

斜视,67%置信度
检测结果5

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

基于 YOLOv2 Tiny的车牌检测 的相关文章

  • linux系统下cat命令的使用

    运维那些事 2017 01 22 21 15 cat命令是Linux系统下查看文件内容用的指令 xff0c 还可以将显示的信息转入或附加到文件上 命令格式 cat 选项 文件 命令功能 cat主要有三大功能 xff1a 一次显示整个文件 c
  • 使用Python爬取淘宝两千款套套

    各位同学们 xff0c 好久没写原创技术文章了 xff0c 最近有些忙 xff0c 所以进度很慢 xff0c 给大家道个歉 gt 警告 xff1a 本教程仅用作学习交流 xff0c 请勿用作商业盈利 xff0c 违者后果自负 xff01 如
  • 大学那会儿,我读过的技术经典图书

    我2009年考进大学的计算机系 上大学前我对电脑的使用仅限于上QQ xff0c 看小说 xff0c 可以说是零基础 但通过三年的努力及对计算机专业的喜爱 xff0c 我顺利保送到自己梦寐以求的学校攻读研究生 大学期间看了不少书 xff0c
  • vscode 配置 git (配置、暂存、推送、拉取、免密)

    前些天发现了一个巨牛的人工智能学习网站 xff0c 通俗易懂 xff0c 风趣幽默 xff0c 忍不住分享一下给大家 点击跳转到教程 vscode 中对 git 进行了集成 xff0c 很多操作只需点击就能操作 xff0c 无需写一些 gi
  • 已知子网掩码,确定ip地址范围

    主要是把 ip地址和子网掩码在二进制下进行对比 ip地址分成两个部分 xff0c 网络号和主机号 凡是在子网掩码对比下 xff0c 1 代表了网络号 xff0c 0 代表了主机号 然后对比后 xff0c 把主机号最小 xff08 全0 xf
  • virmach主机购买和使用

    01购买 参考教程 xff1a https www jb51 net yunying 470007 html 需要注意的是购买后 xff0c 登录的帐号和密码会发送到默认邮箱中 xff0c 拿到用户名密码可以先使用ssh登录 xff0c 查
  • Xmanager使用方法

    服务器 xff1a CentOS 7 6 GNOME桌面环境 xff08 若最小化安装 xff0c 默认是无桌面的 xff0c 那么就要安装桌面 xff0c 参考百度 xff09 个人主机 xff1a Windows 10专业版 xff0c

随机推荐

  • 制作便携式随身系统(以Ubuntu为例)

    文章目录 说明准备硬件软件 启动盘制作安装Ubuntu到随身存储设备概述 为便携式系统创建GRUB引导安装 GRUB2 到U盘或移动硬盘制作Grub引导菜单 问题与解决拔掉U盘进不了原来的系统随身系统无法在别的电脑上启动welcome to
  • 谈谈了解的几个专业

    本文涉及专业 智能科学与工程通信工程电子信息工程集成电路设计与集成系统微电子科学与工程计算机科学与技术电磁场与无线技术遥感科学与技术 这些学科专业 xff0c 很多之间是相互交叉的 以下仅作参考 xff01 xff01 xff01 随便聊聊
  • 深度学习平台框架

    简介 分类 模型转换 网络参数转到MAT 文件 keras权重到mat 可知直接用matlab读取hdf5文件 也可以通过如下脚本 keras2mat py 转换 span class token comment usr bin env p
  • Ubuntu16.04 + NVIDIA RTX3090 + Pytorch + Tensorflow

    文章目录 说明有用链接显卡驱动安装文件下载一次性安装显示驱动和cuda计算套件仅安装显示驱动仅安装cuda计算套件 安装Pytorch安装pytorch1 7源码安装pytorch1 8源码安装torchvision RTX3090性能问题
  • centOS jdk安装

    1 输入yum list installed grep java 可以查看CentOS自带的Java环境 2 卸载jdk yum y remove java 1 8 0 openjdk 输入yum y remove tzdata java
  • 元学习

    这里写自定义目录标题 说明比较好的资料文档代码 常用数据集介绍Omniglot 说明 比较好的资料 文档 torchmeta pytorch meta learning libraryPaper repro Deep Metalearnin
  • Markdown简明教程

    这里是目录 xff0c 输入 TOC 可以自动生成 文章目录 常用语法 一级标题 基本语法 二级标题 数学公式添加图片添加代码段 高级扩展语法插入classDiagram类图插入Mermaid流程图插入UML图插入甘特图 其它 常用语法 一
  • 深度神经网络中的卷积

    文章目录 卷积单元经典卷积运算经典二维卷积经典膨胀二维卷积运算经典二维转置卷积运算 实验分析实验说明实验结果 参考文献 卷积单元 本文给出了四维张量卷积的表达式 xff0c 卷积输出大小的表达式 xff0c 以及Matlab和PyTorch
  • 离线部署深度学习环境Ubuntu篇

    引言 不采用docker 以防拖慢速度 打算部署PyTorch Tensorflow 和 Keras框架 版本选择 如何选择系统 CUDA CUDNN Tensorflow Pytorch Keras等版本呢 首先看GPU 一些新的GPU卡
  • Visual Studio Code使用笔记

    文章目录 简介安装常用功能杂文件对比 常用插件通用快捷键文件头注释 C C 43 43 PythonLaTexMarkdown 其它C C 43 43 多文件编译运行代码运行 简介 与Sublime Text相比 xff0c vscode免
  • Matlab深度学习上手初探

    文章目录 简介实例网络设计代码运行结果 参考文献 简介 Matlab降低了深度神经网络的开发难度 xff0c 可以通过拖拽的模式设计网络 xff0c 甚至训练的过程也是GUI操作 实例 以高光谱图像分类为例 xff0c 参考文献1 构造一个
  • Julia学习笔记

    文章目录 简介安装与配置包的管理安装与删除包设置代理与更换镜像离线安装包 性能测试运行效率平稳性分析实验代码FFT加噪 实验结果Windows 10Ubuntu 16 04 LTS 其它资料 简介 Julia 是一个面向科学计算的高性能动态
  • Julia深度学习

    文章目录 Julia中的深度学习框架Flux性能对比LeNet5评估结果GPU CUDA 11 下的测试结果GPU CUDA 10 下的测试结果CPU单线程CPU多线程 18个线程 Matlab实现PyTorch实现Flux实现 MNIST
  • 常见评价指标

    文章目录 简介信息检索查准率查全率F measure虚警率漏检率 分类准确率混淆矩阵Kappa系数 简介 整理一些常见的评价指标 信息检索 信息检索是指从一些相关 relevant 和不相关 irrelevant 的信息中检索出相关信息 为
  • 免费拯救你误删的文件(Windows, Linux, Mac)

    简介 如果你的文件被误删了 别着急 做好如下准备 首先 不要往被删除文件所在的磁盘分区创建 复制新文件如果是Windows系统 那么你基本上可以在回收站里找到如果是Linux系统 如果是右击删除的 也可以到回收站里看看 但是如果是用 rm
  • TouchGFX使用心得(5)——标签的中文显示问题

    相信第一次接触ToughGFX的朋友 xff0c 可能会遇到 xff0c 标签的 中文显示是问号的问题 xff0c 这个问题在模拟器上运行的时候 xff0c 他是显示的问号 xff0c 但是在stm32运行的时候 xff0c 问号的地方不会
  • 编程语言效率对比

    目录 简介测试环境 矩阵乘法实验结果实验代码 简介 主要测试Matlab Python Julia 和C下的基本数学运算效率 测试环境 硬件测试环境 CPU Intel Xeon E5 2696 v3 2 30GHz 36内存 64 GiB
  • 基于深度学习的合成孔径雷达自聚焦

    文章目录 引言什么是合成孔径雷达什么是自聚焦 经典自聚焦方法基于机器学习的方法基于极速学习机的方法基于深度学习的SAR自聚焦 代码附录 引言 本文全面介绍合成孔径雷达自聚焦概念和方法 想获取更为详尽的描述 xff0c 请参考以下几篇论文 如
  • IEEE 论文排版之LaTeX模板

    说明 主要介绍IEEE LaTeX论文模板的使用 获取模板 IEEE的所有期刊 会议 杂志的模板都可以从 IEEE Template Selector 页面获得 xff0c 以期刊 IEEE Transactions on Geoscien
  • 基于 YOLOv2 Tiny的车牌检测

    文章目录 YOLO安装源码获取安装 车牌检测转换样本格式修改网络其它 训练可视化训练测试 YOLO安装 源码获取 从 darknet 下载 span class token function git span clone https git