数据增强库albumentations使用指南

news2024/9/21 0:50:51

数据增强技术就是人为地生成真实数据集的不同版本以增加其数据大小。计算机视觉(CV)和自然语言处理 (NLP) 在模型训练过程中经常使用数据增强策略来处理数据稀缺和数据多样性不足的问题,避免模型因数据量而导致的过拟合、泛化性不足等问题。计算机视觉中常见的数据增强手段有:旋转、水平/垂直翻转、随机裁剪、平移、尺度缩放、颜色增强、调整亮度饱和度、扭曲、随机mask等。

文章目录

  • 1、Albumentations 库简介
  • 2、Albumentations优势
    • 2.1 速度快
    • 2.2 匹配终端推理
  • 3、Albumentations使用示例


1、Albumentations 库简介

Albumentations 是一个 Python 库,用于快速灵活的图像增强。Albumentations 有效地实现了丰富多样的图像变换操作,这些操作针对性能进行了优化,同时为不同的计算机视觉任务提供了简洁而强大的图像增强界面,包括分类、目标检测、图像分割、关键点。
官网地址:https://albumentations.ai
技术文档:https://albumentations.ai/docs
使用教程:https://github.com/albumentations-team/albumentations_examples
支持的增强操作有:对图像进行随机裁剪、随机旋转、模糊化、灰度化、加噪声、颜色增强、质量压缩、模拟阳光雨雾雪阴影等。
在这里插入图片描述


2、Albumentations优势

2.1 速度快

该软件包已通过多个基于 OpenCV 的库(包括 NumPy、OpenCV、imgaug)进行了优化。对比TorchVision提供的 torchvision.transforms 的使用,官方给出来对比速度:https://albumentations.ai/docs/benchmarking_results/
在这里插入图片描述
可以看到,同一时间段内,albumentations库处理的图片比其他的库数量多很多。

2.2 匹配终端推理

这是在工作中摸索出来的经验,深度学习模型最终是要用起来的,当模型部署在终端设备上,大多采用C++对图像做预处理,比如resize,而且C++的预处理库中,比如rga库,底层是采用opencv的。要是训练过程和实际推理过程在图像预处理阶段不一致,很容易造成预测误差。比如:训练采用torchvision的transformer最图像做预处理和增强,服务器上推理也采用transformer对图像做resize,而部署在终端设备上要采用rga库对图像做resize操作,这样的不一致会导致比较大的预测误差。

3、Albumentations使用示例

import albumentations as A
import cv2
import matplotlib.pyplot as plt

ori_img = cv2.imread("./dog.10706.jpg")
ori_img = cv2.cvtColor(ori_img, cv2.COLOR_BGR2RGB)

trans =  A.Compose(
    [
        #A.HorizontalFlip(p=0.5),    # 水平翻转
        #A.VerticalFlip(p=0.5)       # 垂直翻转
        A.RandomRotate90(p=0.5)      # 随机旋转90度
    ])

aug_img = trans(image=ori_img)['image']

plt.subplot(1,2,1)
plt.title("original image")
plt.imshow(ori_img)
 
plt.subplot(1,2,2)
plt.title("transformed image")
plt.imshow(aug_img)

plt.show()

在这里插入图片描述

# 平移缩放旋转融合在一起
A.ShiftScaleRotate(shift_limit=0.03, scale_limit=0.05, rotate_limit=30, p=0.5, border_mode=cv2.BORDER_CONSTANT, interpolation=cv2.INTER_LINEAR, value=0)

在这里插入图片描述

# 加噪声,OneOf是随机选择里面的一种增强方式
A.OneOf([
            A.GaussNoise(p=0.5),
            A.ISONoise(p=0.5)
        ], p=0.5)

在这里插入图片描述

# 模糊化
A.OneOf([
            A.MotionBlur(p=0.5),
            A.MedianBlur(blur_limit=3, p=0.5),
            A.Blur(blur_limit=3, p=0.5),
            A.GaussianBlur(blur_limit=(3,5), p=0.5),
        ], p=0.5)

在这里插入图片描述

# 颜色增强
A.OneOf([
            A.CLAHE(clip_limit=5, p=0.5),
            A.RandomBrightnessContrast(p=0.5),
            A.HueSaturationValue(hue_shift_limit=30, sat_shift_limit=30, val_shift_limit=30, always_apply=False, p=0.3)
        ], p=0.5)

在这里插入图片描述

