昨儿立下来的flag,今天还是要含泪完成的,抓紧时间赶呀!!!

本次用yolov4来实现人佩戴安全帽检测,若未佩戴安全帽则将人脸框出来,若佩戴安全帽,则将安全帽以及人脸框出来,多说无益,直接看效果吧!!!

效果还是不错的,那么接下来就跟我一起进入yolov4的实操吧!!!

一、环境配置

老规矩,环境走起!!!本次采用pytorch框架来实现

  • Python: 3.7.4
  • Torch==1.2.0
  • Keras: 2.2.4
  • numpy:1.17.4

还是建议用anaconda通过虚拟环境的方式来快速搭建!

二、数据准备

本次采用安全帽佩戴检测的数据集,为voc格式的数据集。数据集含图片以及需要检测物体的位置信息。如下图所示:

三、YoloV4理论介绍

容我在正式开始介绍之前,要个抱抱!

由于yolov4的创新点很多,本次的话主要针对几个点介绍吧!

  • 网络的改进:主干特征提取网络的改进由DarkNet53变为CSPDarkNet53;并对特征提取网络也进行了改进,使用了SPP和PANet结构
  • 数据增强:使用了Mosaic数据增强方式
  • LOSS改进:使用CIOU作为回归LOSS
  • 激活函数改进:使用了MISH激活函数
  • 标签平滑Smoothing:一种用于防止数据过拟合的trick
  • 余弦退火学习率:可以使网络收敛速度加快
  • 自对抗训练:自对抗训练也是一种新的数据增强方法,可以一定程度上抵抗对抗攻击。

1.网络改进

a.主干提取网络:DarkNet53->CSPDarkNet53

其中具体关于CSPDarkNet53的介绍,可以先去看一下有关CSPNet这个网络,其用来增强CNN的学习能力。

CSPnet结构并不算复杂,就是将原来的残差块的堆叠进行了一个拆分,拆成左右两部分:

  • 主干部分继续进行原来的残差块的堆叠;
  • 另一部分则像一个残差边一样,经过少量处理直接连接到最后。

b.特征加强网络SPP

同上,具体有关SPP的介绍,参考SPPNet特征金字塔这个网络。

在特征加强网络SPP中,分别利用四个不同尺度的最大池化进行处理,其可以它能够极大地增加感受野,分离出最显著的上下文特征。最大池化的池化核大小分别为13x13、9x9、5x5、1x1(1x1即无处理)。

c.特征再次加强PANet网络结构

其在之后又采取了进一步反复的特征提取的工作,上采样,下采样,拼接等操作,其思路来源于2018年的PANet,一种实例分割算法,其具体结构由反复提升特征的意思特征金字塔从下到上的特征提取后,还需要实现(b)中从上到下的特征提取。

2.数据增强方式

采用Mosaic数据增强方式,即

将4张不同的图片镶嵌到一张图中,其优点是:

  • 混合四张具有不同语义信息的图片,可以让检测器检测超出常规语境的目标,增强模型的鲁棒性。
  • 由于BN是从四张图片计算得到的,所以可以减少对大的mini-batch的依赖。

3.CIOU回归LOSS

IoU是比值的概念即预测框和真实框的交集比并集,对目标物体的scale是不敏感的。然而常用的BBox的回归损失优化和IoU优化不是完全等价的,寻常的IoU无法直接优化没有重叠的部分。

于是有人提出直接使用IOU作为回归优化loss,CIOU是其中非常优秀的一种想法。

CIOU将目标与anchor之间的距离,重叠率、尺度以及惩罚项都考虑进去,使得目标框回归变得更加稳定,不会像IoU和GIoU一样出现训练过程中发散等问题。而惩罚因子把预测框长宽比拟合目标框的长宽比考虑进去。

4.MISH激活函数

激活函数改为Mish激活函数

5.Label Smoothing标签平滑

其主要针对之前的one-hot中存在的问题:

  • 无法保证模型的泛化能力,容易造成过拟合;
  • 全概率和0概率鼓励所属类别和其他类别之间的差距尽可能加大,而由梯度有界可知,这种情况很难适应。会造成模型过于相信预测的类别。

