首页 > 其他分享 >Datawhale -- cv方向 task 3 笔记

Datawhale -- cv方向 task 3 笔记

时间:2024-08-31 20:57:53浏览次数:14  
标签:task 训练 -- 模型 YOLO Datawhale result 图像 数据

cv 方向的 task 3 结束了,对其进行了一些简单的梳理并进行相应的一些扩展

教程:Datawhale

Task  3 

1 . 数据集增强

1. 数据增强的目的

       对现有数据集进行扩充和变换,从现有数据集中生成新的训练样本,增加数据的多样性和丰富性,从而提高模型的泛化能力和鲁棒性。

       在实际应用中,模型往往会面临各种各样的情况,如果仅使用有限的原始数据进行训练,模型可能会过度拟合这些数据,导致在面对新的数据时表现不佳。通过数据增强,可以让模型学习到更多的变化和模式,使其能够更好地适应不同的场景和情况。

2. 数据增强的技术

       常见的增强技术包括翻转、旋转、缩放和颜色调整等。

扩展:

 

传统几何变换方法:

随机裁剪:从原始图像中随机裁剪出一部分区域,作为新的训练样本。

亮度调整:对图像的亮度进行随机调整,增加数据的光照多样性。

对比度调整:改变图像的对比度,使模型对不同对比度的图像具有更好的适应性。

添加噪声:向图像中添加随机噪声,如高斯噪声、椒盐噪声等,以模拟真实世界中的噪声情况。

图像扭曲:对图像进行扭曲、变形等操作,增加数据的多样性。

镜像变换:对图像进行镜像操作,如左右镜像或上下镜像,使模型学习到物体的镜像特征。

混合图像:将两个或多个图像进行混合,生成新的图像,同时相应地混合标签,以增加数据的多样性和模型的泛化能力。

随机擦除:随机选择图像中的一部分区域并将其擦除,使模型学习到物体的部分缺失情况。

 基于模型的数据增强方法:(利用机器学习模型来生成新的数据样本的技术)

生成对抗网络(Generative Adversarial Network,GAN): 由生成器和判别器组成。生成器试图生成逼真的假数据样本,而判别器则试图区分真实数据和生成器生成的数据。通过不断训练这两个网络,生成器可以学习到数据的分布,从而生成新的、与原始数据相似的数据样本。

变分自编码器(Variational Autoencoder,VAE):一种生成模型,它可以学习数据的潜在表示。通过对潜在表示进行采样,可以生成新的数据样本。VAE 可以用于图像、文本等数据的增强。

自训练和半监督学习:利用少量有标记数据进行模型的初步训练,然后使用训练好的模型对大量无标记数据进行预测,将预测结果作为伪标记数据。这些伪标记数据可以与原始数据一起用于进一步训练模型,从而实现数据增强的效果。

模型融合:结合多个不同的模型或模型的预测结果,生成新的数据样本。例如,可以使用多个模型对同一数据进行预测,然后将这些预测结果进行组合或融合,得到新的样本。

迁移学习:将在一个数据集上训练好的模型应用于另一个相关的数据集,并根据新数据集的特点进行微调。这种方法可以利用已有的模型知识,减少对大量数据的需求。

主动学习增强方法:

       主动学习是一种通过选择最有价值的数据进行标注,从而减少数据标注工作量并提高模型性能的方法。通过主动学习增强方法,可以更加有效地利用有限的标注资源,提高数据的质量和模型的性能。同时,这种方法也可以减少对大量数据的需求,降低数据收集和标注的成本。主动学习增强方法的效果取决于数据的分布、模型的选择以及标注策略的合理性等因素。

 

推荐:

常用数据增强方法(基于pytorch)_pytorch,数据增强-CSDN博客

数据增强(Data Augmentation)常用方法汇总-CSDN博客 

【深度学习】数据增强基本介绍和常用的数据增强方法-CSDN博客 

深度学习数据增强方法-内含(亮度增强、对比度增强、旋转图像、翻转图像、仿射变化扩充图像、错切变化扩充图像、HSV数据增强、平移扩充)8种方式进行增强-每种扩充一张实现8倍扩)+ 图像缩放代码-批量_通过旋转、翻转、对比度变换等方法扩充数据集-CSDN博客 