# 图像质量压缩
A.ImageCompression(quality_lower=50, quality_upper=100, p=0.5)

在这里插入图片描述

# 随机遮挡
A.CoarseDropout(max_holes=6, max_height=20, max_width=20, fill_value=0, always_apply=False, p=0.5)

在这里插入图片描述

# 模拟阳光雨雾雪阴影
A.OneOf([
            A.RandomFog(p=0.5),
            A.RandomRain(p=0.5),
            A.RandomShadow(p=0.5),
            A.RandomSnow(p=0.5),
            A.RandomSunFlare(p=0.5)
        ], p=0.5)

在这里插入图片描述

在pytorch中使用Albumentations库
albumentation有两种转换张量,ToTensor和ToTensorV2
from albumentations.pytorch import ToTensor, ToTensorV2

ToTensor就是最普通的最大值归一化并且转化为chw

ToTensorV2就是把图片转成张量适合跟在A.Normalize后面,比如:

import albumentations as A
from albumentations.pytorch import ToTensorV2
import cv2

data_transform = A.Compose([
     A.Resize(112,112),
     A.HorizontalFlip(p=0.5),
     A.ShiftScaleRotate(shift_limit=0.03, scale_limit=0.05, rotate_limit=30, p=0.5, border_mode=cv2.BORDER_CONSTANT, interpolation=cv2.INTER_LINEAR, value=0),
     A.GaussianBlur(blur_limit=(3,5), p=0.5),
    
     A.Normalize(
        mean=pv_reco_mean_std()[0],  
        std=pv_reco_mean_std()[1]
     ),
     ToTensorV2()
])

image = cv2.imread(img_path) # 读取图片
image = image[...,::-1].copy()   #bgr2rgb
aug_image = data_transform(image=image)['image']  # 增强后的图片

参考:
https://albumentations.ai/docs
https://www.aiuai.cn/aifarm422.html
https://blog.csdn.net/qq_33499229/article/details/108316386
https://blog.csdn.net/qq_27039891/article/details/100795846

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

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

相关文章

Node.JS - 基础

