使用YOLOV2训练NWPUVHR-10dataset数据集

1.将positive所有数据送入训练

import xml.etree.ElementTree as ET
import pickle
import os
from os import listdir, getcwd
from os.path import join
from PIL import Image
import re
import random



def convert(size, box):
    dw = 1./(size[0])
    dh = 1./(size[1])
    x = (box[0] + box[1])/2.0 - 1
    y = (box[2] + box[3])/2.0 - 1
    w = box[1] - box[0]
    h = box[3] - box[2]
    x = x*dw
    w = w*dw
    y = y*dh
    h = h*dh
    return (x,y,w,h)

def convert_annotation(image_id):
    in_file = open('/home/vip/Documents/xigongdashujuji/NWPUVHR-10dataset/ground_truth/%s.txt' % (image_id))
    out_file = open('/home/vip/Documents/xigongdashujuji/NWPUVHR-10dataset/labels/%s.txt' % (image_id), 'w')
    img = Image.open('/home/vip/Documents/xigongdashujuji/NWPUVHR-10dataset/positiveimageset/%s.jpg' % (image_id))
    size = img.size
    w = int(size[0])
    h = int(size[1])

    for obj in in_file:
        newmo = (((obj.replace('(', '')).replace(')', '')).replace('(', '')).replace(')', '')
        list2 = newmo.strip().split(',')
        if len(list2)<5:
            continue
        cls_id = int(list2[4]) - 1
        b = (float(list2[0]), float(list2[2]), float(list2[1]), float(list2[3]))
        bb = convert((w, h), b)
        out_file.write(str(cls_id) + " " + " ".join([str(a) for a in bb]) + '\n')



data = [random.randint(0,649) for i in range(649)]
image_ids=[]
for image_temp in data:
    if image_temp<100:
        image_id_temp=(str(image_temp+1)).zfill(3)
    else :
        image_id_temp=str(image_temp+1)
    image_ids.append(image_id_temp)

list_file = open('/home/vip/Documents/xigongdashujuji/NWPUVHR-10dataset/train.txt','w')
for image_id in image_ids:
    list_file.write('/home/vip/Documents/xigongdashujuji/NWPUVHR-10dataset/positiveimageset/%s.jpg\n'%(image_id))
    convert_annotation(image_id)
list_file.close()





### YOLOv8 训练 UA-DETRAC 数据集的方法 为了使用 YOLOv8 模型训练 UA-DETRAC 数据集,可以按照以下方式操作。这涉及数据预处理、模型配置以及实际的训练过程。 #### 1. 安装依赖项 确保已安装必要的库和工具链。如果尚未设置开发环境,请参考提供的视频教程完成 CUDA 和 cuDNN 的安装[^1]。此外,还需要安装 Ultralytics 提供的 YOLOv8 库: ```bash pip install ultralytics ``` #### 2. 准备数据集 UA-DETRAC 是一个广泛使用的车辆检测数据集。下载并解压该数据集后,需将其转换为适合 YOLOv8 输入的数据格式。具体步骤如下: - **标注文件**:将原始 XML 或其他格式的标注文件转换为 YOLO 格式的 `.txt` 文件。每行表示一个边界框,格式为 `class_id center_x center_y width height`,其中坐标均归一化到 `[0, 1]` 范围。 - **目录结构**:构建标准的 YOLO 数据集目录结构: ``` dataset/ ├── images/ │ ├── train/ │ └── val/ └── labels/ ├── train/ └── val/ ``` 可以通过编写 Python 脚本来实现上述转换逻辑。例如: ```python import xml.etree.ElementTree as ET from pathlib import Path def convert_xml_to_yolo(xml_file: str, output_dir: str): tree = ET.parse(xml_file) root = tree.getroot() size = root.find('size') img_width = int(size.find('width').text) img_height = int(size.find('height').text) with open(output_dir / (Path(xml_file).stem + '.txt'), 'w') as f: for obj in root.findall('object'): class_name = obj.find('name').text bbox = obj.find('bndbox') xmin = float(bbox.find('xmin').text) ymin = float(bbox.find('ymin').text) xmax = float(bbox.find('xmax').text) ymax = float(bbox.find('ymax').text) x_center = ((xmin + xmax) / 2) / img_width y_center = ((ymin + ymax) / 2) / img_height width = (xmax - xmin) / img_width height = (ymax - ymin) / img_height # 假设类别索引从 0 开始 class_index = 0 if class_name == 'car' else 1 f.write(f"{class_index} {x_center:.6f} {y_center:.6f} {width:.6f} {height:.6f}\n") # 遍历所有 XML 文件并调用函数 xml_files = list((Path("path/to/xml/files")).glob("*.xml")) output_labels_dir = Path("path/to/output/labels") for xml_file in xml_files: convert_xml_to_yolo(str(xml_file), output_labels_dir) ``` 此脚本会读取 XML 标注并将它们保存为对应的 YOLO 格式文本文件[^3]。 #### 3. 创建数据 YAML 文件 YOLOv8 使用 YAML 文件定义数据集路径和其他参数。创建名为 `uadetrac.yaml` 的文件,内容如下: ```yaml train: path/to/dataset/images/train val: path/to/dataset/images/val nc: 2 # 类别数量(假设只有 car 和 vehicle) names: ['car', 'vehicle'] # 类别名称列表 ``` #### 4. 修改模型配置 默认情况下,Ultralytics 提供的标准配置可能不完全适用于特定任务需求。可以根据实际情况调整超参数或网络架构。例如,在命令行中指定自定义配置选项: ```bash yolo task=detect mode=train model=yolov8n.pt data=uadetrac.yaml epochs=50 batch=16 imgsz=640 ``` 此处选择了较小版本的预训练权重 (`yolov8n`) 并设置了基本训练参数。更多高级功能可参阅官方文档。 #### 5. 启动训练 运行以下命令启动训练流程: ```bash yolo task=detect mode=train model=yolov8n.pt data=uadetrac.yaml epochs=50 batch=16 imgsz=640 project=runs/uadetrac name=exp ``` 训练完成后,最佳模型会被存储在指定目录下。 --- ### 推理示例代码 训练结束后,可通过加载最优权重执行推理测试: ```python from ultralytics import YOLO model = YOLO('runs/uadetrac/exp/best.pt') # 加载训练好的模型 results = model('test_image.jpg') # 对单张图片进行预测 results.show() # 可视化结果 ``` ---
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值