总结 62 种在深度学习中的数据增强方式_stylemix: separating content and style for enhance-CSDN博客  

3. 相关库

        Albumentations、Imgaug 和 TensorFlow 的 ImageDataGenerator 等库可以实现这些增强。

Albumentations:一个功能强大的图像增强库,提供了丰富的图像变换操作,包括几何变换、颜色变换、添加噪声等。它支持多种数据格式,如 NumPy 数组、PIL 图像和 OpenCV 图像。

链接:albumentations — albumentations 1.1.0 documentation 

Imgaug:一个广泛使用的图像增强库,它提供了各种各样的图像增强操作,并且可以很容易地与其他深度学习框架集成。

链接:GitHub - aleju/imgaug: Image augmentation for machine learning experiments.

TensorFlow 的 ImageDataGenerator: TensorFlow 提供的一个用于图像数据增强的工具,它可以自动进行数据增强操作,如翻转、旋转、缩放等,并且可以直接在训练过程中使用。 

数据增强方法描述
Mosaic Augmentation将四张训练图像组合成一张,增加物体尺度和位置的多样性。
Copy-Paste Augmentation复制一个图像的随机区域并粘贴到另一个图像上,生成新的训练样本。
Random Affine Transformations包括图像的随机旋转、缩放、平移和剪切,增加对几何变换的鲁棒性。
MixUp Augmentation通过线性组合两张图像及其标签创造合成图像,增加特征空间的泛化。
Albumentations一个支持多种增强技术的图像增强库,提供灵活的增强管道定义。
HSV Augmentation对图像的色相、饱和度和亮度进行随机变化,改变颜色属性。
Random Horizontal Flip沿水平轴随机翻转图像,增加对镜像变化的不变性。

 

2 . 设置 YOLO 模型训练参数

链接:Configuration - Ultralytics YOLO Docs

1. 训练设置的重要性

       YOLO 模型的训练设置包括多种超参数和配置,这些设置会影响模型的性能、速度和准确性。

       不同的训练参数组合会导致模型在训练过程中的收敛速度、最终的性能表现以及对不同数据集的适应性等方面存在差异。

2. 微调的作用

       微调是指在使用预先训练的模型的基础上,根据具体的任务和数据集,对模型的参数进行进一步的调整和优化。由于预先训练的模型通常是在大规模数据上训练得到的,它已经学习到了一些通用的特征和模式。但是,对于特定的任务和数据集,这些通用的特征和模式可能并不完全适用。通过微调,可以使模型更好地适应特定的任务和数据集,提高模型的性能。

3. 常见参数

imgsz:图像尺寸的设置不仅会影响模型的准确性,还会对计算资源的需求产生影响。较大的图像尺寸可以提供更多的细节信息,有助于模型学习到更精确的特征,但同时也会增加计算量和内存消耗,导致训练时间延长。相反,较小的图像尺寸可以减少计算量和内存消耗,提高训练速度,但可能会损失一些细节信息,影响模型的准确性。

save_period:合理设置保存模型检查点的频率可以在训练过程中及时保存模型的进展,以便在训练中断或出现问题时能够从最近的检查点继续训练。同时,也可以避免频繁保存模型导致的存储资源浪费。

device:选择合适的计算设备可以充分利用硬件资源,提高训练效率。如果有多个 GPU 可用,可以考虑使用并行计算来加速训练。

optimizer:不同的优化器在训练过程中的表现不同,需要根据模型的特点和数据集的性质选择合适的优化器。例如,SGD 优化器在一些情况下可能更容易收敛,而 Adam 优化器在处理大规模数据时表现较好。

momentum:动量因子可以加速模型的收敛速度,减少震荡。较大的动量因子可以使模型在训练过程中更快地朝着最优解的方向前进,但也可能导致模型错过最优解。

weight_decay:L2 正则化项可以防止模型过拟合,通过对模型的参数进行约束,使模型更加简单和泛化能力更强。

warmup_epochs:学习率预热的周期数可以在训练开始时逐渐增加学习率,使模型更加稳定地开始训练,避免因为初始学习率过大而导致的训练不稳定。

warmup_momentum:预热阶段的初始动量可以与学习率预热相结合,进一步提高训练的稳定性。

