Pytorch中图像的基本操作(TenCrop)

参考
https://www.jianshu.com/p/73686691cf13
https://www.cnblogs.com/kk17/p/10239979.html

下面是几种常写的方式
第一种方式

normalize = transforms.Normalize([0.485, 0.456, 0.406], [0.229, 0.224, 0.225])
transformList = []
transformList.append(transforms.RandomResizedCrop(transCrop))
transformList.append(transforms.RandomHorizontalFlip())
transformList.append(transforms.ToTensor())
transformList.append(normalize)
transformSequence = transforms.Compose(transformList)

第二种方式

train_augmentation = torchvision.transforms.Compose([torchvision.transforms.Resize(256),
                                                    torchvision.transforms.RandomCrop(224),                                                                            
                                                    torchvision.transofrms.RandomHorizontalFlip(),
                                                    torchvision.transforms.ToTensor(),
                                                    torch vision.Normalize([0.485, 0.456, -.406], [0.229, 0.224, 0.225])
                                                    ])

需要注意的是:

Pytorch 常用PIL库来读取图像数据,读取之后的格式是PIL Image
在进行Normalize时, 需要先转成Tensor的形式.
Resize和crop的操作是对 PIL Image 的格式进行的操作.现在论文中一般将图片先resize到(256,256)然后randomCrop到(224,和224)中.

Resize和Crop的区别
resize相当于对原来的图像进行压缩,大致的形状是不发生变化的,也就是说可以看到图片的样子

Crop是对图片进行随机的剪切,切出来的可能是整个图片的一部分,其中RandomCrop的操作更常用

RandomResizedCrop类也是比较常用, 总的来讲就是先做crop,再resize到指定尺寸

FiveCrop和TenCrop
这两种操作之后,一张图变成五张,一张图变成十张,那么在训练或者测试的时候怎么避免和标签混淆呢

思路是,这多个图拥有相同的标签,假如是分类任务,就可以使用交叉熵进行,然后求10张图的平均

transform = Compose([
    TenCrop(size), # this is a list of PIL Images
    Lambda(lambda crops: torch.stack([ToTensor()(crop) for crop in crops])) # returns a 4D tensor
])

#In your test loop you can do the following:
input, target = batch # input is a 5d tensor, target is 2d
bs, ncrops, c, h, w = input.size()
result = model(input.view(-1, c, h, w)) # fuse batch size and ncrops
result_avg = result.view(bs, ncrops, -1).mean(1) # avg over crops
  • 4
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值