如何训练自己的数据集之—智慧化盲道分割及盲道障碍物检测数据集 盲道检测与分割数据集如何训练自己的权重文件

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

 

 

一,盲道分割数据集,共1.7GB,标注路人行走视角盲道位置,以mask图形式标注。二,盲道及周边障碍物检测数据集,共7900张6.4Gvoc格式标注人汽车路障狗等



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: 消防栓

  • 第一部分:盲道分割数据集

    • 大小:1.7GB
    • 标注方式:以mask图的形式标注行人视角下的盲道位置。
    • 应用场景:用于训练分割模型,识别盲道的位置。
  • 第二部分:盲道及周边障碍物检测数据集

    • 大小:6.4GB
    • 图像数量:约7900余张图像
    • 标注格式:VOC格式
    • 标注类别:
      • stop_sign: 停止标志
      • person: 人
      • bicycle: 自行车
      • bus: 公共汽车
      • truck: 卡车
      • car: 汽车
      • motorbike: 摩托车
      • reflective_cone: 反光锥
      • ashcan: 垃圾箱
      • warning_column: 警示柱
      • spherical_roadblock: 球形路障
      • pole: 杆子
      • dog: 狗
      • tricycle: 三轮车
      • fire_hydrant: 消防栓
    • 应用场景:用于训练检测模型,识别盲道周围的潜在障碍物。

数据集结构

第一部分:盲道分割数据集

BlindPathSegmentationDataset/
├── images/
│   ├── image_00001.jpg
│   ├── image_00002.jpg
│   └── ...
├── masks/
│   ├── mask_00001.png
│   ├── mask_00002.png
│   └── ...
└── README.md  # 数据集说明

第二部分:盲道及周边障碍物检测数据集

BlindPathObstacleDetectionDataset/
├── images/
│   ├── image_00001.jpg
│   ├── image_00002.jpg
│   └── ...
├── annotations/
│   ├── image_00001.xml
│   ├── image_00002.xml
│   └── ...
└── README.md  # 数据集说明

数据集使用说明

第一部分:盲道分割数据集

  • images/:包含原始图像文件。
  • masks/:包含对应图像的mask图,用于标注盲道的位置。
  • README.md:包含数据集的具体说明和使用指南。

第二部分:盲道及周边障碍物检测数据集

  • images/:包含原始图像文件。
  • annotations/:包含XML格式的标注文件,使用VOC格式标注每个对象的位置。
  • README.md:包含数据集的具体说明和使用指南。

示例代码

分割模型训练示例代码

import torch
import torch.nn as nn
import torch.optim as optim
from torch.utils.data import DataLoader
from torchvision.transforms import ToTensor
from torchvision.models import deeplabv3_resnet101
from PIL import Image
import os
import numpy as np

class BlindPathSegmentationDataset(torch.utils.data.Dataset):
    def __init__(self, root_dir, transform=None):
        self.root_dir = root_dir
        self.image_dir = os.path.join(root_dir, 'images')
        self.mask_dir = os.path.join(root_dir, 'masks')
        self.images = os.listdir(self.image_dir)
        self.transform = transform

    def __len__(self):
        return len(self.images)

    def __getitem__(self, idx):
        img_name = self.images[idx]
        image = Image.open(os.path.join(self.image_dir, img_name))
        mask = Image.open(os.path.join(self.mask_dir, img_name.replace('.jpg', '.png')))

        if self.transform:
            image = self.transform(image)
            mask = self.transform(mask)

        return image, mask

def train_segmentation_model(model, dataloader, criterion, optimizer, device):
    model.train()
    running_loss = 0.0

    for inputs, labels in dataloader:
        inputs, labels = inputs.to(device), labels.to(device)
        optimizer.zero_grad()
        outputs = model(inputs)['out']
        loss = criterion(outputs, labels.squeeze(1).long())
        loss.backward()
        optimizer.step()
        running_loss += loss.item() * inputs.size(0)

    epoch_loss = running_loss / len(dataloader.dataset)
    return epoch_loss

def main():
    device = torch.device("cuda:0" if torch.cuda.is_available() else "cpu")
    dataset = BlindPathSegmentationDataset(root_dir='data/BlindPathSegmentationDataset')
    dataloader = DataLoader(dataset, batch_size=4, shuffle=True)

    model = deeplabv3_resnet101(pretrained=True)
    model.classifier[4] = nn.Conv2d(256, 2, kernel_size=(1, 1), stride=(1, 1))
    model = model.to(device)

    criterion = nn.CrossEntropyLoss()
    optimizer = optim.Adam(model.parameters(), lr=0.001)

    num_epochs = 20
    for epoch in range(num_epochs):
        train_loss = train_segmentation_model(model, dataloader, criterion, optimizer, device)
        print(f'Epoch {epoch+1}/{num_epochs}, Train Loss: {train_loss:.4f}')

