Cutout
介绍
(内容摘自[CV技术指南],用于自学知识) 该方法来源于论文《Improved Regularization of Convolutional Neural Networks with Cutout》
在一些人体姿态估计,人脸识别,目标跟踪,行人重识别等任务中常常会出现遮挡的情况,为了提高模型的鲁棒性,提出了使用Cutout数据增强方法。该方法的依据是Cutout能够让CNN更好地利用图像的全局信息,而不是依赖于一小部分特定的视觉特征。
做法:对一张图像随机选取一个小正方形区域,在这个区域的像素值设置为0或其它统一的值。注:存在50%的概率不对图像使用Cutout 效果图如下:
分类cutout
官方代码: https://github.com/uoguelph-mlrg/Cutout 适用于分类任务的代码片如下(不需要考虑gt和box): 下面展示分类任务的 cutout 。
import torch
import numpy as np
class Cutout(object):
"""Randomly mask out one or more patches from an image.
Args:
n_holes (int): Number of patches to cut out of each image.
length (int): The length (in pixels) of each square patch.
"""
def __init__(self, n_holes, length):
self.n_holes = n_holes
self.length = length
def __call__(self, img):
"""
Args:
img (Tensor): Tensor image of size (C, H, W).
Returns:
Tensor: Image with n_holes of dimension length x length cut out of it.
"""
h = img.size(1)
w = img.size(2)
mask = np.ones((h, w), np.float32)
for n in range(self.n_holes):
y = np.random.randint(h)
x = np.random.randint(w)
y1 = np.clip(y - self.length // 2, 0, h)
y2 = np.clip(y + self.length // 2, 0, h)
x1 = np.clip(x - self.length // 2, 0, w)
x2 = np.clip(x + self.length // 2, 0, w)
mask[y1: y2, x1: x2] = 0.
mask = torch.from_numpy(mask)
mask = mask.expand_as(img)
img = img * mask
return img
检测cutout
下面展示适用于检测任务的 cutout 需要调整gt和box位置; 持续更新
|