【基于YOLOv8的两轮车头盔检测算法 附训练数据集-源码】

文章介绍了使用YOLOv8深度学习算法对两轮车头盔进行实时检测的方法,包括数据集TWHD的收集、修改和划分,以及如何将VOC格式数据转换为YOLO所需的格式进行训练。
摘要由CSDN通过智能技术生成

实验结果展示

随着国家惩治行车不戴头盔违法行为的力度不断加大,双轮车(电动车与摩托车)头盔检测任务也越来越重要。为此,我们采用YOLOv8对头盔进行检测,从而有效遏制违法行为。
头盔检测结果1
头盔检测结果2

数据集

TWHD数据集

two wheeler helmet dataset 双轮车头盔检测数据集 原始数据集无法用于YOLOv8训练 因此,针对YOLOv8进行了针对性修改。修改后数据集链接:

数据集介绍

随着国家惩治行车不戴头盔违法行为的力度不断加大,双轮车(电动车与摩托车)头盔检测任务也越来越重要,为此我们收集数据并开源了TWHD(two wheeler helmet dataset),总计5448张图片,对图片中的双轮车与驾乘人员整体、未戴头盔的人头、戴头盔的人头进行定位与分类标注。按4:1的比例划分训练集与测试集。TWHD的数据集来自OSF dataset、bike helmet dataset以及网络爬虫,从OSF dataset随机抽取4710张图片并重新标注;此外为了丰富数据集背景、让神经网络区分自行车与双轮车(电动车、摩托车),还融合了来自bike helmet dataset以及网络爬虫的738张图片。

链接

https://gitee.com/bilibilee/TWHD

训练环境

训练环境采用YOLOv8

pip install Ultralytics

安装成功即可

主要代码

# Train/val/test sets as 1) dir: path/to/imgs, 2) file: path/to/imgs.txt, or 3) list: [path/to/imgs1, path/to/imgs2, ..]

train: ../datasets/images/train # train images (relative to 'path') 4 images
val: ../datasets/images/val  # val images (relative to 'path') 4 images
test: ../datasets/images/test # test images (optional)

# Ultralytics YOLO 🚀, AGPL-3.0 license
# YOLOv8-cls image classification model. For Usage examples see https://docs.ultralytics.com/tasks/classify

# Parameters
# Classes
#names:
#  0: without_helmet,
#  1: helmet,
#  2: two_wheeler

names:
  0: 'without_helmet'
  1: 'helmet'
  2: 'two_wheeler'
from ultralytics import YOLO

model = YOLO('yolov8n.yaml')  # build a new model from YAML
# Load a model
model = YOLO('yolov8n.pt')  # load a pretrained model (recommended for training)

# Train the model
results = model.train(data=r'mydata.yaml', epochs=100, imgsz=640)
import xml.etree.ElementTree as ET
import os
import shutil
"""
完成操作:
读取每个集中的文件名
图片分类
标签 xml读取、解析、分类至TXT
"""
path_VOC_datasets = 'F:\DataSets\VOCdevkit\helmetdataset'  # VOC格式数据集地址
path_train_set = 'ImageSets\\Main\\train.txt'  # 训练集文件地址
path_val_set = 'ImageSets\\Main\\val.txt'  # 验证集文件地址
path_test_set = 'ImageSets\\Main\\test.txt'  # 测试集文件地址
path_labels = 'Annotations'  # 标签信息地址
path_images = 'JPEGImages'  # 图片信息地址

# 地址整合
path_train_set = os.path.join(path_VOC_datasets, path_train_set)
path_val_set = os.path.join(path_VOC_datasets, path_val_set)
path_test_set = os.path.join(path_VOC_datasets, path_test_set)
path_labels = os.path.join(path_VOC_datasets, path_labels)
path_images = os.path.join(path_VOC_datasets, path_images)

path_yolo_datasets = 'F:\DataSets\VOCdevkit\yolov8' # YOLO格式数据集地址
path_train_images = 'train\\images'  # 训练集图片地址
path_train_labels = 'train\\labels'  # 训练集标签地址
path_val_images = 'val\\images'  # 验证集图片地址
path_val_labels = 'val\\labels'  # 验证集标签地址
path_test_images = 'test\\images'  # 测试集图片地址
path_test_labels = 'test\\labels'  # 测试集标签地址

