盲道分割与盲道障碍物检测数据集。part1盲道分割数据集,共1.7GB,标注路人行走视角下的盲道位置,以mask图的形式标注。part2盲道及周边障碍物检测数据集,共7900余张图像,6.4G

盲道分割与盲道障碍物检测数据集。



part1盲道分割数据集,共1.7GB,标注路人行走视角下的盲道位置,以mask图的形式标注。

part2盲道及周边障碍物检测数据集,共7900余张图像,6.4GB,


voc格式标注,stop_sign: 停止标志
person: 人bicycle: 自行车bus: 公共汽车
truck: 卡车car: 汽车motorbike: 摩托车
reflective_cone: 反光锥ashcan: 垃圾箱
warning_column: 警示柱spherical_roadblock: 球形路障
pole: 杆子dog: 狗tricycle: 三轮车fire_hydrant: 消防栓

该数据集分为两个部分,分别用于盲道分割和盲道及周边障碍物检测任务。这两个部分可以单独使用,也可以结合使用,以支持更全面的视觉辅助系统开发。

Part 1: 盲道分割数据集

规模
  • 图像数量:未明确提供,但总数据量为1.7GB。
  • 数据量:1.7GB
  • 分辨率:未明确提供,但通常为高分辨率以确保细节清晰。
标注
  • 标注类型:像素级分割标注(mask图)
  • 标注内容:路人行走视角下的盲道位置
数据特点
  • 高质量图像:所有图像均为高分辨率,提供了丰富的细节信息,有助于提高分割精度。
  • 多样化样本:涵盖了不同环境和光照条件下的盲道图像,确保模型能够适应多种场景。
  • 详细标注:每张图像都附有详细的像素级分割标注,标明了盲道的位置。
  • 适用性强:数据集适用于多种深度学习框架和模型,便于进行语义分割任务。
应用场景
  • 视觉辅助系统:帮助视障人士更好地识别和导航盲道。
  • 智能交通系统:在城市交通监控中自动识别盲道,提升交通管理效率。
  • 研究与教育:用于科研机构的研究以及相关院校的教学,帮助学生和研究人员更好地了解盲道分割技术。
  • 无障碍设计:支持城市规划部门在进行无障碍设施设计时考虑盲道的位置和布局。

Part 2: 盲道及周边障碍物检测数据集

规模
  • 图像数量:7900余张
  • 数据量:6.4GB
  • 分辨率:未明确提供,但通常为高分辨率以确保细节清晰。
类别
  • 停止标志 (Stop Sign)
  • 人 (Person)
  • 自行车 (Bicycle)
  • 公共汽车 (Bus)
  • 卡车 (Truck)
  • 汽车 (Car)
  • 摩托车 (Motorbike)
  • 反光锥 (Reflective Cone)
  • 垃圾箱 (Ashcan)
  • 警示柱 (Warning Column)
  • 球形路障 (Spherical Roadblock)
  • 杆子 (Pole)
  • 狗 (Dog)
  • 三轮车 (Tricycle)
  • 消防栓 (Fire Hydrant)
标注
  • 标注类型:边界框标注(VOC格式)
  • 标注内容:盲道及周边障碍物的位置和类别
数据特点
  • 高质量图像:所有图像均为高分辨率,提供了丰富的细节信息,有助于提高检测精度。
  • 多样化样本:涵盖了多种类型的障碍物和不同的环境背景,确保模型能够适应多种复杂的场景。
  • 详细标注:每张图像都附有详细的边界框标注,标明了每个障碍物的位置和大小。
  • 适用性强:数据集适用于多种深度学习框架和模型,便于进行目标检测任务。
应用场景
  • 视觉辅助系统:帮助视障人士更好地识别和避开盲道上的障碍物。
  • 智能交通系统:在城市交通监控中自动识别和分类障碍物,提升交通管理效率。
  • 自动驾驶:帮助自动驾驶汽车更好地理解和分类道路上的各种障碍物,提升驾驶安全性。
  • 研究与教育:用于科研机构的研究以及相关院校的教学,帮助学生和研究人员更好地了解障碍物检测技术。
  • 城市管理:支持城市管理部门及时发现和处理盲道上的障碍物,提升城市管理水平。