提出的一种针对one-hot的标签采取的措施:

new_onehot_labels = onehot_labels * (1 - label_smoothing) + label_smoothing / num_classes

例如:原始的标签是0、1,在平滑后变成0.005(如果是二分类)、0.995,也就是说对分类准确做了一点惩罚,让模型不可以分类的太准确,太准确容易过拟合。

6.余弦退火学习率

也是目前在pytorch框架中比较常见的trick,上升的时候使用线性上升,下降的时候模拟cos函数下降。执行多次。

9.自对抗的训练方式

针对这个还真没接触过,看网上的话作用是如下:

自对抗训练也是一种新的数据增强方法,可以一定程度上抵抗对抗攻击。其包括两个阶段,每个阶段进行一次前向传播和一次反向传播。

  • 第一阶段,CNN通过反向传播改变图片信息,而不是改变网络权值。通过这种方式,CNN可以进行对抗性攻击,改变原始图像,造成图像上没有目标的假象。
  • 第二阶段,对修改后的图像进行正常的目标检测。

其它的点,看日后有空是否能填坑吧!!!

四、训练过程

1.准备数据集

准备安全帽数据,使用VOC格式的数据进行训练

  • 训练前将标签文件放在VOCdevkit文件夹下的VOC2007文件夹下的Annotation中。
  • 训练前将图片文件放在VOCdevkit文件夹下的VOC2007文件夹下的JPEGImages中。
  • 在训练前利用voc2yolo4.py文件生成对应的txt。
VOCdevkit-VOC2007├─ImageSets    # 存放数据集列表文件,由voc2yolo3.py文件生成├─Annotations  # 存放数据集中图片文件├─JPEGImages   # 存放图片标签,xml 格式└─voc2yolo4.py # 用来生成数据集列表文件

2.运行生成Yolov4所需的数据

再运行根目录voc_annotation.py,运行前需要将voc_annotation文件中classes改成你自己的classes。
每一行对应其图片位置及其真实框的位置

3.修改voc_classes.txt

在训练前需要修改model_data里面的voc_classes.txt文件,需要将classes改成你自己的classes。

4.修改yolo_anchors.txt

运行kmeans_for_anchors.py生成yolo_anchors.txt

5.运行

运行train.py 或者train_with_tensorboard即可开始训练

  • 在main函数下:Cosine_lr参数可用于控制使用余弦退火衰减学习率
  • 在main函数下:mosaic参数用于控制实现mosaic数据增强
  • 在main函数下:smooth_label用于控制是否实现标签平滑
  • 在main函数下:model_path用于加载预训练模型
  • save_dir用于控制模型保存位置和tensorboard可视化保存的位置
  • 训练分两次:先冻结模型参数后解冻,两次采取不同的学习率

6.测试图片

运行predict_img.py,输入图片路径即可得到结果。

效果我觉得蛮好的,应该是比yolov3好些吧,当然我也用了efficientdet也尝试了,还没测试效果。这次就先到这里吧!!!

那这次就下次再更新吧,下次更新点一些之前做过的内容吧!!!当然手里头还有个抽烟的数据集,等之后拿efficientdet跑跑!!!

