文章目录

  • 前言
  • 一、数据集smoke_data
    • 1、Annotations文件夹
    • 2、ImageSets/Main文件夹
    • 3、JPEGImages文件夹
  • 二、数据集划分
  • 三、使用labelimg工具标注
  • 四、将数据集格式转化成yolo_txt格式
  • 五、增加自定义数据集文件
  • 六、修改模型文件yolov5s.yaml
  • 七、训练
  • 八、测试

前言

  上一篇《win10系统下Yolov5目标检测环境搭建(Anaconda3+Pytorch+Yolov5,CPU,无GPU)》中,介绍了win10系统下yolov5的环境搭建步骤,本篇在此环境下,实现吸烟行为识别检测。

一、数据集smoke_data

1、Annotations文件夹

存放labelimg标注工具生成的.xml标注文件,每一张图片对应一个xml文件

2、ImageSets/Main文件夹

存放train.txt,val.txt,test.txt和trainval.txt文件

3、JPEGImages文件夹

存放待训练的图片文件,我使用的所有图片都为jpg格式

二、数据集划分

新建split_train_val.py文件,其作用主要是生成train.txt,val.txt,test.txt和trainval.txt文件,生成的这些文件,存放在ImageSets/Main文件夹下。py脚本内容如下:

# coding:utf-8import os
import random
import argparseparser = argparse.ArgumentParser()
#xml文件的地址,根据自己的数据进行修改 xml一般存放在Annotations下
parser.add_argument('--xml_path', default='smoke_data/Annotations', type=str, help='input xml label path')
#数据集的划分,地址选择自己数据下的ImageSets/Main
parser.add_argument('--txt_path', default='smoke_data/ImageSets/Main', type=str, help='output txt label path')
opt = parser.parse_args()trainval_percent = 0.9
train_percent = 0.9
xmlfilepath = opt.xml_path
txtsavepath = opt.txt_path
total_xml = os.listdir(xmlfilepath)
if not os.path.exists(txtsavepath):os.makedirs(txtsavepath)num = len(total_xml)
list_index = range(num)
tv = int(num * trainval_percent)
tr = int(tv * train_percent)
trainval = random.sample(list_index, tv)
train = random.sample(trainval, tr)file_trainval = open(txtsavepath + '/trainval.txt', 'w')
file_test = open(txtsavepath + '/test.txt', 'w')
file_train = open(txtsavepath + '/train.txt', 'w')
file_val = open(txtsavepath + '/val.txt', 'w')for i in list_index:name = total_xml[i][:-4] + '\n'if i in trainval:file_trainval.write(name)if i in train:file_train.write(name)else:file_val.write(name)else:file_test.write(name)file_trainval.close()
file_train.close()
file_val.close()
file_test.close()

执行命令,如下:

python split_train_val.py

可以看到上述txt文件,已经生成,如下:

三、使用labelimg工具标注

进入之前建立的pytorch环境,安装labelimg,命令如下:

pip install labelimg


输入labelimg命令,启动,如下:

选择使用“PascalVOC”格式;
点击“open dir”按钮,选择JPEGImages文件夹目录;
点击“change save dir”按钮,选择Annotations文件夹目录;
点击“create RectBox”按钮,选择区域进行标注;
标注完成后,点击“save”按钮,进行保存,xml会存放在Annotations文件夹下。

四、将数据集格式转化成yolo_txt格式

  即将xml文件转化成txt文件,每一张图片对应一个txt文件,文件中每一行对应一个目标信息,包括class, x_center, y_center, width和height。
  新建voc_label.py脚本,将classes 里面的内容改成自己的类别,若是多个类别,则用逗号分隔,内容如下:

