利用Albumentations工具包进行图像的数据增强(以yolo数据标注格式为例)

这篇具有很好参考价值的文章主要介绍了利用Albumentations工具包进行图像的数据增强(以yolo数据标注格式为例)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

最近在看数据增强方法时,看到了这个有趣的工具包,研究了下并以yolo数据标注格式为例写了一个示例脚本。

该工具最大的好处是会根据你使用的数据增强方法自动修改标注框信息!

import albumentations as A
import cv2
import os

"""
该脚本主要实现了利用albumentations工具包对yolo标注数据进行增强
给定一个存放图像和标注文件的主目录,在主目录下自动生成增强的图像和标注文件
"""


def get_enhance_save(old_images_files, old_labels_files, label_list, enhance_images_files, enhance_labels_files):

    # 这里设置指定的数据增强方法
    transform = A.Compose([
        # A.RandomCrop(width=450, height=450),
        # A.HorizontalFlip(p=1),
        A.VerticalFlip(p=1),
        A.RandomBrightnessContrast(p=0.2),
    ], bbox_params=A.BboxParams(format='yolo', min_area=1024, min_visibility=0.2, label_fields=['class_labels']))

    # 这里指定修改后image和label的文件名
    mid_name = "_VerticalFlip"

    label_files_name = os.listdir(old_labels_files)

    for name in label_files_name:

        label_files = os.path.join(old_labels_files, name)

        yolo_b_boxes = open(label_files).read().splitlines()

        bboxes = []

        class_labels = []

        # 对一个txt文件的每一行标注数据进行处理
        for b_box in yolo_b_boxes:
            b_box = b_box.split(" ")
            m_box = b_box[1:5]

            m_box = list(map(float, m_box))

            m_class = b_box[0]

            bboxes.append(m_box)
            class_labels.append(label_list[int(m_class)])

        # 读取对应的图像
        image_path = os.path.join(old_images_files, name.replace(".txt", ".png"))
        if os.path.exists(image_path) is False:
            image_path = os.path.join(old_images_files, name.replace(".txt", ".jpg"))

        image = cv2.imread(image_path)
        image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)

        # 调用上面定义的图像增强方法进行数据增强
        transformed = transform(image=image, bboxes=bboxes, class_labels=class_labels)
        transformed_image = transformed['image']
        transformed_image = cv2.cvtColor(transformed_image, cv2.COLOR_BGR2RGB)
        transformed_b_boxes = transformed['bboxes']
        transformed_class_labels = transformed['class_labels']

        # 先判断目标文件夹路径是否存在
        if os.path.exists(enhance_images_files) is False:
            os.mkdir(enhance_images_files)
        a, b = os.path.splitext(name)
        new_name = a + mid_name + b
        cv2.imwrite(os.path.join(enhance_images_files, new_name.replace(".txt", ".png")), transformed_image)

        if os.path.exists(enhance_labels_files) is False:
            os.mkdir(enhance_labels_files)

        new_txt_file = open(os.path.join(enhance_labels_files, new_name), "w")

        new_bboxes = []

        for box, label in zip(transformed_b_boxes, transformed_class_labels):

            new_class_num = label_list.index(label)
            box = list(box)
            for i in range(len(box)):
                box[i] = str(('%.5f' % box[i]))
            box.insert(0, str(new_class_num))
            new_bboxes.append(box)

        for new_box in new_bboxes:

            for ele in new_box:
                if ele is not new_box[-1]:
                    new_txt_file.write(ele + " ")
                else:
                    new_txt_file.write(ele)

            new_txt_file.write('\n')

        new_txt_file.close()


def main():

    root = r"D:\datasets\T_augmentation"

    old_images_files = os.path.join(root, "images")
    old_labels_files = os.path.join(root, "labels")

    enhance_images_files = os.path.join(root, "enhance_images")
    enhance_labels_files = os.path.join(root, "enhance_labels")

    # 这里设置数据集的类别
    label_list = ["Car", "Plane"]

    # 实现对传入的数据文件进行遍历读取,并进行数据增强
    get_enhance_save(old_images_files, old_labels_files, label_list, enhance_images_files, enhance_labels_files)


if __name__ == '__main__':
    main()

各种示例

AdvancedBlur(左边为原图,右边为增强图像)

        Blur the input image using a Generalized Normal filter with a randomly selected parameters. This transform also adds multiplicative noise to generated kernel before convolution.(使用随机选择参数的广义法线滤波器对输入图像进行模糊处理。这种变换还在卷积之前向生成的内核添加了乘法噪声)

