基于YOLOv3算法的交通标志识别系统实现流程(个人学习笔记,仅当参考!!)

2023-10-29

总流程

在这里插入图片描述

安装darknet

本文利用linux操作系统上安装的Darknet开源轻型深度学习框架,为了提高训练速度利用CUDA和OPENCV 进行编译,完成对YOLO v3算法LISA数据集中四类不同的交通标志的训练及测试,实现对视频中运动着的目标交通标志的实时检测识别。
官网: https://pjreddie.com/darknet/yolo/
1)克隆Darkent

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

2)编译项目

cd darknet
make

3)下载预训练权重文件

wget https://pjreddie.com/media/files/yolov3.weights

4)测试CPU版本的Darknet

./darknet detect cfg/yolov3.cfg yolov3.weights data/horses.jpg

5)使用CUDA和OPENCV进行编译
修改darknet的makefile配置文件

GPU=1
CUDNN=1
OPENCV=1

6)然后执行

make clean
make

7)测试GPU版本的yolo

./darknet detect cfg/yolov3.cfg yolov3.weights data/dog.jpg

OPENCV编译

./darknet imtest data/eagle.jpg

CPU与GPU版本yolo测试结果对比在这里插入图片描述
OPENCV测试结果图像
从以上对比可以看出,GPU版本的yolo要比CPU版本的yolo检测速度 快很多,对于大数据的数据集而言,经常使用GPU进行编译。

整理LISA数据集

LISA交通标志数据集是一组包含美国交通标志的视频和带注释的图像。它分为两个阶段发布,一个阶段只有图片,另一个阶段既有图片也有视频。整个数据集包括47种不同的交通标志,总共含有6610张图像可以用来交通标志的识别检测,具有不同的分辨率,低分辨率为640 480,高分辨率为1024 522,同样,图片上标注框的分辨率也不同,低分辨率为6 6,高分辨率为167 168。传统的图像处理必须经过图像二值化[15]操作,但LISA数据集中的图片既有彩色的又有灰度的,并且每个标志都标注了标志类型、位置、大小、堵塞(是/否)、侧道(是/否),所有注释都保存在纯文本的.csv文件中。数据集的完整版本包括所有带注释的符号的视频,本文便利用数据集中的测试视频进行测试。LISA数据集还有一个优点就是它提供了一组Python工具,用于处理注释和轻松地从数据集中提取相关符号,便于处理。本项目检测四种交通标志:“stop”,“pedestrianCrossing”,“signalAhead”,“speedLimit”。
因为原始的LISA数据集的每个标注都采用的以纯文本形式存储表格数据的csv格式,csv格式不具有通用标准,所以在后续的网络模型的训练及测试过程很容易出现错误,导致无法训练。为了避免这种错误的产生,需要预先将LISA数据集的.csv格式的标注转换成电子表格.xml的格式。xml相比于csv而言数据集中的图像均有标签注解,清楚明了不易出错,并用树形结构存储数据,灵活可扩展。
在linux操作系统上使用格式转换命令后将得到5373个.xml格式的新标注并建立了新的目录格式,将训练和测试使用的四类不同的交通标志图像保存在固定文件中,确定它的名称和路径并保存。
数据集格式转换

sudo pip install Jinja2-2.10.1-py2.py3-none-any.whl
python parse_lisa.py LISA_TS/allAnnotations.csv

执行该命令后将建立PACSAL VOC目录格式:
文件夹层次为 darknet / VOCdevkit / VOC2007
VOC2007下面建立两个文件夹:Annotations和JPEGImages
JPEGImages放所有的训练和测试图片,Annotations放所有的xml标记文件
在VOCdevkit / VOC2007目录下可以看到生成了文件夹labels ,同时在darknet下生成了两个文件2007_train.txt和2007_test.txt。2007_train.txt,2007_test.txt分别给出了训练图片文件和测试图片文件的列表,含有每个图片的路径和文件名。另外,在VOCdevkit / VOC2007/ImageSets/Main目录下生产了两个文件test.txt和train.txt,分别给出了训练图片文件和测试图片文件的列表,但只含有每个图片的文件名(不含路径和扩展名)。labels下的文件是images文件夹下每一个图像的yolo格式的标注文件,这是由annotations的xml标注文件转换来的。
在这里插入图片描述

