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

Pyroch中transforms 图像增强发方法的应用

1 应用场景

在我们训练模型的时候,有的时候数据不够,就需要通过水平翻转、垂直翻转、镜像、旋转、改变亮度、标准化等方式增加图像的多样性,此时可以调用Pytorch 中的Transforms完成这些操作

2 导入相应的库

from torchvision import transforms as T
from PIL import Image
import os
os.environ['KMP_DUPLICATE_LIB_OK'] = 'True'

2.编写图像增强的方法

使用transforms.Compose([ ])可以将不同的图像增强方法综合到一起。

在使用过程中可以跳转到不同操作的源码处,观察不同输入输出数据的格式。比如 RandomHorizontalFlip(),也就是随机水平翻转操作的参数是这样规定的。

img_transform = T.Compose([T.Resize((224, 224)),T.RandomHorizontalFlip(p=0.5),  # 随机水平翻转T.RandomVerticalFlip(p=0.5),  # 随机垂直翻转# transforms.RandomResizedCrop(size=IMG_WIDTH, scale=(0.08, 1.0)),  # 随机裁剪,有黑边# transforms.RandomCrop(IMG_WIDTH, padding=6),# T.ColorJitter(brightness=0.5, contrast=0.5, saturation=0.5, hue=0.5),  # 亮度和hsv# transforms.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225])# T.Normalize(mean=[0.5, ], std=[0.5, ])])

3.对图象进行变换并保存。

# 首先规定图片所在的路径
train_path = 'dataset/train/'
img_path =list(map(lambda x: os.path.join(train_path, x), os.listdir(train_path)))# print(img_path)
# print(len(img_path))for i in range(len(img_path)):img_new = Image.open(img_path[i])# print(img_new)# print(img_new.size)imgname = 'img_' + str(i)+'.jpg'imgpath = os.path.join(train_path, imgname)# 读取图片进行变换 img_new1=img_transform(img_new)img_new1.save(imgpath)

变换后的新图片,如图所示

相关文章:

  • 如何在 JavaScript 中使用 map() 迭代数组
  • 【Java基础】自定义类型处理器xxxTypeHandler
  • 【百度Apollo】自动驾驶规划技术:实现安全高效的智能驾驶
  • leetcode—跳跃游戏—贪心算法
  • QT生成二维码
  • 【百度Apollo】探索创新之路:深入了解Apollo开放平台
  • 《每天十分钟》-红宝书第4版-迭代器与生成器(二)
  • 使用 MongoDB 的 estimatedDocumentCount 快速估计文档数量
  • 熟悉MATLAB 环境
  • 【Spark系列3】RDD源码解析实战
  • C#用正则表达式判断字符串是否纯数字vs用Char.IsDigit 方法遍历字符数组是否纯数字
  • Spring Boot(番外):防止反编译之Jar包加密
  • Java EE 5 SDK架构
  • Web3.0初探
  • TensorFlow2实战-系列教程13:Resnet实战1
  • Android开发 - 掌握ConstraintLayout(四)创建基本约束
  • Android优雅地处理按钮重复点击
  • canvas 绘制双线技巧
  • Js基础知识(一) - 变量
  • passportjs 源码分析
  • Redash本地开发环境搭建
  • thinkphp5.1 easywechat4 微信第三方开放平台
  • Vue实战(四)登录/注册页的实现
  • 从 Android Sample ApiDemos 中学习 android.animation API 的用法
  • 多线程 start 和 run 方法到底有什么区别?
  • 今年的LC3大会没了?
  • 排序算法之--选择排序
  • 前端学习笔记之原型——一张图说明`prototype`和`__proto__`的区别
  • 如何在 Tornado 中实现 Middleware
  • 手机app有了短信验证码还有没必要有图片验证码?
  • 自动记录MySQL慢查询快照脚本
  • #ifdef 的技巧用法
  • $(selector).each()和$.each()的区别
  • $GOPATH/go.mod exists but should not goland
  • (+4)2.2UML建模图
  • (09)Hive——CTE 公共表达式
  • (delphi11最新学习资料) Object Pascal 学习笔记---第8章第5节(封闭类和Final方法)
  • (超简单)构建高可用网络应用:使用Nginx进行负载均衡与健康检查
  • (附源码)ssm高校运动会管理系统 毕业设计 020419
  • (接口封装)
  • (六)激光线扫描-三维重建
  • (论文阅读32/100)Flowing convnets for human pose estimation in videos
  • (七)Knockout 创建自定义绑定
  • (三)Honghu Cloud云架构一定时调度平台
  • ./include/caffe/util/cudnn.hpp: In function ‘const char* cudnnGetErrorString(cudnnStatus_t)’: ./incl
  • .Net core 6.0 升8.0
  • .Net Core缓存组件(MemoryCache)源码解析
  • .NET NPOI导出Excel详解
  • .NET 线程 Thread 进程 Process、线程池 pool、Invoke、begininvoke、异步回调
  • .net6解除文件上传限制。Multipart body length limit 16384 exceeded
  • .NET开源快速、强大、免费的电子表格组件
  • .pyc文件还原.py文件_Python什么情况下会生成pyc文件?
  • @Autowired 与@Resource的区别
  • @Bean, @Component, @Configuration简析
  • @DataRedisTest测试redis从未如此丝滑