数据集结构

假设数据集的文件结构如下:

blind_path_dataset/
├── part1_segmentation/
│   ├── images/
│   │   ├── 0001.jpg
│   │   ├── 0002.jpg
│   │   └── ...
│   ├── masks/
│   │   ├── 0001.png
│   │   ├── 0002.png
│   │   └── ...
│   └── metadata.csv
├── part2_detection/
│   ├── images/
│   │   ├── 0001.jpg
│   │   ├── 0002.jpg
│   │   └── ...
│   ├── labels_voc/
│   │   ├── 0001.xml
│   │   ├── 0002.xml
│   │   └── ...
│   └── metadata.csv
└── README.md

metadata.csv 文件内容示例:

# part1_segmentation/metadata.csv
image_id, split
0001.jpg, train
0002.jpg, train
...

# part2_detection/metadata.csv
image_id, category, split
0001.jpg, stop_sign, train
0001.jpg, person, train
0002.jpg, bicycle, val
...

labels_voc/0001.xml 示例(Pascal VOC格式):

<annotation>
    <folder>blind_path_dataset</folder>
    <filename>0001.jpg</filename>
    <size>
        <width>640</width>
        <height>480</height>
        <depth>3</depth>
    </size>
    <object>
        <name>stop_sign</name>
        <bndbox>
            <xmin>50</xmin>
            <ymin>50</ymin>
            <xmax>150</xmax>
            <ymax>150</ymax>
        </bndbox>
    </object>
    <object>
        <name>person</name>
        <bndbox>
            <xmin>200</xmin>
            <ymin>100</ymin>
            <xmax>250</xmax>
            <ymax>200</ymax>
        </bndbox>
    </object>
    ...
</annotation>

代码示例

下面是一个完整的Python脚本示例,展示如何加载数据集、使用预训练的YOLOv5模型进行盲道及周边障碍物检测,并可视化检测结果。我们将使用PyTorch和YOLOv5的相关库。

1. 安装依赖库

首先,确保安装了必要的依赖库。可以在项目目录中的requirements.txt文件中列出这些依赖库,然后运行以下命令进行安装:

 
pip install -r requirements.txt

requirements.txt 文件内容示例:

torch==1.10.0
torchvision==0.11.1
opencv-python-headless==4.5.4.60
yolov5 @ git+https://github.com/ultralytics/yolov5.git
2. 加载数据集和预训练模型
 

python

深色版本

import os
import cv2
import torch
import numpy as np
from yolov5.models.common import DetectMultiBackend
from yolov5.utils.general import (check_img_size, non_max_suppression, scale_coords)
from yolov5.utils.torch_utils import select_device
from yolov5.utils.plots import Annotator, colors

# 设置设备
device = select_device('')  # 使用默认设备(通常是GPU,如果没有则使用CPU)

# 加载预训练模型
model_path = 'path_to_your_model_directory/yolov5s_blind_path_obstacles.pt'
model = DetectMultiBackend(model_path, device=device, dnn=False, data=None, fp16=False)
imgsz = check_img_size(640, s=model.stride)  # 检查图像尺寸

# 设置模型为评估模式
model.eval()

# 加载图像
def load_image(image_path):
    img = cv2.imread(image_path)
    if img is None:
        print(f"Failed to load image: {image_path}")
        return None
    return img

# 进行推理
def detect_obstacles(img, model, imgsz, device):
    # 转换图像
    img = [letterbox(img, new_shape=imgsz, auto=True)[0]]
    img = np.stack(img, 0)
    img = img[..., ::-1].transpose((0, 3, 1, 2))  # BGR to RGB, BHWC to BCHW
    img = np.ascontiguousarray(img)

    # 将图像转换为Tensor
    img = torch.from_numpy(img).to(device)
    img = img.float()
    img /= 255.0  # 0 - 255 to 0.0 - 1.0
    if len(img.shape) == 3:
        img = img[None]  # 扩展批处理维度

    # 推理
    with torch.no_grad():
        pred = model(img, augment=False, visualize=False)[0]
        pred = non_max_suppression(pred, conf_thres=0.5, iou_thres=0.45, classes=None, agnostic=False, max_det=1000)

    # 处理预测结果
    for i, det in enumerate(pred):  # 每张图像的检测结果
        if len(det):
            det[:, :4] = scale_coords(img.shape[2:], det[:, :4], img.shape[2:]).round()
            annotator = Annotator(img[i].permute(1, 2, 0).cpu().numpy(), line_width=3, example=str('obstacle'))
            for *xyxy, conf, cls in reversed(det):
                label = f'{names[int(cls)]} {conf:.2f}'
                annotator.box_label(xyxy, label, color=colors(int(cls), True))
            return annotator.result()
    return img[0].permute(1, 2, 0).cpu().numpy()