修改网络配置文件

1)新建data/voc.names文件
可以复制data/voc.names再根据自己情况的修改;可以重新命名如:data/voc-lisa.names
2)新建 cfg/voc.data文件
可以复制cfg/voc.data再根据自己情况的修改;可以重新命名如:cfg/voc-lisa.data
3)新建cfg/yolov3-voc.cfg
可以复制cfg/yolov3-voc.cfg再根据自己情况的修改;可以重新命名cfg/yolov3-voc-lisa.cfg: 在cfg/yolov3-voc.cfg文件中,三个yolo层和各自前面的conv层的参数需要修改:
三个yolo层都要改:yolo层中的class为类别数,每一个yolo层前的conv层中的filters =(类别+5)* 3
yolo层 classes=4,conv层 filters=27
4) 训练建议
batch=64
subdivisions=16 (显存大时可用8) 把max_batches设置为 (classes*2000);例如如果训练4个目标类别,max_batches=8000
把steps改为max_batches的80% and 90%;例如steps=6400, 7200
为增加网络分辨率可增大height和width的值,但必须是32的倍数 .cfg-file (height=608, width=608 or any
value multiple of 32) 。这有助于提高检测精度。
因此训练时使用
sudo pip install Jinja2-2.10.1-py2.py3-none-any.whl python parse_lisa.py LISA_TS/allAnnotations.csv
batch=64
subdivisions=16
width=608
height=608
max_batches = 8000
policy=steps
steps=6400,7200
在这里插入图片描述
在这里插入图片描述

训练网络模型

1)在 darknet 目录下载权重文件:

wget https://pjreddie.com/media/files/darknet53.conv.74

2)训练

./darknet detector train cfg/voc-lisa.data cfg/yolov3-voc-lisa.cfg darknet53.conv.74

如需要存储训练日志,执行

./darknet detector train cfg/voc-lisa.data cfg/yolov3-voc-lisa.cfg darknet53.conv.74 2>1 | tee visualization/train_yolov3_lisa.log

输出消息为:
subdivisions输出:
在这里插入图片描述

Region 106 :网络层的索引为106
Region Avg IOU: 0.397296: 表示在当前l.batch(batch /= subdivs )内的图片的平均IOU
Class: 0.762366: 标注目标分类的正确率,期望该值趋近于1。
Obj: 0.337382: 检测目标的平均目标置信度,越接近1越好。
No Obj: 0.490547: 检测目标的平均目标性得分。
.5R: 0.333333:模型检测出的正样本(iou>0.5)与实际的正样本的比值。
.75R: 模型检测出的正样本(iou>0.75)与实际的正样本的比值。
count: 3:count后的值是当前l.batch(batch /= subdivs )内图片中包含正样本的图片的数量。

subdivisions输出显示了所有训练图片的一个批次,训练迭代包含16组,跟设定好的batch和subdivisions数值一致,这些样本分成16组送入网络参与训练,减轻内存占用的压力,82,94,106表示三个不同尺度上预测到的不同大小的参数。
batch输出:
在这里插入图片描述
5.迭代次数 2012.578125为总体的Loss值,2011.601318为平均Loss值。
3) 训练log文件分析

cd visualization

修改 extract_log.py文件,改动
extract_log(‘train_yolov3_lisa.log’,‘train_log_loss.txt’,‘images’)
extract_log(‘train_yolov3_lisa.log’,‘train_log_iou.txt’,‘IOU’)

python extract_log.py

得到两个文件: train_log_loss.txt, train_log_iou.txt
改变其中的lines的值。
然后,执行:

python train_loss_visualization.py
python train_iou_visualization.py

得到avg_loss.png和Region Avg IOU.png
在这里插入图片描述
在这里插入图片描述
观察平均LOSS曲线和平均IOU曲线,发现平均LOSS曲线呈下降趋势并逐渐趋于0,平均IOU曲线呈上升趋势并逐渐趋于1,训练性能较好。