warmup_bias_lr:预热阶段偏置参数的学习率可以单独设置,因为偏置参数的更新方式与其他参数不同,需要特殊处理。

box:边界框损失在损失函数中的权重可以调整模型对边界框预测的重视程度,从而影响模型的检测精度。

cls:分类损失在总损失函数中的权重可以控制模型对分类任务的关注程度,根据数据集的特点和任务需求进行合理设置。

dfl:分布焦点损失的权重可以影响模型对目标分布的学习,对于一些特定的任务和数据集,适当调整这个权重可以提高模型的性能。

4. 参数设置建议

        在设置 YOLO 模型的训练参数时,需要综合考虑多个因素,包括数据集的大小、复杂度、计算资源的可用性等。一般来说,可以先使用默认参数进行训练,然后根据训练结果和模型的表现进行调整。例如,如果发现模型在训练过程中出现过拟合现象,可以适当增加 weight_decay 的值;如果模型的收敛速度较慢,可以调整 momentum 或 optimizer 的参数。此外,还可以通过交叉验证等方法来寻找最优的参数组合。

 

3 . 设置 YOLO 模型预测行为和性能

1. 预测结果的组成部分

        YOLO 模型的预测结果通常包括多个组成部分,如边界框输出、分割掩码输出、姿态输出、分类输出、定向边界框输出、置信度得分等。

属性描述
cls类别概率,表示当前预测结果属于类别0的概率为0。
conf置信度,模型对其预测结果的置信度,接近92%。
data包含边界框坐标和置信度以及类别概率的原始数据。
id没有分配唯一的对象ID。
is_track预测结果不是来自跟踪的对象。
orig_shape输入图像的原始尺寸,这里是500x500像素。
shape预测结果张量的形状,表示一个边界框的六个值。
xywh归一化的边界框坐标,中心坐标和宽高。
xywhn归一化的边界框坐标(无偏移)。
xyxy原始边界框坐标,左上角和右下角坐标。
xyxyn归一化的原始边界框坐标。

 

2. 数据处理能力

       YOLO 模型具有强大的数据处理能力,使其在实际应用中展现出高度的灵活性。

图像集合处理:它能够同时对多个图像进行预测,显著提高了处理效率。这在需要批量处理图像的场景中非常有用,例如在大规模图像数据集上进行快速检测。

视频文件和实时视频流处理:对于视频文件,YOLO 模型可以逐帧进行预测,从而实现实时目标检测。这对于视频监控、智能驾驶等实时性要求较高的应用至关重要。在处理实时视频流时,它能够及时捕捉到视频中的目标信息,为后续的决策提供支持。

预处理功能:YOLO 模型具备对图像或视频进行预处理的能力。它可以根据需要调整图像大小,使其满足模型的输入要求。同时,还可以进行归一化等操作,以提高模型的训练和预测效果。通过这些预处理步骤,能够更好地适应不同的数据源和应用场景,确保模型的准确性和稳定性。

 

3. 参数调整的灵活性

        YOLO 模型为用户提供了丰富的参数调整选项,使其能够根据特定应用场景的需求灵活地定制模型的行为和性能。

置信度阈值(conf 阈值)调整:通过提高 conf 阈值,可以减少误报的数量。这意味着模型会更加谨慎地做出预测,只有当它对预测结果有较高的信心时才会给出检测结果。然而,需要注意的是,提高 conf 阈值可能会导致漏报增加,因为一些原本可能被检测到的目标可能会因为阈值的提高而被忽略。因此,在实际应用中,需要根据对误报和漏报的容忍度来平衡 conf 阈值的设置。

精度和速度的权衡:使用 half 精度可以显著提高模型的执行速度,这对于计算资源有限或对实时性要求较高的场景非常有利。然而,使用 half 精度可能会导致一定程度的精度损失。在一些对精度要求较高的任务中,可能需要谨慎考虑是否使用 half 精度。此外,还可以通过调整其他参数,如模型的深度、宽度等,来在精度和速度之间进行更精细的权衡。