# 字母框调整
def letterbox(img, new_shape=(640, 640), color=(114, 114, 114), auto=True, scaleFill=False, scaleup=True, stride=32):
    shape = img.shape[:2]  # 当前形状 [height, width]
    if isinstance(new_shape, int):
        new_shape = (new_shape, new_shape)

    r = min(new_shape[0] / shape[0], new_shape[1] / shape[1])
    if not scaleup:  # 只缩小,不放大
        r = min(r, 1.0)

    ratio = r, r  # 宽高比
    new_unpad = int(round(shape[1] * r)), int(round(shape[0] * r))
    dw, dh = new_shape[1] - new_unpad[0], new_shape[0] - new_unpad[1]  # wh padding
    if auto:  # 最小矩形
        dw, dh = np.mod(dw, stride), np.mod(dh, stride)  # wh padding
    elif scaleFill:  # 拉伸
        dw, dh = 0.0, 0.0
        new_unpad = (new_shape[1], new_shape[0])
        ratio = new_shape[1] / shape[1], new_shape[0] / shape[0]  # 宽高比

    dw /= 2  # 分配到两边
    dh /= 2

    if shape[::-1] != new_unpad:  # 缩放
        img = cv2.resize(img, new_unpad, interpolation=cv2.INTER_LINEAR)
    top, bottom = int(round(dh - 0.1)), int(round(dh + 0.1))
    left, right = int(round(dw - 0.1)), int(round(dw + 0.1))
    img = cv2.copyMakeBorder(img, top, bottom, left, right, cv2.BORDER_CONSTANT, value=color)  # 添加边框
    return img, ratio, (dw, dh)

# 主函数
def main(image_dir, model, imgsz, device):
    names = ['stop_sign', 'person', 'bicycle', 'bus', 'truck', 'car', 'motorbike', 'reflective_cone', 'ashcan', 'warning_column', 'spherical_roadblock', 'pole', 'dog', 'tricycle', 'fire_hydrant']
    
    for image_name in os.listdir(image_dir):
        if image_name.endswith('.jpg'):
            image_path = os.path.join(image_dir, image_name)
            img = load_image(image_path)
            if img is not None:
                result = detect_obstacles(img, model, imgsz, device)
                cv2.imshow('Blind Path Obstacle Detection', result)
                cv2.setWindowTitle('Blind Path Obstacle Detection', f'Image: {image_name}')
                if cv2.waitKey(0) & 0xFF == ord('q'):
                    break
    cv2.destroyAllWindows()

# 假设图像存储在'image'目录下
image_dir = 'path_to_your_image_directory'

# 运行主函数
main(image_dir, model, imgsz, device)

说明

  • 路径设置:请根据实际的数据集路径调整path_to_your_image_directorypath_to_your_model_directory
  • 文件命名:假设图像文件名分别为.jpg。如果实际命名规则不同,请相应修改代码。
  • 可视化:通过绘制边界框和标注置信度,可以直观地看到图像中的障碍物位置。

进一步的应用

  • 训练深度学习模型:可以使用这个数据集来进一步训练或微调YOLOv5模型,以提高检测精度。
  • 数据增强:为了增加数据集的多样性和鲁棒性,可以使用数据增强技术(如旋转、翻转、缩放等)生成更多的训练样本。
  • 评估与优化:通过交叉验证和测试集评估模型性能,并不断优化模型参数,以提高检测准确率。

这个数据集对于盲道分割和障碍物检测具有重要的实用价值,可以帮助相关部门及时发现和处理盲道上的障碍物,提升视障人士的出行安全性和便利性。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值