(6)机器学习小白入门 YOLOv:图片的数据预处理

(1)机器学习小白入门YOLOv :从概念到实践
(2)机器学习小白入门 YOLOv:从模块优化到工程部署
(3)机器学习小白入门 YOLOv: 解锁图片分类新技能
(4)机器学习小白入门YOLOv :图片标注实操手册
(5)机器学习小白入门 YOLOv:数据需求与图像不足应对策略
(6)机器学习小白入门 YOLOv:图片的数据预处理
(7)机器学习小白入门 YOLOv:模型训练详解

在使用 YOLOv 模型进行目标检测前,图片的数据预处理是非常重要的一环,它决定了你训练出来的模型效果好不好、能不能泛化到实际场景中。下面我为你详细介绍 YOLOv 的数据预处理技术与步骤,帮助你更好地准备用于训练的数据。


一、YOLO 数据集结构要求

1. 常见文件夹结构(如使用 darknet 格式):

yolov_dataset/
│
├── images/             # 放置图片
│   ├── train/
│   └── val/
│
└── labels/              # 对应的标签文件,即 label.txt 文件├── train/└── val/

2. 图片命名要求:

  • 所有图片以 .jpg 或者 .png 格式存储;
  • train/val 中的图像名称要一致,如:
    images/train/1.jpg
    labels/train/1.txtimages/train/2.jpg
    labels/train/2.txt
    

3. label.txt 文件格式:

每张图片对应的 label.txt 包含若干行(对应图像中有多少个目标),每一行为如下结构:

class_id x_center y_center width height
  • x_center, y_center, width, height:归一化的坐标,范围 0~1。
  • class_id:目标类别在类列表中的索引编号(从 0 开始)。

🛠️ 二、YOLO 数据预处理技术与步骤

1. 图像标准化(Normalize Image)

将图片尺寸统一到模型训练时使用的大小,例如:

from PIL import Imagedef resize_image(img, target_size=(640, 640)): # YOLOv5 常用输入分辨率return img.resize(target_size)

2. 图像归一化(Normalize Pixel)

YOLO 训练过程中,一般使用以下方式进行图像归一:

import numpy as npdef normalize(img):# 将图片转换为 np.arrayimg_array = np.array(img) / 255.0  # 归一到 [0,1] 区间return img_array

3. 标签标准化处理(Label Normalization)

将标注文件中的 x_center, y_center, width, height 按图像尺寸进行归一化,例如:

def normalize_label(label_path, image_width, image_height):labels = []with open(label_path, 'r') as f:lines = f.readlines()for line in lines:parts = line.strip().split()class_id, x_center, y_center, width, height = map(float, parts)# 归一化到 0~1x_center_norm = x_center / image_widthy_center_norm = y_center / image_heightwidth_norm = width / image_widthheight_norm = height / image_heightlabels.append(f"{int(class_id)} {x_center_norm:.6f} {y_center_norm:.6f} {width_norm:.6f} {height_norm:.6f}")return labels

4. 图像增强(Image Augmentation)(可选,但推荐使用)

图像增强是提高模型泛化能力的利器。你可以采用以下方式进行增强:

使用 albumentations 进行数据增强:
import albumentations as Atransform = A.Compose([A.HorizontalFlip(p=0.5),A.RandomBrightnessContrast(p=0.2),A.Rotate(limit=15, p=0.5),A.Cutout(num_holes=4, max_height=8, max_width=8, fill_value=0, p=0.3)
])def augment_image(img):return transform(image=np.array(img))['image']

5. 分割数据集(Train/Val/Test)

使用 sklearn 或自定义方式划分训练集与验证集:

from sklearn.model_selection import train_test_split# 假设 images_list 是你的图像文件名列表
train_files, val_files = train_test_split(images_list, test_size=0.2, random_state=42)

三、使用 LabelImg 等工具生成标签(可选)

你还可以编写脚本将 .xml 转换为 YOLO 可读的 label.txt 文件:

import xml.etree.ElementTree as ETdef convert_xml_to_yolo(xml_path, img_w, img_h):tree = ET.parse(xml_path)root = tree.getroot()labels = []for obj in root.findall('object'):class_name = obj.find('name').textclass_id = 0  # 根据你自己的类定义填写 class_idbox = obj.find('bndbox')x_min = int(box.find('xmin').text)y_min = int(box.find('ymin').text)x_max = int(box.find('xmax').text)y_max = int(box.find('ymax').text)width = x_max - x_minheight = y_max - y_minxc = (x_min + x_max) / 2 / img_wyc = (y_min + y_max) / 2 / img_hw = width / img_wh = height / img_hlabels.append(f"{class_id} {xc:.6f} {yc:.6f} {w:.6f} {h:.6f}")return labels

四、预处理完整流程图(可选)

你可以使用如下结构进行训练数据的预处理:

图片文件夹
图像归一化 & 标签标准化
增强处理
划分 Train/Val 集合
YOLO 数据集输出格式

五、小结

步骤内容说明
图像标准化调整图片大小为统一尺寸
标签处理将 label.txt 中的坐标归一化到 [0,1]
数据增强(可选)通过旋转、翻转、亮度变换等方式增强多样性
分割训练/验证集提升模型泛化能力和评估性能

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/web/88317.shtml
繁体地址,请注明出处:http://hk.pswp.cn/web/88317.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

康谋新闻 | 康谋加入ASAM组织,全球首个ASIL-D认证自动驾驶仿真平台aiSim引领安全新标杆

康谋新闻康谋科技正式加入全球汽车标准化组织 ASAM(Association for Standardization of Automation and Measuring Systems),成为其正式会员单位!ASAM作为国际汽车行业标准化领域的权威机构,致力于推动仿真、测试及数…

《PyQt6-3D:开启Python 3D开发新世界》

一、引言 在 Python 的广袤开发世界中,3D 开发领域正以惊人的速度蓬勃发展,为众多领域带来了前所未有的创新与变革。从沉浸式的游戏体验到逼真的虚拟现实场景,从精准的工业设计模拟到生动的影视动画制作,3D 技术的身影无处不在&am…

第一届OpenHarmonyCTF--Crypto--WriteUp

第一届OpenHarmonyCTF–Crypto–WriteUp Ea5y_rsa题目附件解压后寻找有用的源代码: // RsaUtil import { cryptoFramework } from kit.CryptoArchitectureKit; import { buffer } from kit.ArkTS;class RsaUtil{private keyPair: cryptoFramework.KeyPair | null n…

Copilot 在 VS Code 中的免费替代方案

## 引言随着 GitHub Copilot 推出付费 Pro 版,许多开发者开始寻找免费替代方案。本文精选 7 款 2025 年主流免费 AI 编程工具,涵盖不同使用场景和编程语言需求。## 主流替代方案对比| 工具名称 | 核心优势 | 支持语…

视频能转成gif动图吗?怎么弄?

在一些社交平台中,分享短小有趣的片段。GIF自动循环播放,无需用户点击。兼容性高,几乎所有平台都支持直接预览。例子:将电影/综艺的搞笑片段转为GIF传播。游戏精彩操作截取为GIF分享。这就需要我们掌握把视频转换成gif动图的技术&…

【Pyhton】Json.dump 语法说明

目录json.dump() 的语法参数说明1. obj2. fp3. skipkeys4. ensure_ascii5. check_circular6. allow_nan7. cls8. indent9. separators10. default11. sort_keys**示例代码****基本用法**使用 indent 和 separators使用 default 参数总结json.dump() 是 Python 中 json 模块用于…

LangGraph-2-interrupt 流程中断

interrupt 是 LangGraph 中一个强大的流程控制机制,允许在状态机执行过程中根据特定条件中断当前流程并跳转到其他节点。这种机制特别适用于处理异常情况、用户中断或特定业务规则的触发。在 LangGraph 中,interrupt_before 和 interrupt_after 是两个强…

前缀和|差分

