AutoAugment 学习

非官方项目地址:Github项目
官方文章:文章连接

关于图片地深度学习有时会需要大量的图片,因此,为了获得更多的图片,对已经获取的图片进行扩展就是一个必要地手段,简单来说,针对图片地数据增强就是对已有地图片进行旋转、裁剪、缩放、变色等操作让它变成另外一张图片但是自己的相关信息又并没有丢失太多

但是,怎么对图片进行变换而又不丢失关键信息是个技术活, google发布的AutoAugment就是干这个的。google通过针对3个主流的数据集(ImageNet,CIFAR10,SVHN)进行 “测试” 得到了3大类变换的集合,每一个集合中又包含了几十种具体变换的方式,每一次调用都会随机选一种变换方式对你传入的图片进行变换,返回变换之后的图片

原始图片:

cute -cat
进行8次随机变换操作:
在这里插入图片描述
具体使用方式如下:
首先当然是要将这个项目下下来,有用的也就只有autoaugment.py和ops两个文件,其他的都是教学
这玩意儿的使用方式有两种,可以直接嵌入到pytorch的transform中,就像这样:

#  一共可以从autoaugment中import进来四个,其中三个是变换的大类,剩下一个是具体的变换的方式
from autoaugment import ImageNetPolicy
data = ImageFolder(rootdir, transform=transforms.Compose(
                        [transforms.RandomResizedCrop(224), 
                         transforms.RandomHorizontalFlip(), 
                         ImageNetPolicy(), #  这就是调用
                         transforms.ToTensor(), transforms.Normalize(...)]))
loader = DataLoader(data, ...)

另一种是自己对图片进行处理后保存

# -*- coding: utf-8 -*-
# @Time : 2022/9/24 21:43
# @Author : Lanpangzi
# @File : change_images.py

from PIL import Image
from autoaugment import ImageNetPolicy
import os

# 必须保证这个文件夹里面没有文件夹!!!!!!
# 输入你的图片所在的文件夹的路径
path = r'D:\00pycharm\Projects_from_github\AutoAugment-master\yolov5-1 (2)\crack'

al_imgs = os.listdir(path)
policy = ImageNetPolicy()
for ind, img_name in enumerate(al_imgs):
    img_name_ = img_name.split('.')[:-1][0]
    img_suffix = img_name.split('.')[-1]  # 保留原来图片的后缀
    img_path = os.path.join(path, img_name)
    or_img = Image.open(img_path)
    os.makedirs(os.path.join(path, img_name_))
    # 编号0的是原来的图片
    or_img.save(os.path.join(path, img_name_, img_name_ + '_' + str(0) + '.' + img_suffix))
    or_img = or_img.convert('RGB') # 有的图片模式无法保存,统一全部转换成RGB
    for i in range(24):
        new_img = policy(or_img)
        new_img_path = os.path.join(path, img_name_, img_name_ + '_' + str(i + 1) + '.' + img_suffix)
        new_img.save(new_img_path)

    print("已经搞定{}/{}".format(ind + 1, len(al_imgs)))

如果仅仅是识别图片里面是个什么东西那么这样就可以直接处理,毕竟里面的东西不会变化,但是,如果我需要对即将进行yolo识别的图片进行数据扩展,那么我的标注应该如何变化,如果仅仅是改变颜色还好说,但是如果是图像的旋转和缩放,对应的标签应该如何处理?因为原来图片中目标的位置已经发生变化了!

接下来,具体看下ImageNetPolicy的24(但是源码中class ImageNetPolicy(object)实际有25个subpolicy,不知为何)
按顺序调用这25种subpolicy,得到的结果如下:
原图:
cute -cat

结果:
在这里插入图片描述
对第一个subpolicy调用25次结果如下
在这里插入图片描述
可以看出,即使是同一个subpolicy,具体的变换参数还是有些许的随机性的(源码中确实是有random函数来控制具体的变化参数)

无论是25种subpolicy,还是每一个subpolicy不同的随机参数,这个图片的实体的位置还是没有发生较大的变化
但是对于扁长的图片,在处理后可能原来的位置有较大的变化:
原图:
在这里插入图片描述
处理后:
在这里插入图片描述

这种以后标签咋改是个问题。。。

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值