Advertisement

如何训练自己的数据集之,河道垃圾数据集

阅读量:
305453237f874408a3c2420ada6c2bad.png

河道垃圾与水体污染问题的数据集(基于无人机拍摄的角度构建),包含共3000张图片。这些图片能够直接应用于河道垃圾和水体污染功能的检测。人工对标注数据进行了全面核查以确保数据质量。已按照YOLO格式和VOC数据格式进行标注,并可通过直接训练模型进行使用。详细说明各类别标签及其数量如下:水体污秽类样本为488个、漂浮物类样本为5495个、废弃船只类样本为1215个、捕捞与养殖相关物品类样本为710个以及 miscellaneous废弃物类样本共计156个

6ff169d423ed470992d1595a993125fc.png

河道垃圾与水污染数据集介绍

数据集概述

该数据集主要致力于河道垃圾与水体污染的检测,并具备无人机视角下的功能检测能力。该集合共包含3000张图片,在经过人工核查后保证了标记的质量经得起检验。这些标记已被成功转换为YOLO格式与VOC格式的数据,并可直接应用于模型训练。

数据集特点

3141e405ecd04b26b591553570a6ebda.png
  1. 高精度标注:所有标注数据均经过人工审核,并保证其准确性。
  2. 丰富分类:数据集包含五个具体类别标签——水污染、漂浮物、废弃船、捕鱼养殖以及废弃物——这些分类涵盖了河道常见的污染物类型。
  3. 多格式兼容性:该数据集同时支持YOLO和VOC两种标注文件格式,并为采用不同计算机视觉框架的研究者和开发者提供了便利。

数据集内容

  • 图像文件 :该文档包含3000张JPG/PNG格式的图像文件。
    • 标注文件 :每个图片都附有YOLO和VOC两种类型的标注信息。

数据集结构示例

假设数据集的根目录为 river_pollution_dataset,其结构可能如下所示:

复制代码
 river_pollution_dataset/

    
 ├── images/
    
 │   ├── image_0001.jpg
    
 │   ├── image_0002.jpg
    
 │   └── ...
    
 ├── labels_yolo/
    
 │   ├── image_0001.txt
    
 │   ├── image_0002.txt
    
 │   └── ...
    
 ├── labels_voc/
    
 │   ├── image_0001.xml
    
 │   ├── image_0002.xml
    
 │   └── ...
    
 └── README.md  # 数据集说明
    
    
    
    
    代码解读

标签类别及数量

  • 水污染问题(Water Pollution Issues):约500个具体案例
    • 漂浮垃圾(Floating Trash):约5000件具体的海洋垃圾
    • 废弃船只(Abandoned Vessels):约1200艘具体的废弃船只
    • 渔业与水产养殖活动(Fishing and Aquaculture Projects):约700项具体的渔业与水产养殖活动
    • 废物管理问题(Waste Management Challenges):约150项具体的废物管理问题

这些标签表征了河道中存在的主要的污染类别,并且可用于训练模型用于检测这些类别对不同类型的污染情况进行识别与归类。

数据集使用方法

YOLO格式标注示例

对于每一张图像而言,在其对应的标签文件(.txt)中会包含单行或多行数据。这些数据中的每一行为一个物体提供其对应的标签信息。

复制代码
    <class_index> <x_center> <y_center> <width> <height>
    
    代码解读

其中:

  • <class_index> 代表物体类别编号(其中0对应水污染、1对应漂浮物、2对应废弃船、3对应捕鱼养殖以及4对应废弃物);
  • <x_center> 表示物体中心在图像水平方向上的相对比例位置;
  • <y_center> 表示物体中心在垂直方向上的相对比例位置;
  • <width> 表示物体宽度与整个图像宽度的比例关系;
  • <height> 则是反映物体高度与整个图像高度的比例关系。

VOC格式标注示例

每一个图像都配有专门的XML文件,在这个文件中包含了图像的核心信息(如尺寸参数),同时也记录了各个物体的位置数据(边界框坐标)及其分类标签。具体来说,在这些数据中可以找到关于物体大小、位置以及所属类别的详细信息。

复制代码
 <annotation>

    
     <folder>river_pollution_dataset</folder>
    
     <filename>image_0001.jpg</filename>
    
     <size>
    
     <width>640</width>
    
     <height>480</height>
    
     <depth>3</depth>
    
     </size>
    
     <object>
    
     <name>Floating Debris</name>
    
     <pose>Unspecified</pose>
    
     <truncated>0</truncated>
    
     <difficult>0</difficult>
    
     <bndbox>
    
         <xmin>120</xmin>
    
         <ymin>100</ymin>
    
         <xmax>180</xmax>
    
         <ymax>150</ymax>
    
     </bndbox>
    
     </object>
    
     <!-- 更多物体标签... -->
    
 </annotation>
    
    
    
    
    代码解读

使用建议

  1. 数据预处理工作:基于模型需求可能需要将图像统一至一致的分辨率水平,并通过实施数据增强技术以确保提升鲁棒性。
  2. 模型训练环节:需基于推荐的主流目标检测框架(如YOLO、Faster R-CNN等)开展,并遵循特定的标准格式进行标注。
  3. 性能评估阶段:建议持续监控模型在验证集的表现情况,并据此采取相应的参数微调或训练策略优化措施。

应用领域

该数据集特别适合在河道管理及环境保护方面具有广泛的应用。尤其是河道垃圾监测、水质评估以及环境治理等领域表现突出。通过准确识别河道中各类污染源的存在情况,从而有助于相关部门制定相应的管理措施以改善环境质量.

