基于Yolov5的吸烟行为识别检测
文章目录
- 前言
- 一、数据集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的吸烟行为识别检测相关推荐
- 【目标检测】YOLO v5 吸烟行为识别检测
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 YOLO v5 吸烟行为目标检测模型:计算机配置.制作数据集.训练.结果分析和使用 前言 相关连接(look评论) 一.计算机配置 p ...
- 基于yolov5的Android版本目标检测app开发(部署安卓手机)
基于yolov5的Android版本目标检测app开发(部署安卓手机) 0.项目开发需求 (1)开发app部署到安卓手机 (2)支持VOC数据集上所有的目标检测 1.开发环境搭建 windows10+ ...
- Python基于YOLOv5的交通标志识别系统[源码]
1.图片演示: 2.视频演示: [项目分享]Python基于YOLOv5的交通标志识别系统[源码&技术文档&部署视频&数据集]_哔哩哔哩_bilibili 3.标注好的数据集: ...
- 基于YOLOv5的智慧工地安全帽检测(1)
基于YOLOv5的智慧工地安全帽检测 数据集+代码下载地址:下载地址
- 基于YOLOV5的FPS类游戏检测auto aim
FPSAutomaticAiming--基于YOLOV5的FPS类游戏检测auto aim Github地址:github 简介 本项目基于yolov5,实现了一款FPS类游戏的检测,旨在使用现有网络 ...
- matlab车牌识别 复杂环境,基于MATLAB复杂背景车牌识别检测系统
基于MATLAB复杂背景车牌识别检测系统 1.选题目的和意义 在复杂背景车牌识别检测系统中,由于拍摄时的光照条件.牌照的整洁程度的影响,和摄像机的焦距调整.镜头的光学畸变所产生的噪声都会不同程度地造成 ...
- 基于Yolov5的玻璃瓶盖缺陷检测
1.数据集介绍 缺陷类型:cap 数据集数量:125张 数据集:https://download.csdn.net/download/m0_63774211/87741211 1.1 通过spli ...
- 基于YOLOv5和U-NET的火灾检测与分割
1.文章信息 本次介绍的文章是发表在EUSIPCO 2021的一篇基于计算机视觉的火灾检测文章. 2.摘要 当今世界面临的环境危机是对人类的真正挑战.对人类和自然的一个显著危害是森林火灾的数量不断增加 ...
- 基于YOLOv5的输电线路绝缘子缺陷检测项目
目录 1 项目背景 2 图像数据集介绍 3 模型训练部分 4 模型性能测试 1 项目背景 随着输电网络规模不断增大,输电线路巡检任务日益加重,实现输电 线路的高效率巡检已刻不容缓.传统的巡检技术较为落 ...
最新文章
- Java项目:CRM客户关系管理系统(java+Springboot+maven+mysql)
- 如何实现良好的隔空操作体验
- P3374 【模板】树状数组 1
- Matlab神经网络十讲(7): Self-Organizing and LVQ Networks
- Storm配置文件中主要参数配置说明
- 关于SPFA Bellman-Ford Dijkstra Floyd BFS最短路的共同点与区别
- linux之uniq命令
- np.c_和np.r_的用法解析
- Android 图片混排富文本编辑器控件
- Android Application基本组成部分
- 无法更新标识列 wechatid_宿州售楼处精神堡垒生产厂家-弈博标识标牌制造
- 主成分分析法(三):计算步骤
- Chrome下载文件,文件名出现乱码解决
- 自动化学科前沿讲座分享,作业,自动化与人工智能
- android中实现图片圆形效果
- 平衡二叉树(Balanced Binary Tree)
- for循环语句求数组当中的最大元素
- 华尔街最“伟大”骗子排行榜!
- 在网页上嵌入微博--微博秀
- 电阻、电容及电感的高频等效电路及特性曲线
热门文章