# 地址整合
path_train_images = os.path.join(path_yolo_datasets, path_train_images)
path_train_labels = os.path.join(path_yolo_datasets, path_train_labels)
path_val_images = os.path.join(path_yolo_datasets, path_val_images)
path_val_labels = os.path.join(path_yolo_datasets, path_val_labels)
path_test_images = os.path.join(path_yolo_datasets, path_test_images)
path_test_labels = os.path.join(path_yolo_datasets, path_test_labels)

# 文件后缀名
f_image_ext = '.jpg'
f_xml_ext = '.xml'
f_txt_ext = '.txt'

# yaml文件中类别名和标号对应字典
dict_name_class = {
    'without_helmet': 0,
    'helmet': 1,
    'two_wheeler': 2
}

# VOC格式标号读取
# filename:文件路径
def read_file(filename):
    file = open(filename, 'r')
    text_line = file.readlines()
    for i in range(len(text_line)):
        text_line[i] = text_line[i][:-1]
    file.close()
    return text_line

# 复制图片函数
# set:列表,读取到的文件标号
# file_extension:文件扩展名
# source:原数据集地址
# target_folder:目标文件夹
def copy_file(set, file_extension, source, target_folder):
    for i in range(len(set)):
        filename = os.path.join(source, set[i]) + file_extension
        try:
            shutil.copy(filename, target_folder)
        except IOError as e:
            print("Unable to copy file. %s" % e)
            exit(1)


#  source:xml原路径 target_folder:写入txt路径
# VOC格式xml文件读取,分析,转化为txt,并写入目标文件夹
# set:列表,读取到的文件标号
# xml_ext:文件扩展名
# source:原数据集地址
# target_folder:目标文件夹
# txt_ext:文件扩展名
def VOC_to_TXT(set, xml_ext, source, target_folder, txt_ext):
    for i in range(len(set)):
        xml_file = os.path.join(source, set[i]) + xml_ext
        txt_file = os.path.join(target_folder, set[i]) + txt_ext

        tree = ET.parse(xml_file)
        root = tree.getroot()
        width = float(root.find('size').find('width').text)
        height = float(root.find('size').find('height').text)
        all_objects = root.findall('object')
        file = open(txt_file, 'w')
        for child in all_objects:
            print(child)
            num = dict_name_class[child.find('name').text]
            x_max = float(child.find('bndbox').find('xmax').text)
            y_max = float(child.find('bndbox').find('ymax').text)
            x_min = float(child.find('bndbox').find('xmin').text)
            y_min = float(child.find('bndbox').find('ymin').text)
            obj_x = (x_max + x_min) / width / 2.0
            obj_y = (y_max + y_min) / height / 2.0
            obj_width = (x_max - x_min) / width / 2.0
            obj_height = (y_max - y_min) / height / 2.0
            file.write(f'{num} {obj_x} {obj_y} {obj_width} {obj_height}\n')
        file.close()


# 读取每个集中图片名称
train_set = read_file(path_train_set)
val_set = read_file(path_val_set)
test_set = read_file(path_test_set)
print("Read Name Finish!")

#复制图片
# copy_file(train_set, f_image_ext, path_images, path_train_images)
# copy_file(val_set, f_image_ext, path_images, path_val_images)
# copy_file(test_set, f_image_ext, path_images, path_test_images)
# print("Copy Images Finish!")

# 转化xml到txt
# 读取H W,读取object的name、xymin、xymax,转换、计算,写入txt
VOC_to_TXT(train_set, f_xml_ext, path_labels, path_train_labels, f_txt_ext)
VOC_to_TXT(val_set, f_xml_ext, path_labels, path_val_labels, f_txt_ext)
VOC_to_TXT(test_set, f_xml_ext, path_labels, path_test_labels, f_txt_ext)
print("Convert Labels Finish!")

训练结果

训练结果
回归曲线
在这里插入图片描述在这里插入图片描述
在这里插入图片描述F1曲线

关键词

YOLOv8, 头盔检测, 两轮车安全, 实时对象检测, 深度学习, 计算机视觉, YOLOv8头盔检测算法, 两轮车头盔佩戴检测, 基于YOLOv8的安全监控, 摩托车头盔自动检测, 使用深度学习进行头盔识别, 智能交通系统中的头盔检测, 基于计算机视觉的安全装备检测, 如何使用YOLOv8检测头盔, YOLOv8在交通安全中的应用, 提高两轮车驾驶安全的技术, 深度学习如何帮助交通规则执行, 最新的头盔检测技术是什么

源码获取(包含数据集、训练权重)

源码下载

  • 24
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不冬眠的小钱学长

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值