以太坊 class get devise Modernizr vue注册组件 最新更新国内最快的dns oracle取第一条数据 git登录命令 eclipse显示左边目录 matlab网页版 汇编语言clr kubernetes视频 kubernetes入门 python基础知识 python返回值 java类 java继承关键字 java方法重载 java开发语言 js数组删除指定元素 js删除节点 git命令 程序卸载 存储过程写法 mac强制重启 猫眼电影票 python缩进规则 斑驳纹理 目标聚光灯 Mapper 屏幕录像机 无线网密码修改 方正兰亭大黑简体 无人机数据处理软件 vmlinux 图片格式转换工具 暴风城声望 工行天天益 红客是什么
当前位置: 首页 > 学习教程  > 编程语言

深度学习在训练时对图片随机剪裁(random crop)

2020/12/5 10:59:46 文章标签:

文章目录为何要采取random crop?对图片进行随机裁减和缩放有些图片有4个颜色通道图像转换成torch.Tensor对象Reference为何要采取random crop? 在训练学习器时对图片进行随机裁减,背后的一个直觉就是可以进行数据增广(data augme…

文章目录

  • 为何要采取random crop?
  • 对图片进行随机裁减和缩放
  • 有些图片有4个颜色通道
  • 图像转换成torch.Tensor对象
  • Reference

为何要采取random crop?

在训练学习器时对图片进行随机裁减,背后的一个直觉就是可以进行数据增广(data augmentation),防止学习器陷入过拟合。假设类别 C C C的主要特征为 F F F,采集得到的图片包含背景噪声 B B B,即现在 C C C表示为 ( F , B ) (F, B) (F,B),我们本来期望学习关系 f ∗ : F → C f^*: F \to C f:FC,结果现在可能学习成关系 f ^ : ( F , B ) → C \hat{f} : (F, B) \to C f^:(F,B)C,从而陷入过拟合。对图片进行随机裁减,类别 C C C的目标物一般处于图片正中间, F F F很大概率不会被裁减到,而 B B B则相反,这相当于在训练时对二者进行了权重分配,考虑极端情形(即权重分配只有0或1):
X c ( 1 ) = ( 1 ⋅ F , 0 ⋅ B ) , X c ( 2 ) = ( 1 ⋅ F , 1 ⋅ B ) , X c ( 3 ) = ( 1 ⋅ F , 0 ⋅ B ) , … X_c^{(1)} = (1 \cdot F, 0 \cdot B), X_c^{(2)} = (1 \cdot F, 1 \cdot B), X_c^{(3)} = (1 \cdot F, 0 \cdot B), \dots Xc(1)=(1F,0B),Xc(2)=(1F,1B),Xc(3)=(1F,0B),
此时, F F F的信息增益较大,学习器更有可能倾向于学习关系 f ∗ : F → C f^*: F \to C f:FC而忽略掉 B B B

更多信息推荐阅读:深度学习训练中为什么要将图片随机剪裁(random crop)。

对图片进行随机裁减和缩放

对图片随机0.6~1.0比率大小的区域进行裁剪

def random_crop(image):
    min_ratio = 0.6
    max_ratio = 1

    w, h = image.size

    ratio = random.random()

    scale = min_ratio + ratio * (max_ratio - min_ratio)

    new_h = int(h * scale)
    new_w = int(w * scale)

    y = np.random.randint(0, h - new_h)
    x = np.random.randint(0, w - new_w)

    image = image.crop((x, y, x + new_w, y + new_h))

    return image

def resize(image):
    conf = configparser.ConfigParser()
    conf.read('./config.txt')

    receptive_field_size = eval(conf.get('net', 'receptive_field_size'))

    image = image.resize((receptive_field_size, receptive_field_size))

    return image

调用代码

from PIL.Image import open as imread
import random
import matplotlib.pyplot as plt

def data_handle(image_path):
    res = None
    # res = resize(image)
    res = resize(random_crop(image))

    plt.imshow(res)
    plt.show()

    return res

if __name__ == '__main__':
	data_handle('./demo.jpg')

更多信息推荐阅读:【图像处理】python图片随机缩放(resize)和随机裁剪(crop)的三种方式。

有些图片有4个颜色通道

有些采集来的图片具有4个颜色通道,即RGBA,最后1个是透明度,我们要把它转换成3颜色通道,代码如下

from PIL import Image

img = Image.open('./demo.png')
img = img.convert("RGB") # 将一个rgba四通道转化为rgb三通道

更多信息推荐阅读:图片格式转换:4通道转换为3通道;批量改图片为.jpg格式。

图像转换成torch.Tensor对象

图片读取出来是 H × W × C H \times W \times C H×W×C格式,其中 C C C是特征通道个数,numpy和TensorFlow都可以正常处理,但PyTorch需要 C × H × W C \times H \times W C×H×W格式,我们需要转换一下:

image = imread(image_path).convert('RGB')
image = util.resize(util.random_crop(image))
image = np.transpose(np.array(image), (2, 0, 1))

更多信息推荐阅读:pytorch学习(五)—图像的加载/读取方式。

Reference

深度学习训练中为什么要将图片随机剪裁(random crop)
【图像处理】python图片随机缩放(resize)和随机裁剪(crop)的三种方式
图片格式转换:4通道转换为3通道;批量改图片为.jpg格式
pytorch学习(五)—图像的加载/读取方式


本文链接: http://www.dtmao.cc/news_show_450363.shtml

附件下载

相关教程

    暂无相关的数据...

共有条评论 网友评论

验证码: 看不清楚?