题目:MT2047距离平方和你有𝑛n个点,请编写一个程序,求这𝑛n个点的距离的平方和。格式输入格式:第一行:一个整数𝑛(0≤𝑛≤100000)n(0≤…

x86架构CPU市场格局

x86架构的CPU市场是全球处理器市场的核心,涵盖PC(桌面端与移动端)、服务器和超算等领域,主要玩家为英特尔(Intel)和AMD。以下基于最新数据分析市场格局及各领域份额,辅以国产厂商动态。 1. 总体…

【Swift开发】屏蔽NSSecureCoding频繁警告

解决 iOS 开发中 NSSecureCoding 警告的最佳实践 问题背景 在开发 Mac 应用时,我遇到了一个令人困扰的问题:Xcode 控制台不断输出 NSSecureCoding allowed classes list contains [NSObject class] 相关的警告信息。这些警告虽然不影响应用功能&#xff…

SpringBoot实现MCP

前言 之前的文章都是各种使用MCP,自从有了MCP我们立马感受到大模型真的可以帮我们干活了,实际上当我们想把企业内部的业务向AI方向转型的话主要就是实现MCP,另外加上多Agent在流程上的控制和自有的知识库这就可以满足企业80%的需求了,剩下的2…

windows对\和/敏感吗?

在Windows系统中,路径分隔符\和/的敏感性需要分情况来看: 1. 文件系统层面 Windows文件系统(如NTFS、FAT32)不区分\和/。 例如,以下路径是等效的: C:\Users\Documents\file.txt C:/Users/Documents/file.tx…

缓存穿透与击穿多方案对比与实践指南

缓存穿透与击穿多方案对比与实践指南 问题背景介绍 在高并发的分布式系统中,缓存是提升读写性能的重要组件。但在实际生产环境中,经常会遇到两类问题: 缓存穿透:客户端频繁请求不存在的数据,导致请求直达数据库&#x…

【音视频】HTTP协议介绍

参考博客:https://cloud.tencent.com/developer/article/2183902 一、HTTP协议概述 HTTP(HyperText Transfer Protocol) 即 超文本传输协议,它是一种用于分布式、协作式和超媒体信息系统的应用层协议。HTTP 是万维网&#xff08…

神经网络基础及API使用详解

一、神经网络概述神经网络是一种模仿生物神经网络结构和功能的计算模型,它由大量的人工神经元相互连接构成,能够通过调整内部大量节点之间相互连接的关系,从而达到处理信息的目的。1.1 神经网络的基本组成输入层:接收原始数据隐藏…

分桶表的介绍和作用

一、分桶表的基本介绍1、什么是分桶表?分桶表主要是用于分文件的,在建表的时候,指定按照那些字段执行分桶操作,并可以设置需要分多少个桶,当插入数据的时候,执行MR的分区的操作,将数据分散各个分…

HighReport报表工具开始支持BS报表设计器

HighReport报表工具同时支持c/s报表设计器和b/s报表设计器,大部分情况下使用c/s报表设计器,在某些业务场景或者用户自己简单修改报表模板,可以用b/s报表设计器。b/s报表设计器和c/s报表设计器操作一样b/s报表设计器免费下载免费使用(c/s报表设…

数据结构--堆的实现

目录 一、堆的概念及结构 二、小根堆的实现 2.1 堆的数据结构 2.2 堆的初始化HeapInit 2.3 堆的销毁HeapDestory 2.4 堆的插入HeapPush ​2.4.1 插入代码HeapPush 2.4.2 向上调整代码AdjustUp 2.4.3 交换数据代码Swap 2.5 堆的删除HeapPop 2.5.1 删除代码HeapPop 2…

evo轨迹评估工具

文章目录evo参数设置evo_traj指标度量evo_apeevo_rpe结果比较evo工具主要有如下六个常用命令: evo_ape - 用于评估绝对位姿误差;evo_rpe- 用于评估相对位姿误差;evo_traj - 这个主要是用来画轨迹、输出轨迹文件、转换数据格式等功能&#xf…

Django+DRF 实战:自定义异常处理流程

文章目录一、DRF 异常处理流程DRF 默认异常处理流程源码二、实战DRF 自定义异常处理流程应用自定义异常处理流程一、DRF 异常处理流程 DRF 默认异常处理流程 DRF默认的异常处理流程如下: 当异常发生时,会自动调用rest_framework.views.exception_hand…