视频处理帧率控制:调整 vid_stride 参数可以控制视频处理的帧率。通过增加或减少 vid_stride 的值,用户可以调整模型在处理视频时跳过的帧数。例如,在对实时性要求较高而对准确性要求相对较低的场景中,可以适当增加 vid_stride,以提高处理速度;而在对准确性要求较高的场景中,则可以减小 vid_stride,以确保更准确地检测到目标。

边界框损失权重调整:通过调整 box 参数,可以改变边界框损失在总损失函数中的权重。这可以影响模型对边界框预测的重视程度,从而调整模型在定位目标时的准确性。

分类损失权重调整:cls 参数用于调整分类损失在总损失函数中的权重。根据数据集的特点和任务需求,可以适当增加或减少分类损失的权重,以优化模型在分类任务上的性能。

分布焦点损失权重调整:dfl 参数控制分布焦点损失的权重,该损失函数用于处理目标检测中的类别不平衡问题。合理调整 dfl 参数可以提高模型对稀有类别的检测能力。

学习率调整:学习率是模型训练中的一个重要参数,它决定了模型参数更新的步长。可以根据模型的训练情况调整学习率,例如在训练初期使用较大的学习率以加速收敛,在训练后期使用较小的学习率以精细调整模型参数。

优化器选择:YOLO 模型支持多种优化器,如 SGD、Adam 等。不同的优化器在训练过程中的表现不同,用户可以根据模型的特点和数据集的性质选择合适的优化器。

数据增强参数调整:除了模型本身的参数,还可以调整数据增强的相关参数,如翻转、旋转、缩放等的概率和幅度,以进一步增加数据的多样性,提高模型的泛化能力。

4 . 代码剖析

       下面代码使用 ultralytics 库中的 YOLO 模型对图像进行目标检测,并处理和保存预测结果 。

from ultralytics import YOLO

      从 ultralytics 库中导入 YOLO 类

# Load a model
model = YOLO("yolov8n.pt")  # pretrained YOLOv8n model

      创建了一个 YOLO 模型对象,并加载了预训练的模型权重文件 yolov8n.pt 

# Run batched inference on a list of images
results = model(["im1.jpg", "im2.jpg"])  # return a list of Results objects

      使用加载的模型对列表中的图像进行批量推理

 model: 这是之前定义的 YOLO 模型对象。

["im1.jpg", "im2.jpg"]: 这是一个包含图像文件路径的列表。

results: 调用 model 对象并传入图像列表,执行批量推理。这将返回一个包含多个 Results 对象的列表,每个 Results 对象对应一个输入图像的推理结果。

# Process results list
for result in results:
    boxes = result.boxes  # Boxes object for bounding box outputs
    masks = result.masks  # Masks object for segmentation masks outputs
    keypoints = result.keypoints  # Keypoints object for pose outputs
    probs = result.probs  # Probs object for classification outputs
    obb = result.obb  # Oriented boxes object for OBB outputs
    result.show()  # display to screen
    result.save(filename="result.jpg")  # save to disk

      遍历 results 列表中的每个 Results 对象,并执行以下操作:

1)提取边界框、分割掩码、关键点、分类概率和定向边界框信息(如果有)。

2)展示每个图像及其检测结果到屏幕上。

3)将每个图像及其检测结果保存到磁盘上的文件 result.jpg

解析: 

 results: 这是一个包含多个 Results 对象的列表,每个对象对应一个输入图像的推理结果。

result: 当前遍历到的 Results 对象。

result.boxes: 包含检测到的边界框信息。每个边界框包括坐标、类别、置信度等。

result.masks: 包含分割掩码信息(如果有分割任务)。

result.keypoints: 包含关键点信息(如果有关键点检测任务)。

result.probs: 包含分类概率信息(如果有分类任务)。

result.obb: 包含定向边界框信息(如果有定向边界框任务)。

result.show(): 将当前图像及其检测结果展示到屏幕上。

result.save(filename="result.jpg"): 将当前图像及其检测结果保存到磁盘上的文件 result.jpg

 

标签:task,训练,--,模型,YOLO,Datawhale,result,图像,数据
From: https://blog.csdn.net/2301_79387683/article/details/141753282