利用Albumentations工具包进行图像的数据增强(以yolo数据标注格式为例)利用Albumentations工具包进行图像的数据增强(以yolo数据标注格式为例)

Blur(左边为原图,右边为增强图像)

        Blur the input image using a random-sized kernel.

利用Albumentations工具包进行图像的数据增强(以yolo数据标注格式为例)利用Albumentations工具包进行图像的数据增强(以yolo数据标注格式为例)

CLAHE(左边为原图,右边为增强图像) 

        Apply Contrast Limited Adaptive Histogram Equalization to the input image.(对输入图像应用对比度有限的自适应直方图均衡化)

利用Albumentations工具包进行图像的数据增强(以yolo数据标注格式为例)利用Albumentations工具包进行图像的数据增强(以yolo数据标注格式为例)

ChannelDropout(左边为原图,右边为增强图像) 

        Randomly Drop Channels in the input Image.

利用Albumentations工具包进行图像的数据增强(以yolo数据标注格式为例)利用Albumentations工具包进行图像的数据增强(以yolo数据标注格式为例)

ChannelShuffle (左边为原图,右边为增强图像) 

        Randomly rearrange channels of the input RGB image.

利用Albumentations工具包进行图像的数据增强(以yolo数据标注格式为例)利用Albumentations工具包进行图像的数据增强(以yolo数据标注格式为例)

ColorJitter(左边为原图,右边为增强图像) 

        Randomly changes the brightness, contrast, and saturation of an image. Compared to ColorJitter from torchvision, this transform gives a little bit different results because Pillow (used in torchvision) and OpenCV (used in Albumentations) transform an image to HSV format by different formulas. Another difference - Pillow uses uint8 overflow, but we use value saturation.(随机改变图像的亮度、对比度和饱和度。与来自torchvision的ColorJitter相比,这种变换给出了一点不同的结果,因为Pillow(用于torchvision)和OpenCV(用于Albumentations)通过不同的公式将图像转换成HSV格式。另一个区别是--Pillow使用uint8溢出,而我们使用值饱和度)

利用Albumentations工具包进行图像的数据增强(以yolo数据标注格式为例)利用Albumentations工具包进行图像的数据增强(以yolo数据标注格式为例)

Defocus(左边为原图,右边为增强图像) 

        Apply defocus transform.(应用散焦变换)

利用Albumentations工具包进行图像的数据增强(以yolo数据标注格式为例)利用Albumentations工具包进行图像的数据增强(以yolo数据标注格式为例)

Downscale(左边为原图,右边为增强图像) 

        Decreases image quality by downscaling and upscaling back.

利用Albumentations工具包进行图像的数据增强(以yolo数据标注格式为例)利用Albumentations工具包进行图像的数据增强(以yolo数据标注格式为例)

Emboss(左边为原图,右边为增强图像) 

        Emboss the input image and overlays the result with the original image.(对输入的图像进行压印,并将结果与原始图像叠加。)

利用Albumentations工具包进行图像的数据增强(以yolo数据标注格式为例)利用Albumentations工具包进行图像的数据增强(以yolo数据标注格式为例)

Equalize(左边为原图,右边为增强图像) 

        Equalize the image histogram.(对图像直方图进行均衡化)

利用Albumentations工具包进行图像的数据增强(以yolo数据标注格式为例)利用Albumentations工具包进行图像的数据增强(以yolo数据标注格式为例)

FancyPCA(左边为原图,右边为增强图像) 

        Augment RGB image using FancyPCA from Krizhevsky's paper "ImageNet Classification with Deep Convolutional Neural Networks"

利用Albumentations工具包进行图像的数据增强(以yolo数据标注格式为例)利用Albumentations工具包进行图像的数据增强(以yolo数据标注格式为例)

 

Reference:

        GitHub - albumentations-team/albumentations: Fast image augmentation library and an easy-to-use wrapper around other libraries. Documentation: https://albumentations.ai/docs/ Paper about the library: https://www.mdpi.com/2078-2489/11/2/125

        Bounding boxes augmentation for object detection - Albumentations Documentation 文章来源地址https://www.toymoban.com/news/detail-477413.html