总结

该区域的河道垃圾及水体污染数据集基于高质量标注和多维度分类标记,在无人机遥感监测方面提供了可靠的技术支撑。对于从事相关研究及工程应用的专业人士而言,这一数据集合具有重要参考价值。

准备工作

  1. 部署YOLOv5:请确认已部署YOLOv5及其所有依赖项。
  2. 配置数据集:请确保您的数据集已按YOLOv5的要求格式配置完毕,并生成相应的data.yaml文件以描述数据路径和其他相关信息。

示例代码

安装YOLOv5

如果您还没有安装YOLOv5,请按照官方文档执行以下命令:

复制代码
 git clone https://github.com/ultralytics/yolov5.git  # clone repo

    
 cd yolov5
    
 pip install -r requirements.txt  # install dependencies
    
    
    
    
    代码解读

准备data.yaml

建议您创建一个名为data.yaml的文件来描述您的数据集。为方便起见,请您考虑将该数据集放置在一个名为river_pollution_dataset的目录中,并包含images和labels这两个子目录。

复制代码
 # data.yaml 文件

    
 train: ../river_pollution_dataset/images/train/
    
 val: ../river_pollution_dataset/images/val/
    
 test: ../river_pollution_dataset/images/test/  # optional
    
  
    
 nc: 5  # number of classes
    
 names: ['water_pollution', 'floating_debris', 'abandoned_ships', 'fishing_aquaculture', 'waste']  # class names
    
    
    
    
    代码解读

训练模型

使用以下命令开始训练模型:

复制代码
 cd yolov5

    
 python train.py --img 640 --batch 16 --epochs 300 --data ../river_pollution_dataset/data.yaml --weights yolov5s.pt --cache
    
    
    
    
    代码解读

自定义训练脚本

当希望进行更为深入的配置时

复制代码
 import torch

    
 from utils.datasets import LoadImagesAndLabels  # 导入数据加载器
    
 from models.experimental import attempt_load  # 导入模型加载器
    
 from utils.torch_utils import select_device  # 导入选用设备的函数
    
 from utils.general import check_dataset  # 导入检查数据集的函数
    
  
    
 def main():
    
     device = select_device('')  # 选择设备,自动选择GPU/CPU
    
     data_yaml = '../river_pollution_dataset/data.yaml'
    
     train_images_folder = '../river_pollution_dataset/images/train/'
    
     train_labels_folder = '../river_pollution_dataset/labels/train/'
    
     val_images_folder = '../river_pollution_dataset/images/val/'
    
     val_labels_folder = '../river_pollution_dataset/labels/val/'
    
  
    
     # 加载数据集
    
     train_set = LoadImagesAndLabels(train_images_folder, train_labels_folder)
    
     val_set = LoadImagesAndLabels(val_images_folder, val_labels_folder)
    
  
    
     # 创建数据加载器
    
     train_loader = torch.utils.data.DataLoader(train_set, batch_size=16, shuffle=True, num_workers=4)
    
     val_loader = torch.utils.data.DataLoader(val_set, batch_size=16, shuffle=False, num_workers=4)
    
  
    
     # 加载预训练模型
    
     model = attempt_load('yolov5s.pt', map_location=device)  # 加载预训练权重
    
     model.to(device)
    
  
    
     # 设置损失函数和优化器
    
     criterion = torch.nn.CrossEntropyLoss()
    
     optimizer = torch.optim.Adam(model.parameters(), lr=0.001)
    
  
    
     # 训练循环
    
     epochs = 300
    
     for epoch in range(epochs):
    
     model.train()
    
     for images, targets, _, _ in train_loader:
    
         images = images.to(device)
    
         targets = [t.to(device) for t in targets]
    
  
    
         # 前向传播
    
         outputs = model(images)
    
  
    
         # 计算损失
    
         loss = criterion(outputs, targets)
    
  
    
         # 反向传播和优化
    
         optimizer.zero_grad()
    
         loss.backward()
    
         optimizer.step()
    
  
    
     print(f'Epoch [{epoch+1}/{epochs}], Loss: {loss.item()}')
    
  
    
     torch.save(model.state_dict(), 'trained_model.pt')
    
     print('Training complete.')
    
  
    
 if __name__ == '__main__':
    
     main()
    
    
    
    
    代码解读

注意事项

  • 请确认data.yaml文件中的路径设置正确,并确保数据集的结构与上述描述一致。
  • 请根据您的计算资源和任务需求调整批量大小、学习率以及迭代次数等超参数设置。
  • 当数据集规模较大时,请注意适当增加计算资源配置以及训练所需的时间。
  • 这个脚本仅作为参考,请根据具体情况进行必要的调整和完善。

使用YOLOv5命令行训练

如果您更倾向于使用命令行来训练模型,可以使用以下命令:

复制代码
 cd yolov5

    
 python train.py --img 640 --batch 16 --epochs 300 --data ../river_pollution_dataset/data.yaml --weights yolov5s.pt --cache
    
    
    
    
    代码解读

测试模型

在训练完成后,您可以通过以下命令测试模型的性能:

复制代码
    python detect.py --weights runs/train/exp/weights/best.pt --img 640 --conf 0.4 --source ../river_pollution_dataset/images/test/
    
    代码解读

总结

该示例详细阐述了基于YOLOv5框架的河道垃圾与水污染检测模型开发流程。建议您可以通过修改脚本中的配置参数来自定义训练策略以适应特定需求。利用该数据集及其配套的训练代码进行操作时,请注意调整超参数设置以优化模型性能。

全部评论 (0)

还没有任何评论哟~