# -*- coding: utf-8 -*-
import xml.etree.ElementTree as ET
import os
from os import getcwdsets = ['train', 'val', 'test']
classes = ["smoke"]   # 改成自己的类别
abs_path = os.getcwd()
print(abs_path)def convert(size, box):dw = 1. / (size[0])dh = 1. / (size[1])x = (box[0] + box[1]) / 2.0 - 1y = (box[2] + box[3]) / 2.0 - 1w = box[1] - box[0]h = box[3] - box[2]x = x * dww = w * dwy = y * dhh = h * dhreturn x, y, w, hdef convert_annotation(image_id):in_file = open('F:/SVN-ZJKY/YiFeiShouJiRobot/yolov5-master/smoke_data/Annotations/%s.xml' % (image_id), encoding='UTF-8')out_file = open('F:/SVN-ZJKY/YiFeiShouJiRobot/yolov5-master/smoke_data/labels/%s.txt' % (image_id), 'w')tree = ET.parse(in_file)root = tree.getroot()size = root.find('size')w = int(size.find('width').text)h = int(size.find('height').text)for obj in root.iter('object'):difficult = obj.find('difficult').text# difficult = obj.find('Difficult').textcls = obj.find('name').textif cls not in classes or int(difficult) == 1:continuecls_id = classes.index(cls)xmlbox = obj.find('bndbox')b = (float(xmlbox.find('xmin').text), float(xmlbox.find('xmax').text), float(xmlbox.find('ymin').text),float(xmlbox.find('ymax').text))b1, b2, b3, b4 = b# 标注越界修正if b2 > w:b2 = wif b4 > h:b4 = hb = (b1, b2, b3, b4)bb = convert((w, h), b)out_file.write(str(cls_id) + " " + " ".join([str(a) for a in bb]) + '\n')wd = getcwd()
for image_set in sets:if not os.path.exists('F:/SVN-ZJKY/YiFeiShouJiRobot/yolov5-master/smoke_data/labels/'):os.makedirs('F:/SVN-ZJKY/YiFeiShouJiRobot/yolov5-master/smoke_data/labels/')image_ids = open('F:/SVN-ZJKY/YiFeiShouJiRobot/yolov5-master/smoke_data/ImageSets/Main/%s.txt' % (image_set)).read().strip().split()list_file = open('smoke_data/%s.txt' % (image_set), 'w')for image_id in image_ids:list_file.write(abs_path + '/smoke_data/images/%s.jpg\n' % (image_id))convert_annotation(image_id)list_file.close()

执行命令,如下:

python voc_label.py

运行该脚本,会生成labels文件夹和三个包含数据集的txt文件,即该脚本的作用:将训练集、验证集、测试集生成label标签(训练中要用到),同时将数据集路径导入txt文件中。如下:

其中,labels文件夹,存放xml文件转化后的txt文件;
train.txt文件,记录的是训练集图像绝对路径;
test.txt文件,记录的是测试集图像绝对路径;
val.txt文件,记录的是验证集图像绝对路径;

五、增加自定义数据集文件

在yolov5-master/data/文件夹下,新建smoke_data.yaml文件,内容如下:

train: F:/SVN-ZJKY/YiFeiShouJiRobot/yolov5-master/smoke_data/train.txt
val: F:/SVN-ZJKY/YiFeiShouJiRobot/yolov5-master/smoke_data/val.txt
test: F:/SVN-ZJKY/YiFeiShouJiRobot/yolov5-master/smoke_data/test.txt# Classes
nc: 1  # number of classes
names: ['smoke']  # class names

注意:修改自己对应的类别个数和类别名。

六、修改模型文件yolov5s.yaml

我选择使用的是yolov5s模型,进入yolov5-master/model/文件夹下,找到yolov5s.yaml文件,修改对应的类别个数nc,如下:

# YOLOv5 												

