yolov3交通标志识别练习

本文详细介绍了使用YOLOv3模型进行交通标志识别的实验过程,包括问题分析、数据集处理、实验原理和实验总结。通过训练和测试,探讨了模型在不同大小和类型的交通标志识别中的表现,指出了模型的局限性,如对小尺寸、残缺和少见类型标志的识别问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


目录

一、问题分析 3
1.问题描述 3
2. 数据集分析 3
3. 数据集标注 4
二、实验原理 5
论文摘要 5
Loss函数 7
内部网络架构 7
三、实验过程 8

  1. 实验环境 8
  2. 训练过程 8
  3. 实验结果 18
    四、分析与总结 20
  4. 实验分析 20
  5. 心得体会 20

一、问题分析

##1.问题描述
随着城市道路交通的发展,交通标示作为智能交通系统的重要组成,对交通安全起到至关重要的作用,因此如何快速准确的定位及分类出交通标志被广泛研究。自然场景下的交通标志有着显著的颜色及形状特征,对交通标志的检测及识别提供了有利条件,但因光照多变,相近背景干扰及交通标志在场景图像所占比例较小,特征提取不足等问题,一定程度上影响了交通标志的检测及识别准确率。
如何快速、准确地定位图片或是视频中的交通标志,受到了许多研究人员的关注。
##2. 数据集分析
本次课程实验基于6000余张实景照片,标注其中所有的交通标志,实际
分类为5类。实际训练数据为实际场景下的照片,具备一定的实用性。
训练图片
其中,照片的尺寸不完全相同,有12801024,也有720576等规格。

##3. 数据集标注
采用标注软件为colabeler。
在这里插入图片描述
得到两个文件夹,分别放置图片与标签。
在这里插入图片描述
得到6336个对应照片的xml标注文件,其内容如下所示(举例)。
在这里插入图片描述
由于后期采用的网络框架为yolo,需要特定的标注格式,后期编写代码进行更改。

二、实验原理

基于论文You Only Look Once:Unified, Real-Time Object Detection.
论文摘要
提出了一种新的目标检测方法YOLO。先前关于对象检测的工作将重新定义分类器来执行检测。相反,我们将对象检测定义为一个回归问题,回归到空间分离的边界框和相关的类概率。在一次评估中,单个神经网络直接从完整图像预测边界盒和类概率。由于整个检测管道是一个单一的网络,可以直接从检测性能上进行端到端优化。我们的统一架构非常快。我们的基本YOLO模型以每秒45帧的速度实时处理图像。一个更小版本的网络,Fast YOLO,处理速度达到惊人的每秒155帧,同时仍然达到其他实时探测器地图的两倍。与最先进的检测系统相比,YOLO会产生更多的定位错误,但不太可能预测背景上的误报。最后,YOLO学习对象的一般表示。当从自然图像推广到艺术作品等其他领域时,它的性能优于其他检测方法,包括DPM和R-CNN。
方法:YOLO将输入图像分成SxS个格子,每个格子负责检测‘落入’该格子的物体。何为之落入?若某个物体的中心位置的坐标落入到某个格子,那么这个格子就负责检测出这个物体。如下图所示,图中物体狗的中心点(红色原点)落入第5行、第2列的格子内,所以这个格子负责预测图像中的物体狗。在这里插入图片描述

每个格子输出B个bounding box(包含物体的矩形区域)信息,以及C个物体属于某种类别的概率信息。Bounding box信息包含5个数据值,分别是x,y,w,h,和confidence。其中x,y是指当前格子预测得到的物体的bounding box的中心位置的坐标。w,h是bounding box的宽度和高度。注意:实际训练过程中,w和h的值使用图像的宽度和高度进行归一化到[0,1]区间内;x,y是bounding box中心位置相对于当前格子中心?位置的偏移值,并且被归一化到[0,1]。confidence反映当前bounding box是否包含物体以及物体位置的准确性,计算方式如下:
confidence = P(object)* IOU
其中,若bounding box包含物体,则P(object) = 1;否则P(object) = 0。
IOU(intersection over union)为预测bounding box与物体真实区域的交集面积(以像素为单位,用真实区域的像素面积归一化到[0,1]区间)。
因此,YOLO网络最终的全连接层的输出维度是 SS(B5 + C)。YOLO论文中,作者训练采用的输入图像分辨率是448x448,S=7,B=2;采用VOC 20类标注物体作为训练数据,C=20。因此输出向量为77*(20 + 25)=1470维。作者开源出的YOLO代码中,全连接层输出特征向量各维度对应内容如下:
在这里插入图片描述
Loss函数
YOLO使用均方和误差作为loss函数来优化模型参数,即网络输出的S
S*(B5 + C)维向量与真实图像的对应SS*(B*5 + C)维向量的均方和误差。如下式所示。
在这里插入图片描述(分别为坐标误差+IOU误差+分类误差求和作为总的loss误差)
内部网络架构
在这里插入图片描述
网络的初始卷积层从图像中提取特征,全连通层预测输出概率和坐标。有24层卷积层+2层全连接层。(yolov3有改进)

三、实验过程

  1. 实验环境
    采用darknet(https://github.com/AlexeyAB/darknet)框架,系统为Ubuntu16环境下,gpu训练,python3.6编写脚本进行预数据数据处理以及得到最终结果。
  2. 训练过程
    1.数据预处理:
    将所有的训练图片写入图片路径记录文本txt中,一行一个文件路径(绝对路径)。所使用的sh脚本为creatallpng.sh。(creatallpng.sh放在图片相同的路径下)脚本内容如下
    #code
    ls -R /home/pi/darknet/data/JPEGImages/*.png > allpng.txt
    在该路径下运行该脚本,得到所有的图片的绝对路径。如下所示。
    在这里插入图片描述
    得到的txt为:
    在这里插入图片描述
    xml文件转换为txt格式
import xml.etree.ElementTree as ET
import pickle
import os
from os import listdir, getcwd
from os.path import join

sets=[('2018', 'train6336')]#读取要转换的xml的目录,这里只涉及训练集
#分为5类
classes = ["j", "z","s","l","d"]

#将xmin,ymin,xmax,ymax归一化到0-1之间

def convert(size, box):
    dw = 1./size[0]
    dh = 1./size[1]
    x = (box[0] + box[1])/2.0
    y = (box[2] + box[3])/2.0
    w = box[1] - box[0]
    h = box[3] - box[2]
    x = x*dw
    w = w*dw
    y = y*dh
    h = h*dh
    return (x,y,w,h)
#转换xml至txt
def convert_annotation(year, image_id):
    in_file = open('/home/wangxutao/darknet/voc/VOC%s/Annotations/%s.xml'%(year, image_id))
    #新生成的txt,写入到labels文件夹内
    out_file = open('/home/wangxutao/darknet/voc/VOC%s/labels/%s.txt'%(year, image_id), 'w')
    tree=ET.parse(in_file)
    root = tree.getroot()
    size = root.find('size')
    w = int(size.find('width')<
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值