从壹开始解读Yolov11【源码研读系列】——Data.Augment.py:数据增强模块第四部分——Format图片+标签Pytorch格式化

【系列目录】本系列所有文件分章节内容的目录文章请参考:【源码研读系列】目录

【实验代码】本系列所有实验设计的源码都以上传 Gitee码云和GitCode 平台。GitCode代码项目地址:GitCode;在Gitee主页搜索“机器白学”,所有项目中的“YOLO源码实验”就是本系列所有实验代码。Gitee代码项目地址:Gitee

    

目录

一、augment.Format类:输入标签图片Torch格式统一化

        1.Format类功能概述

        2.__init__:类参数初始化

        3.__call__:标准化标签与图片数据主功能

        4._format_img:图片Torch格式化


        【前情回顾】在上一篇文章中介绍了augment.py数据增强文件中一个重要的类——LetterBox图片形状大小统一化,这是不管训练还是预测都必须进行的图片操作。

        LetterBox类文章地址:https://blog.youkuaiyun.com/qq_58718853/article/details/143233094

        【本节预告】本文继续augment.py类部分的解读记录,下面要介绍的Format类,其跟LetterBox类一样十分重要,尤其是在训练时,作用是将图片的标签信息标准化为Pytorch需要的统一格式,方便后续数据集加载器构建需要。

一、augment.Format类:输入标签图片Torch格式统一化

        1.Format类功能概述

        Format 类用于标准化图像的标签信息,以便用于目标检测、实例分割和姿态估计任务。该类将图像和实例的注释转换为统一的格式,以便后续的 collate_fn(批处理函数)在 PyTorch 的 DataLoader 中使用。

        其整体结构如下图所示,包含初始化该类一共定义了四个方法。其中__call__主要功能是将图像的标签格式化,以适用目标检测任务,此方法是重点对象,关键功能实现部分;_format_img主要是将图像从numpy数组转为pytorch张量;_format_segments是将语义分割的多边形分割信息转为位图掩码(mask)。

38ee9aaf00cf41c4904c12ee7ec8f1c0.png

        2.__init__:类参数初始化

        首先看此类的初始化参数含义,归纳在下面表格。

bbox_format输入字符串(str)。边界框的格式(如‘xyxy’表示左上右下两点坐标;‘xywh’表示左上点坐标加上框的宽高)
normalize输入bool值。是否将边界框的坐标取值归一化至区间【0,1】
return_mask输入bool值。是否返回实例分割的掩码(语义分割任务)
return_keypoint输入bool值。是否返回关键点(姿态评估任务)
return_obb输入bool值。是否返回定向边界框OBB

        OBB(Oriented Bounding Box,定向边界框)是一种与传统的平行轴对齐边界框(Axis-Aligned Bounding Box,AABB)不同的边界框。

        传统的AABB边界框通常是矩形,与图像边界平行,其表示方式通常为左上角坐标加上宽度和高度(x, y, w, h),不考虑物体的旋转方向

        OBB边界框可以随物体的方向进行旋转,通常用来更准确地表示具有明显方向的物体。OBB的表示方式一般为中心点坐标、宽度、高度、以及旋转角度(或直接提供四个角点坐标)。这种方式特别适合那些在图像中倾斜、旋转的目标物体。OBB 的优势在于能够更好地适应物体的真实形状和方向,提高检测精度,尤其在目标密集且形状复杂的场景中。

mask_ratio输入整数int值。掩码下采样比例。(语义分割任务)
mask_overlap输入bool值。掩码是否可以重叠(语义分割任务)
batch_idx输入bool值。是否保留批次索引
bgr输入float浮点数。返回BGR图像的概率

        3.__call__:标准化标签与图片数据主功能

        此方法并不复杂,该函数接受一个包含图像和标签数据的字典 labels,输出格式化后的字典。

        下面暂时屏蔽掉语义分割(return_mask)、姿态评估(return_keypoint)、旋转定向框(return_obb)处的处理代码,专注于检测模型主要的处理逻辑。

        下图注释了相关代码的作用和含义。

bda1d295501f425faceb831fc448a673.png

        所有实验代码已上传至Gitee仓库 data/augment/Format.py 下。

c8fc00d4c18e429398c07ed0aabeaaa5.png

        下面首先实验一下默认参数进行格式化操作后的labels输出。

        可以看到图片、类别、边界框都转为了PyTorch数据格式。且边界框是归一化后的数据。

c2f7da89d5ff4bffb719c2ae46fd8533.png

        继续将归一化功能屏蔽,打印查看此时的边界框信息,已经是坐标绝对值形式的了。

e3df25d2ce6b4a7496ff84808ad344e5.png

        4._format_img:图片Torch格式化

        下面查看 __call__ 主要实现逻辑功能方法中对图片处理的函数——_format_img。其主要是格式化图片信息以满足模型输入的Torch格式——如输入通道、数据连续性、颜色通道等。

13be0b04f6ee48cf9ba8dd449a8a8c65.png

        下面实验一下上述代码逻辑。 左侧为原图, 右侧为Format后的效果图,可以看到颜色进行了翻转。左图是自己创建的RGB图,右侧是模型实际读取“看到”的Torch结果图。

0077e6e5a788493ebe7b87428591eccf.png0acaec729ff04f05ab58604abd70a4c6.png

        至此,data文件中的augment.py文件中的一些基本类介绍完毕,还有一些针对语义分割、图像分类、姿态评估的增强操作将在以后编写相关任务时记录。 

        下一篇文章新开一个py文件——解读data文件下的 base.py文件,其中定义了一个可灵活调整的数据加载类。

        下一篇文章快速链接:从壹开始解读Yolov11【源码研读系列】——Data.Base.py.BaseDataset:可灵活改写的数据集加载处理基类-优快云博客

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值