相关文章

  • AI产品经理薪资揭秘:起薪30k不是梦!零基础转行攻略大公开
    2024年,还有什么新风口?AI、元宇宙、NFT…很多人不知道,其实不管是元宇宙还是NFT,它们本质上就是人工智能领域。AI自身应用领域非常广泛,大批高薪岗位随之涌了出来,包括AI产品经理。AI产品经历具体工作内容是什么?薪资有多香?普通人如何进入AI人工智能行业?需要写代码吗?别急,小......
  • 运维系列&AI系列&Lenovo-G双系统系列(前传-装之前搜索的):ubuntu正确安装显卡驱动的姿势
    ubuntu正确安装显卡驱动的姿势ubuntu正确安装显卡驱动的姿势1.ubuntu16.04默认安装了第三方开源的驱动程序nouveau,安装nvidia显卡驱动首先需要禁用nouveau,不然会碰到冲突的问题,导致无法安装nvidia显卡驱动。2.在英伟达的官网上查找你自己电脑的显卡型号然后下载相应的......
  • 1-1 Markdown学习
    问题1我学到了Markdown是一种轻量级标记语言,用于格式化纯文本。它的语法设计简洁,易于学习,主要用于编写格式化的文本,如文档、博客、README文件等。我学到了一些常见的Markdown语法及其用法。AI推荐的线上工具有StackEdit和Dillinger,线下工具有Typora和Obsidian。我还学到了在AIGC......
  • 多线程篇(基本认识 - 锁优化)(持续更新迭代)
    目录一、前言二、阿里开发手册三、synchronized锁优化的背景四、Synchronized的性能变化1.Java5之前:用户态和内核态之间的切换2.java6开始:优化Synchronized五、锁升级1.无锁2.偏向锁2.1.前言2.2.什么是偏向锁2.3.偏向锁的工作过程2.4.为什么要引入偏向锁......
  • 多线程篇( 并发编程 - 多线程问题)(持续更新迭代)
    目录一、线程的上下文切换问题1.简介2.多线程一定比单线程快?3.如何减少上下文切换二、线程安全问题1.什么是线程安全?2.java语言中的线程安全2.1.不可变2.2.绝对线程安全2.3.相对线程安全2.4.线程兼容2.5.线程对立3.java实现线程安全的方法?3.1.互斥同......
  • 手把手教你创建Shopify开发合作者账号
    如果你现在不了解Shopify开发,建议可以先了解一下,或者在评论区留言,我看看是否有必要写篇博文给大家介绍一下,好了,进入今天的主题,手把手来教大家创建一个shopify开发合作者账号。如何创建shopify开发合作者账号:第1步:打开shopify开发者网站,点击如下图的位置:第2步:点击下面这个卡......
  • AI编码新时代:免费人工智能助手Blackbox AI
    前言:在当今快速发展的科技时代,人工智能已经渗透到我们生活的方方面面,从智能手机的语音助手到智能家居控制系统,再到在线客服和个性化推荐算法,AI智能工具正变得越来越普遍。它们以其高效、智能和用户友好的特性,极大地提升了我们的生活和工作效率。作为一个热衷于尝试各种......
  • Stable Diffusion 小白的入坑铺垫
    小白的StableDiffusion入坑铺垫本文主要讲述一些StableDiffusion入坑前需要了解的一些相关概念,不会涉及很高深的理论知识,因为我也讲不明白。本文所讲的内容基本上小学生就能看懂。如果你完全没听说过StableDiffusion也没关系,只要你听说过AI绘画,并且对此有兴趣,就能跟着......
  • STL 改造红黑树 模拟封装set和map
    改造红黑树目录改造红黑树适配STL迭代器的红黑树基本结构RBTreeNode__RBTree_iteratorRBTree完整代码封装的set封装的map在初次看STL中实现红黑树的源码时有些不理解,然后自己尝试对set以RBTree<K,K>的方式封装红黑树的迭代器;实现过程发现,这样封装复用程度特别低,也特别冗余,......
  • equals ,hashcode ,== ,三者之间的关系与区别
    为什么要重写equals和hashcode        在Java中,重写equals方法和hashCode方法是为了确保对象在逻辑上相等时,它们在集合(如HashMap、HashSet)中的行为也是一致的。以下是详细解释:为什么要重写 equals 方法默认行为:默认情况下,Object类的equals方法比较的是两个对......