基于Yolov5的吸烟行为识别检测相关推荐

  1. 【目标检测】YOLO v5 吸烟行为识别检测

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 YOLO v5 吸烟行为目标检测模型:计算机配置.制作数据集.训练.结果分析和使用 前言 相关连接(look评论) 一.计算机配置 p ...

  2. 基于yolov5的Android版本目标检测app开发(部署安卓手机)

    基于yolov5的Android版本目标检测app开发(部署安卓手机) 0.项目开发需求 (1)开发app部署到安卓手机 (2)支持VOC数据集上所有的目标检测 1.开发环境搭建 windows10+ ...

  3. Python基于YOLOv5的交通标志识别系统[源码]

    1.图片演示: 2.视频演示: [项目分享]Python基于YOLOv5的交通标志识别系统[源码&技术文档&部署视频&数据集]_哔哩哔哩_bilibili 3.标注好的数据集: ...

  4. 基于YOLOv5的智慧工地安全帽检测(1)

    基于YOLOv5的智慧工地安全帽检测 数据集+代码下载地址:下载地址

  5. 基于YOLOV5的FPS类游戏检测auto aim

    FPSAutomaticAiming--基于YOLOV5的FPS类游戏检测auto aim Github地址:github 简介 本项目基于yolov5,实现了一款FPS类游戏的检测,旨在使用现有网络 ...

  6. matlab车牌识别 复杂环境,基于MATLAB复杂背景车牌识别检测系统

    基于MATLAB复杂背景车牌识别检测系统 1.选题目的和意义 在复杂背景车牌识别检测系统中,由于拍摄时的光照条件.牌照的整洁程度的影响,和摄像机的焦距调整.镜头的光学畸变所产生的噪声都会不同程度地造成 ...

  7. 基于Yolov5的玻璃瓶盖缺陷检测

    1.数据集介绍 缺陷类型:cap 数据集数量:125张 数据集:https://download.csdn.net/download/m0_63774211/87741211   1.1 通过spli ...

  8. 基于YOLOv5和U-NET的火灾检测与分割

    1.文章信息 本次介绍的文章是发表在EUSIPCO 2021的一篇基于计算机视觉的火灾检测文章. 2.摘要 当今世界面临的环境危机是对人类的真正挑战.对人类和自然的一个显著危害是森林火灾的数量不断增加 ...

  9. 基于YOLOv5的输电线路绝缘子缺陷检测项目

    目录 1 项目背景 2 图像数据集介绍 3 模型训练部分 4 模型性能测试 1 项目背景 随着输电网络规模不断增大,输电线路巡检任务日益加重,实现输电 线路的高效率巡检已刻不容缓.传统的巡检技术较为落 ...

最新文章

  1. Java项目:CRM客户关系管理系统(java+Springboot+maven+mysql)
  2. 如何实现良好的隔空操作体验
  3. P3374 【模板】树状数组 1
  4. Matlab神经网络十讲(7): Self-Organizing and LVQ Networks
  5. Storm配置文件中主要参数配置说明
  6. 关于SPFA Bellman-Ford Dijkstra Floyd BFS最短路的共同点与区别
  7. linux之uniq命令
  8. np.c_和np.r_的用法解析
  9. Android 图片混排富文本编辑器控件
  10. Android Application基本组成部分
  11. 无法更新标识列 wechatid_宿州售楼处精神堡垒生产厂家-弈博标识标牌制造
  12. 主成分分析法(三):计算步骤
  13. Chrome下载文件,文件名出现乱码解决
  14. 自动化学科前沿讲座分享,作业,自动化与人工智能
  15. android中实现图片圆形效果
  16. 平衡二叉树(Balanced Binary Tree)
  17. for循环语句求数组当中的最大元素
  18. 华尔街最“伟大”骗子排行榜!
  19. 在网页上嵌入微博--微博秀
  20. 电阻、电容及电感的高频等效电路及特性曲线

热门文章

  1. Android 8.0 创建管理通知渠道Notification
  2. 人工智能专业世界大学排行榜,2022最新
  3. 【场景化解决方案】钉钉财务审批同步金蝶云星空
  4. foobar 2000适合用来听无损音乐的原因
  5. 有关国内地图坐标系之间相互转换
  6. 封装头部可拖拽的弹出框
  7. IoT产品的10个最佳实践
  8. 误码率与信噪比的关系matlab,一种误码率和信噪比关系的分析方法与流程
  9. 神州数码:防火墙上配置NAT
  10. 果园机器人反思稿_语文《果园机器人》教学反思