当前位置: 首页 > news >正文

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, ...)

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

from PIL import Image
#  SubPolicy是一个执行具体变换操作的类
from autoaugment import ImageNetPolicy, CIFAR10Policy, SVHNPolicy, SubPolicy

img = Image.open("images/cat.jpg")

# 从ImageNet这个数据集上训练出来的转换图片地24种方式(每一种Policy具体地转换方式不同)
#    每一次调用都随机从24种转换方式中选择一种进行转换
policy = ImageNetPolicy()
transformed_img = policy(img)# 传入的数据类型是Image读取的图片,传出的也是这个
transformed_img.show()  #显示,你当然也可以保存这张图片 transformed_img.save('after.jpg')

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

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

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

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

相关文章:

  • 产品经理认证(NPDP)—备考错题集二
  • R语言ggplot2可视化:使用ggpubr包的ggmaplot函数可视化MA图(MA-plot)、genenames参数配置点标签对应的基因名称
  • 程序兼容性的定义 windows7的兼容性
  • 【C#】接口的基本概念
  • 四嗪 PEG 接头 下篇:Tetrazine-PEG5-NH-CH2CH2-4-Phenol试剂
  • MySQL数据库忘记密码怎么办?教你一招
  • 闭关之 C++ 并发编程笔记(五):并行算法函数与测试
  • JAVA使用xstream进行对象和xml互相转换
  • Git的进一步使用
  • ThinkPHP5.1 交互式命令
  • 语音短信怎么发?互亿无线
  • iOS16.0.2正式版突然发布,紧急修复这4个问题
  • 谷粒商城 高级篇 (二十二) --------- 支付
  • Qt 学习(四) —— QPushButton普通按钮控件
  • 2106. 摘水果(每日一难phase-day22)
  • 《用数据讲故事》作者Cole N. Knaflic:消除一切无效的图表
  • 【140天】尚学堂高淇Java300集视频精华笔记(86-87)
  • Angular js 常用指令ng-if、ng-class、ng-option、ng-value、ng-click是如何使用的?
  • docker python 配置
  • java架构面试锦集:开源框架+并发+数据结构+大企必备面试题
  • Js实现点击查看全文(类似今日头条、知乎日报效果)
  • LeetCode刷题——29. Divide Two Integers(Part 1靠自己)
  • linux学习笔记
  • Meteor的表单提交:Form
  • mysql中InnoDB引擎中页的概念
  • Node + FFmpeg 实现Canvas动画导出视频
  • 大型网站性能监测、分析与优化常见问题QA
  • 翻译 | 老司机带你秒懂内存管理 - 第一部(共三部)
  • 使用Swoole加速Laravel(正式环境中)
  • 一起参Ember.js讨论、问答社区。
  • - 语言经验 - 《c++的高性能内存管理库tcmalloc和jemalloc》
  • 《TCP IP 详解卷1:协议》阅读笔记 - 第六章
  • ​无人机石油管道巡检方案新亮点:灵活准确又高效
  • #LLM入门|Prompt#1.8_聊天机器人_Chatbot
  • #pragma data_seg 共享数据区(转)
  • #我与Java虚拟机的故事#连载09:面试大厂逃不过的JVM
  • (10)ATF MMU转换表
  • (20)目标检测算法之YOLOv5计算预选框、详解anchor计算
  • (紀錄)[ASP.NET MVC][jQuery]-2 純手工打造屬於自己的 jQuery GridView (含完整程式碼下載)...
  • (解决办法)ASP.NET导出Excel,打开时提示“您尝试打开文件'XXX.xls'的格式与文件扩展名指定文件不一致
  • (论文阅读40-45)图像描述1
  • (原创)攻击方式学习之(4) - 拒绝服务(DOS/DDOS/DRDOS)
  • (转)IOS中获取各种文件的目录路径的方法
  • .NET Core 成都线下面基会拉开序幕
  • .net core开源商城系统源码,支持可视化布局小程序
  • .NET Standard 的管理策略
  • .NET教程 - 字符串 编码 正则表达式(String Encoding Regular Express)
  • .net生成的类,跨工程调用显示注释
  • /etc/sudoers (root权限管理)
  • [Angular] 笔记 9:list/detail 页面以及@Output
  • [AX]AX2012 R2 出差申请和支出报告
  • [BUAA软工]第一次博客作业---阅读《构建之法》
  • [EFI]Dell Inspiron 15 5567 电脑 Hackintosh 黑苹果efi引导文件
  • [EULAR文摘] 利用蛋白组学技术开发一项蛋白评分用于预测TNFi疗效
  • [git]git命令如何取消先前的配置