目录 A. 简介 B. 安装和配置 C. npm A. 简介 Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境。 一、运行原理 事件驱动和非阻塞 I/O 模型: Node.js 采用事件驱动、异步编程的方式。这意味着它不会在等待一个操作(如读取文件或网络请求&a…

spfa算法判断是否存在负权回路

spfa算法判断是否存在负权回路 题目 当一个图中存在一个负权回路时,是无法利用spfa 算法去求最短路问题的,但是可以利用spfa 算法判断有没有负权回路 题目 给定一个 n n n 个点 m m m 条边的有向图,图中可能存在重边和自环, 边…

VisionPro二次开发学习笔记11-使用 Caliper和Fixture定位Blob工具检测方块

该示例演示了如何使用卡尺工具和夹具工具来固定 Blob 工具。示例代码将检测图像上部区域中小方块的存在。当点击“运行”按钮时,将读取一张新图像。卡尺工具将被运行,卡尺工具的输出 Y 信息将传递给夹具工具。夹具工具使用来自卡尺工具的 Y 信息和新图像…

新手养猫怎么选智能猫砂盆?不踩雷平价实用攻略测评分享!

众所周知,猫咪是非常爱干净的动物,一旦猫砂盆满了,它们就可能会选择其他角落“解决”,这不仅会让家里充满异味,还可能影响猫咪的健康。而长期堆积的猫砂,也容易滋生细菌,对猫咪的爪子也是一种伤…

[CISCN2019 华东南赛区]Web111

打开题目,看到题目 注意最下面的Build With Smarty! , 猜测是smarty模板注入。smart是php的模板引擎,模板引擎的作用就是分离前端页面和数据的,题目中显示API的URL由于环境的原因无法使用,但我们的IP依旧显示在了页面的右上角&…

python-约瑟夫环(赛氪OJ)

[题目描述] n 个人( 0,1,2,3,4...n−1 ),围成一圈,从编号为 k 的人开始报数,报数报到 m 的人出队。 下次从出队的人之后开始重新报数,循环往复,当队伍中只剩最后一个人的时候,那个人…

【Material-UI】Checkbox 组件中的 Label Placement 设置详解

文章目录 一、Checkbox 组件简介1. 组件概述2. labelPlacement 属性 二、labelPlacement 属性的使用方法三、各标签位置的效果与应用场景1. Top(顶部)2. Start(左侧)3. Bottom(底部)4. End(右侧…

【文献精读】LOCA 图4

(1)数据流动 QKV的选取

Compass Arena 上新啦!新增双多模态模型匿名对战

2024 年 5 月,上海人工智能实验室司南 OpenCompass 团队 与魔搭 ModelScope 联合推出了大模型评测平台——Compass Arena(大模型竞技场),为国内的大语言模型领域引入了一种全新的竞技模式。 今天,Compass Arena 迎来重…

JVM知识总结(G1收集器)

文章收录在网站:http://hardyfish.top/ 文章收录在网站:http://hardyfish.top/ 文章收录在网站:http://hardyfish.top/ 文章收录在网站:http://hardyfish.top/ G1收集器 G1**(Garbage First)是一款面向服…

Mocaverse「Enter MOCALAND」上线!

我们很高兴宣布 Mocaverse 和 The Sandbox 将开展一项新合作——「Enter MOCALAND!」 继 “Into the Unknow” Game Jam 成功举办之后,我们的创作者们在此基础上创作出了近 50 款未来派多人游戏,我们很高兴能继续与社区一起庆祝共同创作&…

Redis与DataBase保持数据一致性

文章目录 1. 读取数据2. 写数据2.1 先操作缓存2.2 先操作数据库 在我们系统中缓存最常用的策略是:服务端需要同时维系DB和Cache,并且是以DB的结果为准, Cache-Aside Pattern(缓存分离模式、旁路缓存)。 1. 读取数据 当…

高质量翻译对中国移动应用在国外市场推广的影响

在移动应用的竞争格局中,打入国外市场对中国开发商来说既是机遇也是挑战。决定中国移动应用程序在海外成功的最关键因素之一是其翻译质量。高质量的翻译在有效推广该应用程序、确保其与当地用户产生共鸣,并最终推动新市场的采用和增长方面发挥着关键作用…

嵌入式全栈开发学习笔记---数据结构(广度优先算法)

目录 过程分析 代码实现 queue_maze.c 上节我们讲完了队列,本节开始学习广度优先算法! 之前我们用深度优先算法找出从迷宫出来的所有路径,本次我们要用广度优先算法找出最短路径。 过程分析 广度优先算法也叫广度优先搜索。 这种算法就相当…

Qwen2-Math 开源 AI 模型发布;阿里云推出首个域名 AI 大模型应用丨 RTE 开发者日报

开发者朋友们大家好: 这里是 「RTE 开发者日报」 ,每天和大家一起看新闻、聊八卦。我们的社区编辑团队会整理分享 RTE(Real-Time Engagement) 领域内「有话题的 新闻 」、「有态度的 观点 」、「有意思的 数据 」、「有思…

vscode用快捷键一键生成vue模板

项目中有些代码模块是固定的,如下面的代码所示,为了不重复写这些相同的代码,我们可以使用快键键一键生成模板。 流程: 中文:首选项-> 用户代码片段 -> 输入框中输入vue,找到vue.json文件(没有vue.j…

如意AI健康管理开放域自然对话算法分析报告

一、算法全周期行为分析 1. 算法安全 信息内容安全:通过意图识别和实体抽取技术,确保生成的内容不涉及违法或不当信息。 信息源安全:数据采集环节采用安全措施,保护数据不被非法访问。 2. 算法监测 信息安全监测:实施实…

国产芯上运行TinyMaxi轻量级的神经网络推理库-米尔基于芯驰D9国产商显板

本篇测评由优秀测评者“短笛君”提供。 本文将介绍基于米尔电子MYD-YD9360商显板(米尔基于芯驰D9360国产开发板)的TinyMaxi轻量级的神经网络推理库方案测试。 算力测试 TinyMaix 是面向单片机的超轻量级的神经网络推理库,即 TinyML 推理库&a…

重头开始嵌入式第十六天(结构体,共用体)

目录 结构体 结构体定义 结构体初始化 结构体赋值 结构体调用 结构体大小 在 C 语言中,结构体内存对齐规则主要遵循以下原则: 共用体 共用体定义 共同体赋值,初始化 共用体大小 结构体与共用体的区别 结构体 在 C 语言中,…

vuex properties of undefined (reading ‘getters‘)

前言: 最近打算用vue 写个音乐播放器,在搞 vuex 的时候遇到一个很神奇报错;vuex 姿势练了千百次了,刚开始的时候我一直以为是代码问题,反复检查了带了,依旧报错。 Error in mounted hook: "TypeError:…