YOLO学习-使用VOC.yaml配置文件对Voc数据集进行模型训练

1、介绍

​ 训练的模型基于yolov8n.pt,数据采用PASCAL VOC数据集,下面进行整个任务的步骤说明,任务分三部:

  • 配置好Yolo环境:环境基于Anconda创建的Python虚拟环境。
  • 下载数据集和处理数据集:数据集为PASCAL VOC数据集中2012train、2007train、2007test三个数据集。
  • 运行Yolo程序:在处理数据集后运行Yolo程序训练模型。

2、下载数据集

​ 对于Voc数据集下载,这里有两种下载方式,方式如下:

  • (1)自己从网站上进行下载;

  • (2)使用Python程序进行下载,当然这个方式比较看网络情况。

    下面进行具体介绍这两种方式。

(1)网站下载

​ 首先到PASCAL网站首页,这里给出网站网址:PASCAL 视觉对象类主页 (ox.ac.uk),到这个网站找到下图这个部分。
各个年份数据集

​ 然后点击VOC2007这个链接,进入2007数据的页面。进入页面找到数据部分,也就是下面的这个图片。2007年数据集下载
最后点击上图的两个数据下载连接,即可下载2007的数据集。最后以同样的方式下载2012年的数据集,但是注意2012年下载训练集即可,不用下载测试集(测试集数据下载要注册账号,当然如果你有账号也可以进行下载,将我们测试用的2007测试集换成2012年的也可以)。

补充:如果你觉得数据集在浏览器下载太慢,那么可以将下载链接复制,如何到百度网盘进行下载,这样下载数据会快一些(当然这是基于我是会员的情况下)。步骤如下:
网盘下载数据

  • 点击云添加中的添加链接任务
    网盘数据下载

  • 填入链接点击下载即可

  • 这里给出三个数据下载的链接:

    • 2007训练集:http://host.robots.ox.ac.uk/pascal/VOC/voc2007/VOCtrainval_06-Nov-2007.tar
    • 2007测试集:http://host.robots.ox.ac.uk/pascal/VOC/voc2007/VOCtest_06-Nov-2007.tar
    • 2012训练集:http://host.robots.ox.ac.uk/pascal/VOC/voc2012/VOCtrainval_11-May-2012.tar
  • 完整的数据集大小是2.8GB左右

(2)Python程序下载

​ 将下面程序复制到Pycharm中py文件的项目中运行即可(前提网络可以连接github这样可以下载数据),当然这个程序也包含对数据的处理,第一种方法并没有进行对数据的处理还要进一步对数据进行处理。

import xml.etree.ElementTree as ET
from tqdm import tqdm
from ultralytics.utils.downloads import download
from pathlib import Path
import yaml

# 加载VOC.yaml文件内容
yaml_content = """
path: ../datasets/VOC
train:
  - images/train2012
  - images/train2007
  - images/val2012
  - images/val2007
val:
  - images/test2007
test:
  - images/test2007
names:
  0: aeroplane
  1: bicycle
  2: bird
  3: boat
  4: bottle
  5: bus
  6: car
  7: cat
  8: chair
  9: cow
  10: diningtable
  11: dog
  12: horse
  13: motorbike
  14: person
  15: pottedplant
  16: sheep
  17: sofa
  18: train
  19: tvmonitor
"""

yaml = yaml.safe_load(yaml_content)

# 函数:转换标签
def convert_label(path, lb_path, year, image_id):
    # 函数:转换边界框
    def convert_box(size, box):
        dw, dh = 1. / size[0], 1. / size[1]
        x, y, w, h = (box[0] + box[1]) / 2.0 - 1, (box[2] + box[3]) / 2.0 - 1, box[1] - box[0], box[3] - box[2]
        return x * dw, y * dh, w * dw, h * dh

    # 打开标注文件并创建输出文件
    in_file = open(path / f'VOC{
     
     year}/Annotations/{
     
     image_id}.xml')
    out_file = open(lb_path, 'w')
    tree = ET.parse(in_file)
    root = tree.getroot()
    size = root.find('size')
    w = int(size.find('width').text)
    h = int(size.find('height').text)

    # 获取类别名称列表
    names = list(yaml['names'].values())
    for obj in root.iter('object'):
        cls = obj.find('name').text
        if cls in names and int(obj.find('difficult').text) != 1:
            xmlbox = obj.find('bndbox')
            bb = convert_box((w, h), [float(xmlbox.find(x).text) for x in ('xmin', 'xmax', 'ymin', 'ymax')])
            cls_id = names.index(cls)  # 类别ID
            out_file.write(" ".join(str(a) for a in (cls_id, *bb)) + '\n')

# 下载数据集
dir = Path(yaml['path'])  # 数据集根目录
url = 'https://github.com/ultralytics/assets/releases/download/v0.0.0/'
urls = [
    f'{
     
     url}VOCtrainval_06-Nov-2007.zip',  # 446MB, 5012张图片
    f'{
     
     url}VOCtest_06-Nov-2007.zip',  # 438MB, 4953张图片
    f'{
     
     url}VOCtrainval_11-May-2012.zip'  # 1.95GB, 17126张图片
]
# 下载并解压数据集到指定路径

download(urls, dir=dir / 'images', curl=True, threads=3, exist_ok=True)  # 下载并解压到现有路径(如果存在)

# 转换标签
path = dir /
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值