测试网络模型

挑选一张不属于训练集中的一张图进行测试:

./darknet detector test cfg/voc-lisa.data cfg/yolov3-voc-lisa-test.cfg backup/yolov3-voc- lisa_final.weights testfiles/img1.jpg

测试结果:
在这里插入图片描述
可以看到检测时间为28.065毫秒,图片中的‘stop’交通标志被100%识别出来。
测试视频:

./darknet detector demo cfg/voc-lisa.data cfg/yolov3-voc-lisa-test.cfg backup/yolov3-voc- lisa_final.weights testfiles/sd.mp4

计算mAP

./darknet detector valid cfg/voc-lisa.data cfg/yolov3-voc-lisa-test.cfg backup/yolov3- voc-lisa_final.weights
python reval_voc.py --voc_dir /home/bai/darknet/VOCdevkit --year 2007 --image_set test - -classes /home/bai/darknet/data/voc-lisa.names testLisa

画出PR曲线

python draw_pr.py

PR曲线也称为查全率查准率曲线,若该曲线越接近(1,1)坐标点,则越说明该分类器性能好。

根据白勇老师相关课程学习:链接: https://edu.51cto.com/course/18279.html.

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

基于YOLOv3算法的交通标志识别系统实现流程(个人学习笔记,仅当参考!!) 的相关文章