if __name__ == '__main__':
    main()

检测模型训练示例代码

import torch
import torch.nn as nn
import torch.optim as optim
from torchvision.models.detection import fasterrcnn_resnet50_fpn
from torchvision.transforms import ToTensor
from torchvision.datasets.voc import VOCSegmentation
import os
import xml.etree.ElementTree as ET

class BlindPathObstacleDetectionDataset(torch.utils.data.Dataset):
    def __init__(self, root_dir, transform=None):
        self.root_dir = root_dir
        self.image_dir = os.path.join(root_dir, 'images')
        self.annotations_dir = os.path.join(root_dir, 'annotations')
        self.images = os.listdir(self.image_dir)
        self.transform = transform

    def __len__(self):
        return len(self.images)

    def __getitem__(self, idx):
        img_name = self.images[idx]
        image = Image.open(os.path.join(self.image_dir, img_name))
        annotation = ET.parse(os.path.join(self.annotations_dir, img_name.replace('.jpg', '.xml')))
        objects = annotation.findall('object')
        boxes = []
        labels = []

        for obj in objects:
            bbox = obj.find('bndbox')
            xmin = int(bbox.find('xmin').text)
            ymin = int(bbox.find('ymin').text)
            xmax = int(bbox.find('xmax').text)
            ymax = int(bbox.find('ymax').text)
            label = obj.find('name').text
            label_map = {'stop_sign': 1, 'person': 2, 'bicycle': 3, 'bus': 4, 'truck': 5, 'car': 6,
                         'motorbike': 7, 'reflective_cone': 8, 'ashcan': 9, 'warning_column': 10,
                         'spherical_roadblock': 11, 'pole': 12, 'dog': 13, 'tricycle': 14, 'fire_hydrant': 15}
            label_id = label_map[label]
            boxes.append([xmin, ymin, xmax, ymax])
            labels.append(label_id)

        boxes = torch.as_tensor(boxes, dtype=torch.float32)
        labels = torch.as_tensor(labels, dtype=torch.int64)

        if self.transform:
            image = self.transform(image)

        return image, {'boxes': boxes, 'labels': labels}

def train_detection_model(model, dataloader, optimizer, device):
    model.train()
    running_loss = 0.0

    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()
        running_loss += losses.item()

    epoch_loss = running_loss / len(dataloader)
    return epoch_loss

def main():
    device = torch.device("cuda:0" if torch.cuda.is_available() else "cpu")
    dataset = BlindPathObstacleDetectionDataset(root_dir='data/BlindPathObstacleDetectionDataset')
    dataloader = DataLoader(dataset, batch_size=4, shuffle=True, collate_fn=lambda b: tuple(zip(*b)))

    model = fasterrcnn_resnet50_fpn(pretrained=True, num_classes=16)
    model = model.to(device)

    optimizer = optim.Adam(model.parameters(), lr=0.001)

    num_epochs = 20
    for epoch in range(num_epochs):
        train_loss = train_detection_model(model, dataloader, optimizer, device)
        print(f'Epoch {epoch+1}/{num_epochs}, Train Loss: {train_loss:.4f}')

if __name__ == '__main__':
    main()

项目目录结构

BlindPathData/
├── BlindPathSegmentationDataset/
│   ├── images/
│   ├── masks/
│   └── README.md
├── BlindPathObstacleDetectionDataset/
│   ├── images/
│   ├── annotations/
│   └── README.md
└── src/
    ├── segmentation.py  # 分割模型训练代码
    ├── detection.py     # 检测模型训练代码
    └── README.md

项目运行

确保安装了必要的依赖库:

pip install torch torchvision pillow

然后分别运行分割和检测模型的训练代码:

python src/segmentation.py
python src/detection.py

学习资源

项目中的代码包含了详细的注释,帮助初学者理解各个部分的功能和作用。同时,提供的数据集可以让用户快速上手,了解如何使用深度学习模型进行盲道分割和障碍物检测。

总结

这个盲道分割与障碍物检测系统是一个完整的解决方案,它不仅包含了数据集,还包括了训练分割和检测模型的代码。通过本项目,你可以深入学习如何使用深度学习模型进行图像分割和物体检测,并将其应用于实际场景中,提高智能系统的安全性。对于初学者来说,这是一个很好的学习平台,可以深入了解分割和检测技术及其在实际应用中的实现
 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值