到了这里,关于利用Albumentations工具包进行图像的数据增强(以yolo数据标注格式为例)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 仪酷LabVIEW AI视觉工具包及开放神经网络交互工具包常见问题解答

    哈喽,各位朋友,好久不见~ 之前给大家分享了基于LabVIEW开发的AI视觉工具包及开放神经网络交互工具包,不少朋友私信说在安装和使用过程中会遇到一些问题,今天我们就集中回复一下大家问到最多的问题。如果大家在使用过程中还有其他问题,可以补充到评论区,我们这

    2024年02月16日
    浏览(84)
  • 字节跳动开源!超好用的视频抠图工具;GitHub开源项目维护协作指南;自动化数据清洗工具包;强化学习入门教程;前沿论文 | ShowMeAI资讯日报

    👀 日报合辑 | 📆 电子月刊 | 🔔 公众号下载资料 | 🍩 @韩信子 https://github.com/HelixNGC7293/DeforumStableDiffusionLocal https://space.bilibili.com/176003 文本提示作画工具。本代码库实现是本地版本的Deforum Stable Diffusion V0.4,支持txt设置文件输入和动画功能! https://github.com/PeterL1n/RobustVideoMat

    2023年04月08日
    浏览(87)
  • GIS工具包

    GIS工具包,根据jts工具,结合实际使用场景提取出来的常用工具集合;涵盖几何格式转换(WKT,GeoJSON等)与geometry转换、gis距离计算、度距离单位换算、角度计算、buffer运算、映射截取、几何穿串等操作 gis-tools源码库地址 1.1 WktTool使用说明 wkt格式与geometry互转; wkt转geometry操作

    2024年02月06日
    浏览(94)
  • 学习笔记-JVM-工具包(JVM分析工具)

    常用工具 JDK工具 ① jps: JVM Process status tool:JVM进程状态工具,查看进程基本信息 ② jstat: JVM statistics monitoring tool : JVM统计监控工具,查看堆,GC详细信息 ③ jinfo:Java Configuration Info :查看配置参数信息,支持部分参数运行时修改 ④ jmap:Java Memory Map :分析堆内存工具,du

    2024年02月13日
    浏览(75)
  • MATLAB添加工具包(详细)

    我这里要添加的文件包为:DeepLearnToolbox-master 我这里的安装目录是:D:softwareMATLABtoolbox (1)以中文版为例,在主界面找到“设置路径”按钮 (2)点击“设置路径”,弹出设置界面 第一步:点“添加文件夹” (注:如果要工具包中有多个子文件夹,则点“添加并包含子文

    2024年02月02日
    浏览(84)
  • 【Linux】基本开发工具包使用

    目录 一, yum ——linux软件包管理器  1. 软件包是啥子?  2.  yum基本使用  1. 步骤:  2. 开发工具推荐(centos 7.6) 二,vim —— linux文本编辑器 1. Normal mode  ——  命令模式(记不住没关系,多练就行) 2.  last line  mode——   末行模式 (如何进入;shift :) 3. Insert mode ——插

    2024年02月08日
    浏览(84)
  • Hardhat工具包1--安装使用

    参考资料: 官方文档 : https://hardhat.org/getting-started/ https://hardhat.org/hardhat-runner/docs/getting-started#overview 基于Hardhat和Openzeppelin开发可升级合约(一) 基于Hardhat和Openzeppelin开发可升级合约(一)_灬倪先森_的博客-CSDN博客 ---------------------------------------------------------------------------------

    2023年04月11日
    浏览(128)
  • Quanto: PyTorch 量化工具包

    量化技术通过用低精度数据类型 (如 8 位整型 (int8)) 来表示深度学习模型的权重和激活,以减少传统深度学习模型使用 32 位浮点 (float32) 表示权重和激活所带来的计算和内存开销。 减少位宽意味着模型的内存占用更低,这对在消费设备上部署大语言模型至关重要。量化技术也

    2024年04月10日
    浏览(91)
  • Windows11渗透工具包分享

              项目地址 下载地址

    2024年02月13日
    浏览(76)
  • NetAssist网络调试工具使用指南 (附NetAssist工具包)

    1、NetAssist简介 NetAssist网络调试助手,是Windows平台下开发的TCP/IP网络调试工具,集TCP/UDP服务端及客户端于一体,是网络应用开发及调试工作必备的专业工具之一,可以帮助网络应用设计、开发、测试人员检查所开发的网络应用软/硬件产品的数据收发状况,提高开发速度,简

    2024年02月16日
    浏览(72)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包