当前位置: 首页 > news >正文

YOLOv5训练长方形图像详解

文章目录

  • YOLOv5训练长方形图像详解
    • 一、引言
    • 二、数据集准备
      • 1、创建文件夹结构
      • 2、标注图像
      • 3、生成标注文件
    • 三、配置文件
      • 1、创建数据集配置文件
      • 2、选择模型配置文件
    • 四、训练模型
      • 1、修改训练参数
      • 2、开始训练
    • 五、使用示例
      • 1、测试模型
      • 2、评估模型
    • 六、总结

YOLOv5训练长方形图像详解

在这里插入图片描述

一、引言

YOLOv5 是一种高效的目标检测算法,广泛应用于各种图像识别任务。然而,当处理长方形图像时,可能会遇到一些特殊问题,如图像尺寸不匹配、标注不准确等。本文将详细介绍如何在 YOLOv5 中训练长方形图像,确保模型能够准确地检测和识别目标。

二、数据集准备

1、创建文件夹结构

首先,需要在 YOLOv5 根目录下创建一个文件夹 VOCData,并在其中创建以下子文件夹:

  • images:存放待标注的图像文件(JPG格式)。
  • Annotations:存放标注后的文件(采用 XML 格式)。
VOCData/
├── images/         # 存放图像文件
├── Annotations/    # 存放标注文件

2、标注图像

使用在线标注工具如 MAKE SENSE 进行标注。标注完成后,将标注文件保存为 XML 格式,并存放在 Annotations 文件夹中。

3、生成标注文件

创建 voc_label.py 文件,将训练集、验证集、测试集生成 YOLO 格式的标注文件,并将数据集路径导入到 train.txtval.txt 文件中。代码如下:

import xml.etree.ElementTree as ET
import os
from os import getcwdsets = ['train', 'val', 'test']
classes = ["class1", "class2"]  # 根据实际情况修改类别名称def convert(size, box):dw = 1. / size[0]dh = 1. / size[1]x = (box[0] + box[1]) / 2.0 - 1y = (box[2] + box[3]) / 2.0 - 1w = box[1] - box[0]h = box[3] - box[2]return x * dw, y * dh, w * dw, h * dhdef convert_annotation(image_id):in_file = open('VOCData/Annotations/%s.xml' % (image_id), encoding='UTF-8')out_file = open('VOCData/labels/%s.txt' % (image_id), '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)for obj in root.iter('object'):difficult = obj.find('difficult').textcls = obj.find('name').textif cls not in classes or int(difficult) == 1:continuecls_id = classes.index(cls)xmlbox = obj.find('bndbox')b = (float(xmlbox.find('xmin').text), float(xmlbox.find('xmax').text), float(xmlbox.find('ymin').text), float(xmlbox.find('ymax').text))b1, b2, b3, b4 = bif b2 > w:b2 = wif b4 > h:b4 = hb = (b1, b2, b3, b4)bb = convert((w, h), b)out_file.write(str(cls_id) + " " + " ".join([str(a) for a in bb]) + '\n')in_file.close()out_file.close()wd = getcwd()
for image_set in sets:if not os.path.exists('VOCData/labels/'):os.makedirs('VOCData/labels/')image_ids = open('VOCData/ImageSets/Main/%s.txt' % (image_set)).read().strip().split()list_file = open('VOCData/dataSet_path/%s.txt' % (image_set), 'w')for image_id in image_ids:list_file.write(wd + '/VOCData/images/%s.jpg\n' % (image_id))convert_annotation(image_id)list_file.close()

三、配置文件

1、创建数据集配置文件

在 YOLOv5 目录下的 data 文件夹下新建一个 myvoc.yaml 文件,内容如下:

train: D:/Yolov5/yolov5/VOCData/dataSet_path/train.txt
val: D:/Yolov5/yolov5/VOCData/dataSet_path/val.txt# number of classes
nc: 2# class names
names: ["class1", "class2"]

确保路径和类别名称与实际情况一致。

2、选择模型配置文件

YOLOv5 有多种配置文件,如 yolov5s.yamlyolov5m.yamlyolov5l.yamlyolov5x.yaml。选择一个合适的配置文件,例如 yolov5x.yaml,并将其复制到 models 文件夹中,重命名为 ddjc_model.yaml,然后修改 nc 为实际的类别数。

