轮椅拐杖残疾人检测数据集 4400张 轮椅拐杖 标voc yolo

embedded/2024/12/22 20:04:27/

 轮椅拐杖残疾人检测数据集 4400张 轮椅拐杖 标voc yolo

2

分类名: (图片张数, 标注个数)
whee Ichair: (3766, 4460)
person_ crutch: (682, 693)
总数: (4448, 5153) .
总类(nc): 2类

轮椅拐杖残疾人检测数据集介绍

数据集概述
  • 名称:轮椅拐杖残疾人检测数据集
  • 用途:适用于从图像中检测和分类使用轮椅或拐杖的人
  • 格式:VOC和YOLO格式
  • 图像数量:4,448张
  • 标注数量:5,153个
  • 类别:包括轮椅(whee_chair)和使用拐杖的人(person_crutch)两类
数据集特点
  • 多样性:包含不同姿势、距离、角度的轮椅用户和使用拐杖的人,适应各种环境下的图像。
  • 高质量标注:每个图像都经过精确标注,提供边界框信息,适用于目标检测任务。
  • 实际应用场景:数据来自真实的场景,具有很高的实用价值,可用于无障碍设施设计、智能交通系统等领域。
  • 专注性:专注于轮椅和拐杖用户的检测,适合特定领域的研究和应用。

数据集结构

wheelchair_crutch_dataset/
├── images/  # 存放图像
│   ├── image1.jpg
│   ├── image2.jpg
│   └── ...
├── labels_voc/  # 存放对应的VOC格式标签文件
│   ├── image1.xml
│   ├── image2.xml
│   └── ...
├── labels_yolo/  # 存放对应的YOLO格式标签文件
│   ├── image1.txt
│   ├── image2.txt
│   └── ...
└── README.md  # 数据集说明文档

标注格式

VOC格式

每个图像都有一个对应的XML文件,存储在labels_voc/目录下。XML文件的结构如下:

<annotation><folder>images</folder><filename>image1.jpg</filename><size><width>640</width><height>480</height><depth>3</depth></size><object><name>whee_chair</name><bndbox><xmin>100</xmin><ymin>200</ymin><xmax>300</xmax><ymax>400</ymax></bndbox></object><!-- 更多对象 -->
</annotation>
YOLO格式

每个图像都有一个对应的文本文件,存储在labels_yolo/目录下。文本文件的每一行代表一个检测对象,格式如下:

<class_id> <x_center> <y_center> <width> <height>
  • class_id:类别ID,对应以下类别:
    • 0: whee_chair
    • 1: person_crutch
  • x_center 和 y_center:边界框中心点的归一化坐标(相对于图像宽度和高度)。
  • width 和 height:边界框的宽度和高度的归一化值。

类别统计

  • Whee_chair:
    • 图片张数: 3,766
    • 标注个数: 4,460
  • Person_crutch:
    • 图片张数: 682
    • 标注个数: 693
  • 总数:
    • 图片张数: 4,448
    • 标注个数: 5,153

项目实现

1. 数据加载器
import torch
from torchvision import transforms
from PIL import Image
import osclass WheelchairCrutchDataset(torch.utils.data.Dataset):def __init__(self, img_dir, label_dir, transform=None):self.img_dir = img_dirself.label_dir = label_dirself.transform = transformself.images = [f for f in os.listdir(img_dir) if f.endswith('.jpg') or f.endswith('.png')]def __len__(self):return len(self.images)def __getitem__(self, idx):img_path = os.path.join(self.img_dir, self.images[idx])label_path = os.path.join(self.label_dir, self.images[idx].replace('.jpg', '.txt').replace('.png', '.txt'))image = Image.open(img_path).convert("RGB")with open(label_path, 'r') as f:labels = f.readlines()boxes = []class_ids = []for line in labels:class_id, x_center, y_center, width, height = map(float, line.strip().split())boxes.append([x_center, y_center, width, height])class_ids.append(int(class_id))boxes = torch.tensor(boxes, dtype=torch.float32)class_ids = torch.tensor(class_ids, dtype=torch.int64)if self.transform:image, boxes, class_ids = self.transform(image, boxes, class_ids)return image, {'boxes': boxes, 'labels': class_ids}# 数据增强
transform = transforms.Compose([transforms.Resize((640, 480)),transforms.ToTensor(),
])dataset = WheelchairCrutchDataset(img_dir='wheelchair_crutch_dataset/images', label_dir='wheelchair_crutch_dataset/labels_yolo', transform=transform)
dataloader = torch.utils.data.DataLoader(dataset, batch_size=4, shuffle=True, num_workers=2, collate_fn=lambda x: tuple(zip(*x)))
2. 模型定义与训练

这里以YOLOv5为例展示模型定义和训练过程:

2.1 安装依赖

确保你已经安装了YOLOv5及其依赖库:

pip install -r requirements.txt
2.2 训练脚本
import torch
from yolov5.models.yolo import Model
from yolov5.utils.loss import ComputeLoss
from yolov5.utils.general import non_max_suppression
from utils.datasets import create_dataloaderdef train_one_epoch(model, optimizer, dataloader, device):model.train()for images, targets in dataloader:images = list(image.to(device) for image in images)targets = [{k: v.to(device) for k, v in t.items()} for t in targets]loss_dict = model(images, targets)losses = sum(loss for loss in loss_dict.values())optimizer.zero_grad()losses.backward()optimizer.step()print(f"Loss: {losses.item()}")# 初始化模型
model = Model('yolov5s.yaml')
model.load_state_dict(torch.load('models/yolov5s.pt'), strict=False)
model.to(device)# 优化器
optimizer = torch.optim.Adam(model.parameters(), lr=0.001)# 数据加载器
dataloader = create_dataloader('wheelchair_crutch_dataset/images', 'wheelchair_crutch_dataset/labels_yolo', batch_size=4, img_size=640)# 训练
num_epochs = 10
for epoch in range(num_epochs):train_one_epoch(model, optimizer, dataloader, device)torch.save(model.state_dict(), f'models/wheelchair_crutch_yolov5_epoch_{epoch}.pt')
3. 模型测试
import torch
import cv2
from yolov5.models.yolo import Model
from yolov5.utils.general import non_max_suppressiondef detect_wheelchair_crutch(image_path, model, device):model.eval()image = cv2.imread(image_path)image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)image = cv2.resize(image, (640, 480))image = torch.from_numpy(image).permute(2, 0, 1).float().div(255.0).unsqueeze(0).to(device)with torch.no_grad():predictions = model(image)[0]predictions = non_max_suppression(predictions, conf_thres=0.5, iou_thres=0.4)return predictions# 加载模型
model = Model('yolov5s.yaml')
model.load_state_dict(torch.load('models/wheelchair_crutch_yolov5_best.pt'))
model.to(device)# 预测
predictions = detect_wheelchair_crutch('path/to/image.jpg', model, device)
print(predictions)

项目总结

本项目利用一个大规模的轮椅拐杖残疾人检测数据集,通过图像实现了对使用轮椅和拐杖的人的自动检测。数据集已经调整为VOC和YOLO格式,可以直接用于模型训练。实验结果表明,这些模型在轮椅和拐杖用户检测任务上表现出色,能够有效地辅助无障碍设施设计、智能交通系统等领域的应用。

未来的研究方向包括:

  • 进一步优化模型:探索更高效的网络结构和训练策略,提高检测精度和速度。
  • 扩展应用场景:将该方法应用于其他类型的辅助设备检测任务,如助听器、导盲犬等。
  • 实时检测系统:开发实时检测系统,实现在线监测和预警功能。
  • 多模态融合:结合多种传感器数据(如摄像头、激光雷达等),提高检测的准确性和鲁棒性。

希望这个项目能为轮椅和拐杖用户的检测带来实际的价值,并推动相关技术的发展。


http://www.ppmy.cn/embedded/125376.html

相关文章

Spring Cloud全解析:链路追踪之springCloudSleuth简介

文章目录 springCloudSleuth简介链路追踪&#xff1f;SpringCloudSleuth术语链路示意图zipkin依赖配置 springCloudSleuth简介 链路追踪&#xff1f; 什么是链路追踪&#xff1f;就是将一次分布式请求还原成调用链路&#xff0c;将一次分布式请求的调用情况集中展示&#xff…

Unity3D游戏的内存控制详解

Unity3D是一款流行的游戏引擎&#xff0c;支持多种平台&#xff0c;包括PC、移动设备和VR等。随着游戏的复杂性不断提高&#xff0c;Unity3D的内存管理变得尤为重要。本文将详细介绍Unity3D游戏中的内存控制技术&#xff0c;包括自动内存管理、对象池、延迟加载资源和手动清理资…

【鸿蒙开发】深入理解鸿蒙开发中的@State装饰器:掌握组件内状态管理

文章目录 State装饰器的含义State装饰的变量的特点&#xff1a;State装饰器的作用代码示例自动更新UI输入数据值传递 总结本文参考华为开发者官网内容&#xff1a; 在鸿蒙&#xff08;HarmonyOS&#xff09;开发中&#xff0c;使用ArkTS&#xff08;Ark TypeScript&#xff09;…

用Python编写一个Web爬虫:自动获取感兴趣的新闻

解锁Python编程的无限可能:《奇妙的Python》带你漫游代码世界 在当今信息化社会中,获取新闻信息的方式已变得多样化。除了传统的新闻订阅和新闻推送服务,使用编程技术自动抓取感兴趣的新闻也成为了许多开发者和技术爱好者的选择。本文将详细介绍如何使用Python编写一个简单…

基于ZABBIX监控 RabbitMQ服务开箱模板汉化及适用性改造

概述: 因为工作的需要,要监控RabbitMQ的状态,看到zabbix里面自带开箱模板,就直接套用,但是发现很多监控项及LLD jsonpath的问题,导致无法使用,自己重新开发耗时耗力,便想着边研究边解决,本文将贴出zabbix原版的模板文件及部分适用性改造例子,并附上最终完善及汉化后…

双指针_复写零_C++

双指针_复写零_C 1. 题目解析2. 算法解析3. 代码实现 1. 题目解析 leetcode链接&#xff1a;https://leetcode.cn/problems/duplicate-zeros/ 给你一个长度固定的整数数组 arr &#xff0c;请你将该数组中出现的每个零都复写一遍&#xff0c;并将其余的元素向右平移。 注意&a…

边学边用docker-为什么要进到容器里面修改权限

在 Docker 容器中修改文件夹权限&#xff0c;通常需要进入容器内部来执行命令&#xff0c;这是因为 Docker 容器提供了一个隔离的环境&#xff0c;其内部的文件系统与宿主机是隔离的。 1. 隔离性&#xff1a;Docker 容器设计为轻量级的隔离环境&#xff0c;每个容器都有自己的…

C#系统学习路线

分享一个C#程序员的成长学习路线规划&#xff0c;希望能够帮助到想从事C#开发的你。 我一直在想&#xff0c;初学者刚开始学习编程时应该学些什么&#xff1f;学习到什么程度才能找到工作&#xff1f;才能在项目中发现和解决Bug&#xff1f; 我不知道每位初学者在学习编程时是…