随机推荐

  • LeetCode刷题——第一题 (两数之和)

    1 两数之和 题目描述 思路一 思路二 思路二 代码实现 题目描述 给定一个整数数组 nums 和一个目标值 target 请你在该数组中找出和为目标值的那 两个 整数 并返回他们的数组下标 你可以假设每种输入只会对应一个答案 但是 你不能
  • 为create-react-app 创建的应用, 添加less

    npm run eject 暴露webpack配置 修改webpack config js 配置 1 添加 less 正则 const lessRegex less const lessModuleRegex module less 2 添
  • 文件服务器fuse,FUSE 扩展

    FUSE扩展 在Seafile系统上文件被分割成数据块 这意味着在你的Seafile服务器上存储的并不是完整的文件而是数据块 这种设计能够方便有效的运用数据去重技术 然而 有时系统管理员想要直接访问服务器上的文件 你可以使用seaf fus
  • 解决微信小程序报[ app.json 文件内容错误] app.json: app.json 未找到,未找到入口 app.json 文件,或者文件读取失败,请检查后重新编译。小程序app.json报错

    编译报错 app json 文件内容错误 app json app json 未找到 原因 由于project config json文件的miniprogramRoot小程序根目录属性找不到aap json的路径 可能是错误的路径 也可能
  • 刷脸支付始于支付不止于支付

    始于支付 不止于支付 支付宝和微信的战争早已延伸至城市生活的方方面面 让办事不再复杂 今年6月 中国政务服务平台同时在支付宝和微信上线 用户可在线办理查询 缴费 申领证件 投诉等200多项政务服务 还与时俱进地上线了高考分数查询 垃圾分类指
  • C语言的三子棋,也就是井字棋。

    三子棋 程序员入门必须写的东西 包含了C语言初级阶段所有的知识点 比如 do while 循环 while循环 for循环 if else语句 switch语句 二维数组 函数等等 如果要写出三子棋 这些知识点必不可少 三子棋可以分成五步
  • 【QT】——多线程的使用

    目录 基本概念 1 线程类QThread 1 1信号和槽 1 2静态函数 1 3 任务处理函数 2 实例 第一种方式 第二种方式 基本概念 默认的线程在Qt中称之为窗口线程 也叫主线程 负责窗口事件处理或者窗口控件数据的更新 子线程负责后台
  • 阿里云8888端口设置安全组,宝塔控制台显示链接失败

    问题 阿里云8888端口设置安全组 宝塔控制台显示链接失败 解决思路 在服务器ssh执行 etc init d bt restart 重启宝塔服务 刷新页面以能正常访问
  • CephFS 介绍及使用经验分享

    目录 Ceph架构介绍 NFS介绍 分布式文件系统比较 CephFS介绍 MDS介绍 5 1 单活MDS介绍 5 2 单活MDS高可用 CephFS遇到的部分问题 6 1 客户端缓存问题 6 2 务端缓存不释放 6 3 客户端夯住或者慢查询
  • Socket 中级篇(一)Socket断开后要自动重连的常用几种方法:Connected、心跳包、recv()返回值==-1等等。

    第一章 简介 抛出问题 参考 https www cnblogs com youxin p 4056041 html 功能方面比较简单就是client端与server端建立连接 然后发送消息给server 我在server端会使用专门的线程
  • OLED透明屏安装指南:准备工作、步骤和注意事项

    随着科技的不断发展 OLED透明屏作为一种新型的显示技术 逐渐得到了广泛的应用 OLED透明屏具有高透明度 高亮度和广视角等优势 可以实现透明显示效果 为商业展示 户外广告等领域提供了更广阔的空间 然而 正确的安装方法对于保证OLED透明屏
  • 自动火焰识别项目总结

    步骤分为图像获取 gt 图像预处理 gt 火焰图像分割 gt 火焰图像特征提取 gt 火焰识别 1 图像获取 视频或图片 2 图像预处理 预处理过程一般有数字化 几何变换 归一化 平滑 复原和增强等步骤 图像变换 图像增强 图像去噪 图像压
  • java实现文件下载功能

    目录 单个下载 流 1 设置响应类型和头信息 2 实现文件输出 单个下载 本地文件 1 文件读取 2 设置响应类型和头信息 3 实现文件输出 单个下载 网络文件 1 与服务器建立连接 2 设置响应类型和头信息 3 实现文件输出 压缩ZIP下
  • 第十二届蓝桥杯大赛模拟赛(网上最后一题题解大部分是错的)

    第十题 问题描述 小蓝在一个 n 行 m 列的方格图中玩一个游戏 开始时 小蓝站在方格图的左上角 即第 1 行第 1 列 小蓝可以在方格图上走动 走动时 如果当前在第 r 行第 c 列 他不能走到行号比 r 小的行 也不能走到列号比 c 小
  • 2020年,为什么你该学PHP?!!

    1676对于编程初学者来说一个开发顺手的代码编辑器很重要 可大多数人不了解代码编辑器有哪些 网上有很多种代码编辑器推荐 但是不知道这些代码编辑器哪个好用 所以 今天php中文网就为初学者推荐2020最好用的8个代码编辑器 代码编辑器排行榜
  • 聚类算法——KMeans算法(机器学习)

    KMeans算法 一 输入参数 n clusters 数据集将被划分成 n clusters个 簇 即k值以及 int optional default 8 一般需要选取多个k值进行运算 并用评估标准判断所选k值的好坏 以获得较好的聚类效果
  • 基于消息中间件解决分布式事务的开源框架Myth

    基于消息中间件的解决分布式事务框架 https github com yu199195 myth 1 rpc框架支持 dubbo motan springcloud 2 消息中间件支持 jms activimq amqp rabbitmq
  • uboot启动——lowlevel_init函数详解

    1 将lr寄存器中的值压栈 push lr lr寄存器保存的是函数返回地址 每个模式下只有一个lr寄存器 如果涉及多重函数调用 则lr寄存器会被覆盖 导致返回地址丢失 在之前已经初始化栈 所以这里可以将lr寄存器压栈 将来函数返回的时候再弹
  • 【网络】初识网络

    Linux初识网络 文章目录 Linux初识网络 网络 协议 协议分层 OSI七层模型 TCP IP五层 四层 模型 网络传输基本流程 数据包封装和分用 网络中的地址管理 IP地址 MAC地址 网络 协议 协议 是一种约定 计算机之间的传输
  • 基于YOLOv3算法的交通标志识别系统实现流程(个人学习笔记,仅当参考!!)

    总流程 安装darknet 本文利用linux操作系统上安装的Darknet开源轻型深度学习框架 为了提高训练速度利用CUDA和OPENCV 进行编译 完成对YOLO v3算法LISA数据集中四类不同的交通标志的训练及测试 实现对视频中运动