精华内容
下载资源
问答
  • YOLOV5的图像增强技术中有十分多可以学习的地方,这里记录一下其中的仿射变换。 一、平移变换 平移变换矩阵如下 代码如下 T = np.eye(3) # 这里注意一下,图像的左上角是0,0,a为正表示向左,负为右,b为正...

    Pytorch机器学习(七)——YOLOV5图像增广之仿射变换与透射变换


    前言

    YOLOV5的图像增强技术中有十分多可以学习的地方,这里记录一下其中的仿射和透射变换。


    一、平移变换

    平移变换矩阵如下

     代码如下

    T = np.eye(3)
    # 这里注意一下,图像的左上角是0,0,a为正表示向左,负为右,b为正表示向下,负为上
    T[0, 2] = random.uniform(0.5 - translate, 0.5 + translate) * width  # x translation (pixels)
    T[1, 2] = random.uniform(0.5 - translate, 0.5 + translate) * height  # y translation (pixels)
    # 进行仿射变换,并且用灰边填充
    im = cv2.warpAffine(im, T[:2], dsize=(width, height), borderValue=(114, 114, 114))
    

    二、旋转变换

    旋转变换的变换矩阵如下

     代码如下

    R = np.eye(3)
    # 得到在-degree到degree中的一个实数
    a = random.uniform(-degrees, degrees)
    # s图像的缩放因子
    s = random.uniform(1 - scale, 1 + scale)
    # 使用getRotationMatrix2D得到旋转矩阵
    R[:2] = cv2.getRotationMatrix2D(angle=a, center=(0, 0), scale=s)
    # 进行仿射变换,并且用灰边填充
    im = cv2.warpAffine(im, R[:2], dsize=(width, height), borderValue=(114, 114, 114))

     三、shear错切变换

    shear变换的变换矩阵如下

     代码如下

    # Shear
    S = np.eye(3)
    S[0, 1] = math.tan(random.uniform(-shear, shear) * math.pi / 180)  # x shear (deg)
    S[1, 0] = math.tan(random.uniform(-shear, shear) * math.pi / 180)  # y shear (deg)
    # 进行仿射变换,并且用灰边填充
    im = cv2.warpAffine(im, S[:2], dsize=(width, height), borderValue=(114, 114, 114))

     

    、透射变换

    仿射变换就是特殊的透射变换,所以在yolov5中一般都是直接采用的仿射变换,而不是直接采用投射变换。

    # Perspective
    P = np.eye(3)
    P[2, 0] = random.uniform(-perspective, perspective)  # x perspective (about y)
    P[2, 1] = random.uniform(-perspective, perspective)  # y perspective (about x)
    # 进行投射变换
    im = cv2.warpPerspective(im, P, dsize=(width, height), borderValue=(114, 114, 114))

     可以看到透射变换是基于之前几种变换实现的一种变换

     

    二、代码总和

    def random_perspective(im, targets=(), segments=(), degrees=10, translate=.1, scale=.1, shear=10,
                           border=(0, 0)):
        # torchvision.transforms.RandomAffine(degrees=(-10, 10), translate=(.1, .1), scale=(.9, 1.1), shear=(-10, 10))
        # targets = [cls, xyxy]
    
        height = im.shape[0] + border[0] * 2  # shape(h,w,c)
        width = im.shape[1] + border[1] * 2
    
        # Center
        # YOLOV5中先对图像进行平移变换到左上角
        C = np.eye(3)
        C[0, 2] = -im.shape[1] / 2  # x translation (pixels)
        C[1, 2] = -im.shape[0] / 2  # y translation (pixels)
    
        # Rotation and Scale
        R = np.eye(3)
        a = random.uniform(-degrees, degrees)
        # s图像的缩放因子
        s = random.uniform(1 - scale, 1 + scale)
        R[:2] = cv2.getRotationMatrix2D(angle=a, center=(0, 0), scale=s)
    
        # Shear
        S = np.eye(3)
        S[0, 1] = math.tan(random.uniform(-shear, shear) * math.pi / 180)  # x shear (deg)
        S[1, 0] = math.tan(random.uniform(-shear, shear) * math.pi / 180)  # y shear (deg)
    
        # Translation
        T = np.eye(3)
        T[0, 2] = random.uniform(0.5 - translate, 0.5 + translate) * width  # x translation (pixels)
        T[1, 2] = random.uniform(0.5 - translate, 0.5 + translate) * height  # y translation (pixels)
    
        # Combined rotation matrix
        M = T @ S @ R @ C  # order of operations (right to left) is IMPORTANT
        if (border[0] != 0) or (border[1] != 0) or (M != np.eye(3)).any():  # image change
        # 默认是使用仿射变换
        im = cv2.warpAffine(im, M[:2], dsize=(width, height), borderValue=(114, 114, 114))
    
        return im

    展开全文
  • yolov5数据增强代码解读

    千次阅读 2021-07-27 14:50:29
    yolov5中用到的数据增强方法: self.mosaic 启用马赛克增强 self.mosaic_border = [-img_size // 2, -img_size // 2] 马赛克扩充 albumentations.Blur(p=0.1), 用一个随机尺寸的核来模糊图片 albumentations.Median...

    yolov5中用到的数据增强方法:
    self.mosaic 启用马赛克增强
    self.mosaic_border = [-img_size // 2, -img_size // 2] 马赛克扩充
    albumentations.Blur(p=0.1), 用一个随机尺寸的核来模糊图片
    albumentations.MedianBlur(p=0.1), 使用中值滤波
    albumentations.ToGray(p=0.01)], 转化成灰度图
    HSV color-space HSV空间的数据增强,包括(H色彩,S饱和度,B亮度)
    img = np.flipud(img) 上下翻转
    img = np.fliplr(img) 水平翻转
    mixup(img, labels, *load_mosaic(self, random.randint(0, self.n - 1))) Mixup图像混叠增广

    在utils/datasets.py里

    class LoadImagesAndLabels(Dataset):  # for training/testing
        def __init__(self, path, img_size=640, batch_size=16, augment=False, hyp=None, rect=False, image_weights=False,
                     cache_images=False, single_cls=False, stride=32, pad=0.0, prefix=''):
            self.img_size = img_size
            self.augment = augment    ##是否采用数据增强
            self.hyp = hyp
            self.image_weights = image_weights
            self.rect = False if image_weights else rect
            self.mosaic = self.augment and not self.rect  # 是否启用马赛克增强
            self.mosaic_border = [-img_size // 2, -img_size // 2]    ##是否启用马赛克扩充
            self.stride = stride
            self.path = path
            self.albumentations = Albumentations() if augment else None     ##如果数据增强,用pytorch自带的Albumentations()进行数据增强
    	...
    	...
    	    def __getitem__(self, index):
            index = self.indices[index]  # linear, shuffled, or image_weights
    
            hyp = self.hyp
            mosaic = self.mosaic and random.random() < hyp['mosaic']
            if mosaic:
                # Load mosaic
                img, labels = load_mosaic(self, index)
                shapes = None
    
                # MixUp augmentation
                if random.random() < hyp['mixup']:
                    img, labels = mixup(img, labels, *load_mosaic(self, random.randint(0, self.n - 1)))
    
            else:
                # Load image
                img, (h0, w0), (h, w) = load_image(self, index)
    
                # Letterbox
                shape = self.batch_shapes[self.batch[index]] if self.rect else self.img_size  # final letterboxed shape
                img, ratio, pad = letterbox(img, shape, auto=False, scaleup=self.augment)
                shapes = (h0, w0), ((h / h0, w / w0), pad)  # for COCO mAP rescaling
    
                labels = self.labels[index].copy()
                if labels.size:  # normalized xywh to pixel xyxy format
                    labels[:, 1:] = xywhn2xyxy(labels[:, 1:], ratio[0] * w, ratio[1] * h, padw=pad[0], padh=pad[1])
    
                if self.augment:
                    img, labels = random_perspective(img, labels,
                                                     degrees=hyp['degrees'],
                                                     translate=hyp['translate'],
                                                     scale=hyp['scale'],
                                                     shear=hyp['shear'],
                                                     perspective=hyp['perspective'])
    
            nl = len(labels)  # number of labels
            if nl:
                labels[:, 1:5] = xyxy2xywhn(labels[:, 1:5], w=img.shape[1], h=img.shape[0], clip=True, eps=1E-3)
    
            if self.augment:
                # Albumentations
                img, labels = self.albumentations(img, labels)   ##此处调用utils中的augmentation中的数据增强
    
                # HSV color-space
                augment_hsv(img, hgain=hyp['hsv_h'], sgain=hyp['hsv_s'], vgain=hyp['hsv_v'])
    
                # Flip up-down
                if random.random() < hyp['flipud']:
                    img = np.flipud(img)
                    if nl:
                        labels[:, 2] = 1 - labels[:, 2]
    
                # Flip left-right
                if random.random() < hyp['fliplr']:
                    img = np.fliplr(img)
                    if nl:
                        labels[:, 1] = 1 - labels[:, 1]
    
                # Cutouts
                # labels = cutout(img, labels, p=0.5)
    
            labels_out = torch.zeros((nl, 6))
            if nl:
                labels_out[:, 1:] = torch.from_numpy(labels)
    
            # Convert
            img = img.transpose((2, 0, 1))[::-1]  # HWC to CHW, BGR to RGB
            img = np.ascontiguousarray(img)
    
            return torch.from_numpy(img), labels_out, self.img_files[index], shapes
    
    
    

    utils中的augmentation.py

    class Albumentations:
        # YOLOv5 Albumentations class (optional, only used if package is installed)
        def __init__(self):
            self.transform = None    
            try:
                import albumentations as A     ##需要安装albumentations
                check_version(A.__version__, '1.0.3')  # version requirement
    
                self.transform = A.Compose([
                    A.Blur(p=0.1),
                    A.MedianBlur(p=0.1),
                    A.ToGray(p=0.01)],
                    bbox_params=A.BboxParams(format='yolo', label_fields=['class_labels']))       ##这里只用到了A.Blur,A.MedianBlur,A.ToGray三种数据增强
    
                logging.info(colorstr('albumentations: ') + ', '.join(f'{x}' for x in self.transform.transforms if x.p))
            except ImportError:  # package not installed, skip
                pass
            except Exception as e:
                logging.info(colorstr('albumentations: ') + f'{e}')
    
        def __call__(self, im, labels, p=1.0):
            if self.transform and random.random() < p:
                new = self.transform(image=im, bboxes=labels[:, 1:], class_labels=labels[:, 0])  # transformed
                im, labels = new['image'], np.array([[c, *b] for c, b in zip(new['class_labels'], new['bboxes'])])
            return im, labels
    
    train_transform = albumentations.Compose([
            albumentations.Resize(RESIZE_SIZE, RESIZE_SIZE),
            albumentations.OneOf([
                albumentations.RandomGamma(gamma_limit=(60, 120), p=0.9),
                albumentations.RandomBrightnessContrast(brightness_limit=0.2, contrast_limit=0.2, p=0.9),
                albumentations.CLAHE(clip_limit=4.0, tile_grid_size=(4, 4), p=0.9),
            ]),
            albumentations.OneOf([
                albumentations.Blur(blur_limit=4, p=1),
                albumentations.MotionBlur(blur_limit=4, p=1),
                albumentations.MedianBlur(blur_limit=4, p=1)
            ], p=0.5),
            albumentations.HorizontalFlip(p=0.5),
            albumentations.ShiftScaleRotate(shift_limit=0.2, scale_limit=0.2, rotate_limit=20,
                                            interpolation=cv2.INTER_LINEAR, border_mode=cv2.BORDER_CONSTANT, p=1),
            albumentations.Normalize(mean=(0.485, 0.456, 0.406), std=(0.229, 0.224, 0.225), max_pixel_value=255.0, p=1.0)
        ])
    
    
    def mixup(im, labels, im2, labels2):
        # Applies MixUp augmentation https://arxiv.org/pdf/1710.09412.pdf
        r = np.random.beta(32.0, 32.0)  # mixup ratio, alpha=beta=32.0
        im = (im * r + im2 * (1 - r)).astype(np.uint8)
        labels = np.concatenate((labels, labels2), 0)
        return im, labels
        Resize就是拉伸图片修改尺寸
        RandomGamma就是使用gamma变换
        RandomBrightnessContrast就是随机选择图片的对比度和亮度
        CLAHE是一种对比度受限情况下的自适应直方图均衡化算法
        blur就是用一个随机尺寸的核来模糊图片,这个尺寸小于等于blur_limit
        motion blur和上面一样,随机的核,然后使用运动模糊算法来图例图片,运动模糊简单的说就是因为摄像机运动造成的那种模糊的动感。
        medianBlur就是使用中值滤波。
        HorizontalFlip水平翻转
        ShiftScaleRotate这个就是平移缩放旋转三个一,给力!
        Normalize这个就是图像归一化了。
    

    想要修改yolov5中离线增强数据的方法参考:https://cloud.tencent.com/developer/article/1660972

    yolov5中的矩形训练
    在这里插入图片描述

    可以看到yolov5会对图片进行填充,填充为正方形从而传入网络进行训练,可以看到这里面有很多冗余的信息,会让网络产生很多无意义的候选框,矩形训练就是减少这些冗余信息,减少网络产生的无意义的框的数量,加快网络训练速度。yolov5网络的总步长为32,所以其实只要图片边长能够整除32就可以了,不一定完全需要正方形图片传入网络,矩形训练就是将图片填充为最小的32的倍数边长,从而减小冗余信息。
    在这里插入图片描述值得一提的是,除了矩形训练,还有矩形推理,也就是在做检测的时候也这样填充,从而加快推理速度,减少推理时间。

    参考:https://blog.csdn.net/Q1u1NG/article/details/107362572
    Mixup图像混叠增广参考:https://blog.csdn.net/zandaoguang/article/details/108525787

    展开全文
  • yolov5数据强化方法并不是越多越好

    千次阅读 热门讨论 2020-12-07 16:19:24
    最近刚刚更新的yolov5 3.1版本,里边封装了好多好多的数据强化方法,但是在实际训练中,并不是强化方法越多越好,下边主要是基于其中的三种方法做一下介绍: 1.mosaic Mosaic简单的说就是把四张训练图片缩放拼成一张...

    最近刚刚更新的yolov5 3.1版本,里边封装了好多好多的数据强化方法,但是在实际训练中,并不是强化方法越多越好,下边主要是基于其中的三种方法做一下介绍:
    1.mosaic
    Mosaic简单的说就是把四张训练图片缩放拼成一张图,这样我们原本较大的目标在缩小大概一倍之后也会变成较小的目标,这样训练可以增强我们模型的检测小模型的能力。
    但是如果我们的数据集本身就有很多的小目标,那么这个方法反而会导致本来较小的目标变得更小,导致模型的泛化能力变差。例如下边这张图是我自己正在做的一个目标检测项目训练集label分布:
    在这里插入图片描述
    我们可以发现,小目标非常多,因此在这里我们不在使用mosaic反而会增加我们模型的训练效果。(这张图在3.1版本的yolov5中会自己生成)

    2.focal loss:这里不分析公式,感兴趣的同学可以自行查找。fl的作用有两个:解决正负样本失衡、挖掘困难样本,大家可以看到我的label类别分布第一个类别和第二个类别相差将近4倍,此时使用fl可以增加模型指标,但是乳很本身样本分布较为均匀,那就没有必要使用。

    3.关于warmup的使用,这个因人而异吧,如果你对学习率这个指标比较敏感,也有较多的调参经验,那么就可以关闭warmup。但是如果不知道学习率怎么设置,可以打开warmup。warmup可以防止初始学习率较大导致模型训练效果越来越差。
    至于warmup的实现方式,用一个通俗易懂的例子:开车进入一个新城市的时候,一开始总是要小心翼翼驾驶的,过一会了大致了解了周边环境了才能提速。
    warmup会让学习率从一个很小的值开始上升,一直上升到你提前设定好的值再进行衰减
    具体可参考

    4.关于模型超参数的选择,yolov5中会自带一个hyp.finetune.yaml的文件,经过多个项目的测试,这样配置超参数训练效果很好。至于anchors的那个超参数是否使用你可以根据自己的数据决定。当你的数据ground truth之间差异较大(这里主要是只大小差异)时候,可以使用这个参数来增加每个检测头的anchor数量,当然了如果你觉得这还不够的话,可以使用yolov5中的6系列模型(就是models/hub中的l6或者m6模型),这个模型优四个检测头,分别对应8,16,32,64倍下采样,对于一些在途中比较大的目标,64倍下采样会有不错的效果。

    展开全文
  •    yolov4的发布,让很多做工程的都很兴奋,但其实静下来仔细研究,发现yolov4其实是一个成功的调参例子,作者用到了大量前人的技术,加以组合,实现了速度和精度的完美平衡,读yolov4的论文会发现,作者深厚的...

       yolov4的发布,让很多做工程的都很兴奋,但其实静下来仔细研究,发现yolov4其实是一个成功的调参例子,作者用到了大量前人的技术,加以组合,实现了速度和精度的完美平衡,读yolov4的论文会发现,作者深厚的论文基础,以及对论文中技术的使用,都值得我们学习。工程项目中,算法搭建完之后,复杂的应用环境中,总是遇到各种各样的问题,使得算法精度上不去,算法停留到瓶颈出,只有尝试各种解决问题的方法,才能在一次次实验中突破算法瓶颈,而这些解决问题的方法就来自平时论文的积累,因此,接下里将以yolov4的论文为导向,阅读和研究里面提到的各种trick。

    一、Random Erasing

    论文:https://arxiv.org/abs/1708.04896
    代码:https://github.com/zhunzhong07/Random-Erasing
       Random Erasing是2017年厦门大学提出来的,发表在CVPR上
       为了解决遮挡问题作者提出了Random Erasing,同时可以提高CNN的范化能力,Random-Erasing非常简单,就是在一个mini-batch中,随机选择一个图片,然后在该图片上的任何一个地方,选择一个随机尺寸进行覆盖,覆盖值可以看作是增加的噪声,Random Erasing 和Random cropping 、Random flipping具有一定的互补性。Random Erasing 已经被增加到torchvision.transforms中,可以在直接使用。
       Random Erasing 希望在遮挡目标的部分信息的同时,CNN依旧可以正确分类,就逼迫CNN利用局部没有遮挡的部分进行正确分类。
       论文中的可视化例子:
    在这里插入图片描述   这种简单粗暴的做法,在理想的图像数据中,例如CIFAR-10 和 CIFAR-100中也许有用,但是在实际的分类图片中,需要慎重使用,可以借鉴该论文的思想:就是有意识的覆盖掉图片中目标的一部分,可以模拟目标的遮挡。

    二、Cut Out

    论文:https://arxiv.org/abs/1708.04552
    代码: https://github.com/uoguelph-mlrg/Cutout

       Cut Out是2017年由圭尔夫大学提出,并且发表在CVPR
       出发点和随机擦除一样,也是模拟遮挡,目的是提高泛化能力,实现上比random erasing简单,随机选择一个固定大小的正方形区域,然后采用全0填充就OK了,当然为了避免填充0值对训练的影响,应该要对数据进行中心归一化操作,norm到0。
        本文和随机擦除几乎同时发表,难分高下(不同场景下谁好难说),区别在于在cutout中,擦除矩形区域存在一定概率不完全在原图像中的。而在Random Erasing中,擦除矩形区域一定在原图像内。
        Cutout变相的实现了任意大小的擦除,以及保留更多重要区域。需要注意的是作者发现cutout区域的大小比形状重要,所以cutout只要是正方形就行,非常简单。具体操作是利用固定大小的矩形对图像进行遮挡,在矩形范围内,所有的值都被设置为0,或者其他纯色值。而且擦除矩形区域存在一定概率不完全在原图像中的(文中设置为50%)

    三、Mixup

    论文:https://arxiv.org/abs/1710.09412
    代码:https://github.com/facebookresearch/mixup-cifar10
    3.1、算法伪代码
    伪代码
       从上面的伪代码可以看到,mixup的具体做法是,从两个batch中取出两个训练样本(x1,y1)和(x2,y2),其中x1和x2是训练数据,y1和y2是其对应的标签,将x1和x2按照一定的比例进行混合,生成最终的训练数据x,其对应的标签y1和y2也按照同样的比例进行混合,生成标签y。标签y1和y2是one-hot vector编码,可以理解为对k个类别的每个类给出样本属于该类的概率。加权以后就变成了"two-hot",也就是认为样本同时属于混合前的两个类别。

    3.2、官方代码:

    def mixup_data(x, y, alpha=1.0, use_cuda=True):
        '''Compute the mixup data. Return mixed inputs, pairs of targets, and lambda'''
        if alpha > 0.:
            lam = np.random.beta(alpha, alpha)
        else:
            lam = 1.
        batch_size = x.size()[0]
        if use_cuda:
            index = torch.randperm(batch_size).cuda()
        else:
            index = torch.randperm(batch_size)
        mixed_x = lam * x + (1 - lam) * x[index,:]
        y_a, y_b = y, y[index]
        return mixed_x, y_a, y_b, lam
    
    def mixup_criterion(y_a, y_b, lam):
        return lambda criterion, pred: lam * criterion(pred, y_a) + (1 - lam) * criterion(pred, y_b)
    

       pytorch代码中有些细节实现和伪代码不一样,需要说明的是:1、工程实现上,要用同样的miniti-batch加载并mixup,这样,可以减少I/O。2、不混合label,而是用加权的输入在两个label上分别计算cross-entropy loss,最后把两个loss加权作为最终的loss。由于cross-entropy loss的性质,这种做法和把label线性加权是等价的。

    3.3、理解:
       线性是最简单的一种操作,而这种简单的操作在现有的数据上生成虚拟数据,填充样本空间,从而减少在样本空间以外测试时的震荡数量。

    四、cutmix

    论文:https://arxiv.org/abs/1905.04899v2
    代码:https://github.com/clovaai/CutMix-PyTorch
    1、cutmix的算法
    在这里插入图片描述
        x A x_{A} xA x B x_{B} xB是训练样本, y A y_{A} yA y B y_{B} yB是对应的样本标签,M是mask掩码,cutmix的具体做法是,将A样本随机取出一块,覆盖到B样本上,新生成的数据标签是A的标签和B的标签按照一定的比例进行混合。
       cutmix和mixup很相似,cutmix 相当于cutout + mixup,论文里指出,二者的不同是cutmix是用图片的一部分完全代替另一个图片的一部分,而mixp是将两张图片按照一定的比例完全混合,cutmix生成的图片更自然。
       论文中将cutout、mixup和cutmix做了对比,并且使用cam技术进行了可视化,作者发现:cutout 可以利用剩下的图片信息做出正确的判断;mixup 在选择识别需要的线索时,表现得很迷茫;cutmix 可以准确的定位到两种类别,从而提高了cutout 的性能。实验结果图如下:
    在这里插入图片描述
    2、cutmix的官方代码
    在这里插入图片描述
    和mixup类似,这里不作详细解释,一看即明了。

    展开全文
  • 集成 albumentation 及 yoloV5 中的mosaic mixup class LoadImagesAndLabels_1(Dataset): # for training/testing def __init__(self, path, img_size=640, batch_size=16, augment=False, hyp=None, rect=False, ...
  • yolov5启用数据增强与tensorboard可视化 一,yolov5启用数据增强 1.data目录下,有两个hyp的文件:data/hyp.scratch.yaml和data/hyp.finetune.yaml具体内容如下: # Hyperparameters for VOC fine-tuning # python ...
  • 1、为何要增广数据集呢? 因为我们平时自己用来训练的数据集需要自己制作。公共数据集无法满足自己的针对性需求。 2、增广的方法有哪些? 水平翻转增强,垂直翻转增强,镜像对称增强,仿射变化,旋转,高斯加噪...
  • 1.图像坐标系 位于左上角,记住是左上角!!! 2.图像的变换过程 ...5.水平翻转 翻转了 没翻转 6.颜色扭曲 3.bbox变化 (这个是我自己用LabelImg标出的,懒得换新图片了,就是把原图(1330,..
  • 最近由于课题研究需要,针对遥感影像需要做旋转目标检测,因此做了yolov5的旋转框改造 代码地址:https://github.com/onehahaha756/yolov5_rotation
  • Yolov4 mosaic 数据增强

    万次阅读 多人点赞 2020-04-27 17:59:13
    Yolov4的mosaic 数据增强是参考CutMix数据增强,理论上类似,CutMix的理论可以参考这篇CutMix,但是mosaic利用了四张图片,据论文其优点是丰富检测物体的背景,且在BN计算的时候一下子会计算四张图片的数据,使得...
  • 该项目使用了YOLOv5s、YOLOv5m、YOLOv5l来训练安全帽佩戴检测数据集,代码和权重均已开源!安全帽佩戴检测数据集也是开源的(共含7581 张图像)! 项目教程也相当详细,推荐入门练手学习!而且有意思的是,该项目和...
  • yolo数据增广

    2019-12-05 16:02:38
    https://www.cnblogs.com/lky-learning/p/11653861.html
  • 根据yolov4文献中提到的cutout数据增广方式,进行扩展阅读。Cutout & Random Erasing 1、Cutout 论文地址:https://arxiv.org/pdf/1708.04552.pdf 代码地址:...
  • 点击上方“3D视觉工坊”,选择“星标”干货第一时间送达本文在YOLOv5的基础上加入了一些新的技术,比如ViT、CBAM和一些Tricks(数据增广、多尺度测试等),最终命名为TPH-YO...
  • yolov5代码解读-dataset

    2021-10-01 17:44:05
    yolov5数据处理这方面已经做的较为完善了,但是我现在遇到一个问题,就是我明明的是4通道的tiff数据,它用cv2.imread一下就给我读成3通道了。如果只是有个加载数据,我当然可以直接加个标志位解决,但是读取数据...
  • # -*- coding:utf-8 -*- import cv2 import numpy as np import sys def rad(x): return x * np.pi / 180 def get_warpR(): global anglex, angley, anglez, fov, W, H, r # 镜头与图像间的距离,21为半可...
  • 数据增广(百度架构师手把手带你零基础实践深度学习原版笔记系列) 目录 4.2 目标检测YOLO-V3算法--数据预处理&数据增广(百度架构师手把手带你零基础实践深度学习原版笔记系列) 数据预处理(数据增广目的) ...
  • 数据增广:旋转,缩放,平移以及错切

    千次阅读 多人点赞 2021-08-05 16:15:19
    在深度学习(图像领域)中,为了提升训练样本数量数据增广是非常常见的手段。比如: 随机水平翻转 随机色调(H)、饱和度(S)、明度(V)调整 随机旋转,缩放,平移以及错切 还有近几年常用的mixup,mosaic等等。 今天...
  • 本文介绍 全网最全:盘点那些图像数据增广方式Mosiac,MixUp,CutMix等. <!-- more --> 全网最全:盘点那些图像数据增广方式Mosiac,MixUp,CutMix等. 本文由林大佬原创,转载请注明出处,来自腾讯、阿里等一线...
  • KERAS-YOLOV3的数据增强

    千次阅读 热门讨论 2018-06-18 17:57:01
    上篇KERAS-YOLOV3的代码走读 https://blog.csdn.net/yangchengtest/article/details/80664415 有数据增强的内容没有看明白。 这篇来介绍一下。 简介 数据增强的方法主要有: 1. 翻转变换 flip 2. 随机...
  • 震惊! 它来了!YOLOv5它来了!

    千次阅读 2020-06-01 00:12:00
    ❝今天在刷github时,突然看到了YOLOv5,笔者当时还在怀疑是不是眼花了?确实是YOLOv5,但不是官方的也不是AB大神版,而是U版YOLO改进版。哎,想想真可怜,笔者还在熟悉YO...
  • YOLOv4中的数据增强

    2020-07-29 17:47:00
    导读YOLOv4的秘密并不在网络结构上,而在数据准备上。目标检测领域继续快速发展。不到两个月前,谷歌Brain团队发布了针对物体检测的EfficientDet,挑战了YOLOv3作为(接...
  • YOLOv4 中的数据增强

    千次阅读 2020-07-31 11:40:00
    作者 |Jacob Solawetz编译 |ronghuaiyang导读YOLOv4的秘密并不在网络结构上,而在数据准备上。目标检测领域继续快速发展。不到两个月前,谷歌Brain团队...
  • YOLO5face人脸检测模型论文和代码简析YOLO5Face模型分析论文及源码下载论文创新点实验下载代码跑起来还没想好写什么,但是一定会写参考文章 YOLO5Face论文发出以后,对YOLO5Face论文进行分析的文章较少,就想写一篇...
  • 简单看了一个yolov4的介绍,mosaic数据增强简单说就是四张图片合一,长宽随机变化。理想的实现是结合图片集和标签集,对单张图片标注过之后,四张合一的图片就不用再标注。这里只做一个简单的实现,仅仅把四张图片...
  • 数据集不足时需要进行数据增广 参考这里 2.1. 数据增广方式 数据增广具有多种方式, 从几何角度来讲,包括平移、旋转、镜像、裁剪、缩放等; 从像素角度来看,包括颜色抖动,添加椒盐噪音和高斯噪音干扰等...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 411
精华内容 164
关键字:

yolov5数据增广