四、训练模型

1、修改训练参数

train.py 文件中,找到 def parse_opt(known=False) 函数,修改训练参数。例如:

parser = argparse.ArgumentParser()
parser.add_argument('--weights', type=str, default='yolov5x', help='initial weights path')
parser.add_argument('--cfg', type=str, default=ROOT / 'models/ddjc_model.yaml', help='model.yaml path')
parser.add_argument('--data', type=str, default=ROOT / 'data/myvoc.yaml', help='dataset.yaml path')
parser.add_argument('--hyp', type=str, default=ROOT / 'data/hyps/hyp.scratch-low.yaml', help='hyperparameters path')
parser.add_argument('--epochs', type=int, default=50)
parser.add_argument('--batch-size', type=int, default=16, help='total batch size for all GPUs, -1 for autobatch')
parser.add_argument('--imgsz', '--img', '--img-size', type=int, default=640, help='train, val image size (pixels)')
parser.add_argument('--rect', action='store_true', help='rectangular training')
parser.add_argument('--device', default='cuda', help='cuda device, i.e. 0 or 0,1,2,3 or cpu')

2、开始训练

在终端中运行以下命令开始训练:

python train.py --img 640 --batch 16 --epochs 50 --data data/myvoc.yaml --cfg models/ddjc_model.yaml --weights yolov5x.pt --name ddjc_model

五、使用示例

1、测试模型

训练完成后,可以使用 detect.py 文件进行测试。例如:

python detect.py --weights runs/train/ddjc_model/weights/best.pt --img 640 --conf 0.25 --source data/images

2、评估模型

使用 val.py 文件评估模型性能:

python val.py --weights runs/train/ddjc_model/weights/best.pt --data data/myvoc.yaml --img 640

六、总结

本文详细介绍了如何在 YOLOv5 中训练长方形图像,包括数据集准备、标注、配置文件设置和模型训练。通过这些步骤,可以确保模型能够准确地检测和识别长方形图像中的目标。希望本文对您有所帮助。


版权声明:本博客内容为原创,转载请保留原文链接及作者信息。

参考文章

  • Yolov5训练自己的数据集(详细完整版)_yolov5缔宇-CSDN博客
  • 如何制作数据集并基于yolov5训练成模型并部署
http://www.lryc.cn/news/521084.html

相关文章:

  • 【2025最新】Poe保姆级订阅指南,Poe订阅看这一篇就够了!最方便使用各类AI!
  • type1-100,2 words
  • Leetcode 377. 组合总和 Ⅳ 动态规划
  • 计算机网络(五)——传输层
  • 【SQL】进阶知识 -- 删除表的几种方法(包含表内单个字段的删除方法)
  • 【搭建JavaEE】(3)前后端交互,请求响应机制,JDBC数据库连接
  • 项目概述、开发环境搭建(day01)
  • 车联网安全--TLS握手过程详解
  • 【python】OpenCV—Extract Horizontal and Vertical Lines—Morphology
  • Redis十大数据类型详解
  • Open FPV VTX开源之betaflight配置
  • AT32 bootloader程序与上位机程序
  • 数据结构与算法之栈: LeetCode 151. 反转字符串中的单词 (Ts版)
  • 使用 configparser 读取 INI 配置文件
  • idea 自动导包,并且禁止自动导 *(java.io.*)
  • RK3588-NPU pytorch-image-models 模型编译测试
  • 低代码从“产品驱动”向“场景驱动”转型,助力数字化平台构建
  • 相加交互效应函数发布—适用于逻辑回归、cox回归、glmm模型、gee模型
  • 用gpg和sha256验证ubuntu.iso
  • 深入解析 ZooKeeper:分布式协调服务的原理与应用
  • 【Rust自学】11.10. 集成测试
  • 对当前日期进行按年、按月、按日的取值
  • 【Rust自学】12.2. 读取文件
  • C++内存泄露排查
  • Http 响应状态码 前后端联调
  • 48_Lua错误处理
  • shell脚本回顾1
  • 【3】管理无线控制器
  • SOME/IP 协议详解——服务发现
  • Flutter:封装ActionSheet 操作菜单