yolov4训练自己的数据集实现安全帽佩戴检测相关推荐

  1. YOLOv5在建筑工地中安全帽佩戴检测的应用(已开源+数据集)

    前言 Amusi 发现一个很棒的开源项目,利用YOLOv5进行目标检测的"落地化"应用:安全帽佩戴检测. 该项目使用了YOLOv5s.YOLOv5m.YOLOv5l来训练安全帽佩戴 ...

  2. 【目标检测】基于yolov5的安全帽佩戴检测系统(附代码和数据集)

    写在前面: 首先感谢兄弟们的订阅,让我有创作的动力,在创作过程我会尽最大能力,保证作品的质量,如果有问题,可以私信我,让我们携手共进,共创辉煌. 文末获取代码和数据集,请看检测效果: 1. 介绍 基于 ...

  3. 开源 | 安全帽佩戴检测数据集

    最近图像领域比较火热的两个方向都与复工复产相关,一方面是口罩识别,另一方面,就是智能工地安全领域中的安全帽佩戴检测,很多同学或许没想到印象的大工地现在已经随着计算机视觉领域的发展如此智能化了.人民的生 ...

  4. 【目标检测】基于yolov7的安全帽佩戴检测和识别(附代码和数据集,Ubuntu系统)

    写在前面: 首先感谢兄弟们的订阅,让我有创作的动力,在创作过程我会尽最大能力,保证作品的质量,如果有问题,可以私信我,让我们携手共进,共创辉煌. 本次项目是在Ubuntu系统上运行的,Windows系 ...

  5. Yolov4训练自己的数据集

    Yolov4训练自己的数据集 代码运行环境Ubuntu18.04+python3.6+显卡1080Ti+CUDA10.0+cudnn7.5.1+OpenCV3.4.6+Cmake3.12.2,详细环境 ...

  6. 一文多图搞定制作自己的VOC数据集+使用yolov4训练自己的数据集+封装video测试脚本(基于ubuntu)

    一文多图搞定制作自己的VOC数据集+使用yolov4训练自己的数据集+封装video测试脚本(基于ubuntu) 制作VOC数据集 标注自己的数据集 整理数据集路径格式 训练数据集 环境 在Linux ...

  7. 安全帽佩戴检测算法研究

    摘 要 安全帽佩戴监控是铁路工程施工人员安全管理中的重点和难点,它对检测算法的准确 率与检测速度都有较高的要求.本文提出一种基于神经网络架构搜索的安全帽佩戴检测算法 NAS-YOLO.该神经网络架构由 ...

  8. 基于YOLO模型的安全帽佩戴检测

    YOLO模型的基本原理 YOLO网络是一个以目标检测为目的而设计的网络.YOLO系列算法的基本思想是将输入图像分 割为S×S个单元格, 且每个单元格生成B 个边界框, 由被检测目标中心点所在的单元格负 ...

  9. YOLOv7之安全帽佩戴检测

    1. 准备工作 a. 下载新的数据集并转化成YOLOv7数据集格式  LabelImg:是一款开源的图像标注工具,标签可用于分类和目标检测,它是用python写的,并使用Qt作为其图形界面,简单好用( ...

最新文章

  1. mysql create table()_MySQL Create Table创建表
  2. python项目开发:ftp server开发
  3. java杀死自身并重启_java – android服务在应用程序被杀死时自动重启
  4. linux xargs与管道的区别
  5. 《数据库系统实训》实验报告——存储过程
  6. Android 4.4.2 动态添加JNI库方法记录 (一 JNI库层)
  7. 学习windows 应用层 inline hook 原理总结
  8. Linux per-cpu机制
  9. MapReduce:处理数据密集型文本处理–局部聚合第二部分
  10. vue点击按钮之后置成不可用_Vue 动态改变 button 的 disabled 状态
  11. [模拟|字符串] leetcode 6 Z字形变换
  12. 怎么用php myadmin连接远程MYSQL数据库
  13. 利用new Object创建对象
  14. 【#】Spring3 MVC 注解(二)---@RequestMapping
  15. POJ 2182 Lost Cows (线段树)
  16. python数据分析师网易云课堂_网易云课堂 数据分析(一)
  17. 法律基础(第六版)4
  18. oracle jdbc流式读取,在 Oracle Database 适配器中流式传输大型对象数据类型 - BizTalk Server | Microsoft Docs...
  19. 安全架构--10--企业安全防御体系建设总结
  20. 梦殇 chapter four

热门文章

  1. java se 09
  2. 来自西弗吉利亚大学li xin整理的CV代码合集(转)
  3. 最早开始WFH的人,已经被逼着996了……
  4. 【SCP文件传输】广域网下将外网文件传到内网服务器
  5. DataList控件与ItemTemplate的用法
  6. 卧槽!我居然把编译器整成了小霸王游戏机
  7. SEO与竞价的差别?
  8. 佛教和道教对“妖”的差异
  9. 微信照片视频打赏源码遮图赏图模糊图片打赏观看制作付费观看程序,微信打赏
  10. Java 工具(jmap,jstack)在linux上的源码分析(四)safe point