精华内容
下载资源
问答
  • yolov5自适应图片缩放
    千次阅读
    2021-09-02 18:38:04

    YOLOV5中的自适应图片缩放letterbox

    前言

    一、letterbox自适应图片缩放技术

    一,计算收缩比

    二,计算收缩后图片的长宽

    三,计算需要填充的像素

    四,最后resize图片并填充像素

    二、代码总和

    二、使用步骤

    1.引入库

    2.读入数据

    总结


    前言

    YOLOV5中相比于之前的版本,有很多小trick,导致其性能和应用比较好。本文先讲讲在将图片输入网络前,对图片进行预处理的letterbox的自适应图片缩放技术


    一、letterbox自适应图片缩放技术

    在目标检测中,输入的图片尺寸有大有小,根据前人的实验结果,输入网络的尺寸统一缩放到同一个尺寸时,检测效果会更好(train中放入的图片并不经过letterbox,而是检测的时候使用letterbox

    但这时就有个问题,如果是简单的使用resize,很有可能就造成了图片信息的丢失,所以提出了letterbox自适应图片缩放技术。

    设计思想 

    letterbox的主要思想是尽可能的利用网络感受野的信息特征。比如在YOLOV5中最后一层的Stride=5,即最后一层的特征图中每个点,可以对应原图中32X32的区域信息,那么只要在保证整体图片变换比例一致的情况下,长宽均可以被32整除,那么就可以有效的利用感受野的信息。

    具体来说,图片变换比例一致指的是,长宽的收缩比例应该采用相同的比例。有效利用感受野信息则指对于收缩后不满足条件的一边,用灰白填充至可以被感受野整除。下面举例说明。

    下图即是经过letterbox处理的图片,假设图片原来尺寸为(1080, 1920),我们想要resize的尺寸为(640,640)。要想满足收缩的要求,应该选取收缩比例640/1920 = 0.33.则图片被缩放为(360,640).下一步则要填充灰白边至360可以被32整除,则应该填充至384,最终得到图片尺寸(384,640)

     而其实letterbox的实现也十分简单,以下将结合代码讲解步骤。

    一,计算收缩比

    shape = im.shape[:2]  # current shape [height, width]
    r = min(new_shape[0] / shape[0], new_shape[1] / shape[1])

    这里的收缩比取的是长宽方向上变化范围最小的一个。

    二,计算收缩后图片的长宽

    new_unpad = int(round(shape[1] * r)), int(round(shape[0] * r))

    三,计算需要填充的像素

    这里其实就是在计算那个需要收缩比大的那一边需要填充的像素

    # 计算需要填充的边的像素
    dw, dh = new_shape[1] - new_unpad[0], new_shape[0] - new_unpad[1]  
    # stride表示的即是模型下采样次数的2的次方,这个涉及感受野的问题,在YOLOV5中下采样次数为5
    # 则stride为32
    dw, dh = np.mod(dw, stride), np.mod(dh, stride)  
    dw /= 2  # 除以2即最终每边填充的像素
    dh /= 2

    四,最后resize图片并填充像素

    if shape[::-1] != new_unpad:  # resize
        im = cv.resize(im, new_unpad, interpolation=cv.INTER_LINEAR)
    # round(dw,dh - 0.1)直接让小于1的为0
    top, bottom = int(round(dh - 0.1)), int(round(dh + 0.1))
    left, right = int(round(dw - 0.1)), int(round(dw + 0.1))
    # 添加灰边
    im = cv.copyMakeBorder(im, top, bottom, left, right, cv.BORDER_CONSTANT, value=color) 

    二、代码总和

    def letterbox(im, new_shape=(640, 640), color=(114, 114, 114), auto=True, scaleFill=False, stride=32):
        # Resize and pad image while meeting stride-multiple constraints
        shape = im.shape[:2]  # current shape [height, width]
        if isinstance(new_shape, int):
            new_shape = (new_shape, new_shape)
       
        # Scale ratio (new / old)
        r = min(new_shape[0] / shape[0], new_shape[1] / shape[1])
    
        # Compute padding
        ratio = r, r  # width, height ratios
        new_unpad = int(round(shape[1] * r)), int(round(shape[0] * r))
        
        dw, dh = new_shape[1] - new_unpad[0], new_shape[0] - new_unpad[1]  # wh padding
        if auto:  # minimum rectangle
            dw, dh = np.mod(dw, stride), np.mod(dh, stride)  # wh padding
    
        dw /= 2  # divide padding into 2 sides
        dh /= 2
        print(dw, dh)
        if shape[::-1] != new_unpad:  # resize
            im = cv.resize(im, new_unpad, interpolation=cv.INTER_LINEAR)
        top, bottom = int(round(dh - 0.1)), int(round(dh + 0.1))
        left, right = int(round(dw - 0.1)), int(round(dw + 0.1))
        im = cv.copyMakeBorder(im, top, bottom, left, right, cv.BORDER_CONSTANT, value=color)  # add border
        return im, ratio, (dw, dh)

    更多相关内容
  • 图片尺寸自适应算法

    2019-03-17 02:18:23
    NULL 博文链接:https://superwulei.iteye.com/blog/580318
  • Yolov5

    千次阅读 2022-04-10 15:55:06
    Yolov5是一个基于pytorch的在在COCO数据集上进行预训练的目标检测体系结构和模型,是目前一个比较常用的目标检测模型,在现在很多实际项目中,有很好的效果,实用性较强,有模型尺寸小、部署成本低、灵活度高和检测...

    摘要

    Yolov5是一个基于pytorch的在在COCO数据集上进行预训练的目标检测体系结构和模型,是目前一个比较常用的目标检测模型,在现在很多实际项目中,有很好的效果,实用性较强,有模型尺寸小、部署成本低、灵活度高和检测速度快的特点。

    网络结构

    Focus:首先将多个slice结果Concat起来,然后将其送入CBL模块中(6.0版本以后替换成6×6卷积层)。
    CSP1_X:借鉴CSPNet网络结构,该模块由CBL模块、Res unint模块以及卷积层、Concate组成。
    CSP2_X:借鉴CSPNet网络结构,该模块由卷积层和X个Res unint模块Concate组成而成。
    Alt

    图1

    创新点

    输入端:Mosaic数据增强、自适应锚框计算、自适应图片缩放。
    Backbone:Focus结构,CSP结构。
    Neck:FPN+PAN结构。
    Prediction:GIOU_Loss。

    Mosaic数据增强

    主要是将数据通过随机缩放、随机裁剪、随机排布的方式进行拼接,对于小目标的检测效果较好。

    自适应锚框计算

    针对不同的数据集,都会有初始设定长宽的锚框。
    在初始锚框的基础上输出预测框,进而和真实框groundtruth进行比对,计算两者差距,再反向更新,迭代网络参数。
    Yolov5中将此功能嵌入到代码中,每次训练时,自适应的计算不同训练集中的最佳锚框值。

    自适应图片缩放

    Yolo算法中常用416416,608608等尺寸。
    缩放填充后,两端的黑边大小都不同,如果填充的比较多,则存在信息冗余,影响推理速度。yolov5对原始图像自适应的添加最少的黑边。图像高度上两端的黑边变少了,在推理时,计算量也会减少,即目标检测速度会得到提升。
    注意只在检测时使用,在训练时仍使用传统填充方法。

    Alt

    图2

    Focus

    以Yolov5s的结构为例,原始6086083的图像输入Focus结构,采用切片操作,先变成30430412的特征图,再经过一次32个卷积核的卷积操作,最终变成30430432的特征图。
    但是在6.1版本,这里被替换成了卷积核为6*6的卷积层,效果是一样的,但是可以适配更高版本的pytorch和cpu,提高计算速度。
    Alt

    图3

    两种CSP

    以Yolov5s网络为例,CSP1_X结构应用于Backbone主干网络,另一种CSP2_X结构则应用于Neck中。

    Alt

    图4

    Neck

    FPN+PAN的结构。
    采用借鉴CSPnet设计的CSP2结构,加强网络特征融合的能力。

    Alt

    消除Grid敏感度

    当真实目标中心点非常靠近网格的左上角点( σ ( t x ​ ) \sigma(t_x​ ) σ(tx) σ ( t y ​ ) \sigma(t_y​ ) σ(ty)应该趋近与0)或者右下角点( σ ( t x ​ ) \sigma(t_x​ ) σ(tx) σ ( t y ​ ) \sigma(t_y​ ) σ(ty)应该趋近与1)时,网络的预测值需要负无穷或者正无穷时才能取到,而这种很极端的值网络一般无法达到。
    对偏移量进行了缩放从原来的(0,1)缩放到(−0.5,1.5)这样网络预测的偏移量就能很方便达到0或1。
    公式:
    b x = ( 2 ⋅ σ ( t x ) − 0.5 ) = c x b_x=(2\cdot \sigma(t_x)-0.5)=c_x bx=(2σ(tx)0.5)=cx
    b y = ( 2 ⋅ σ ( t y ) − 0.5 ) = c y b_y=(2\cdot \sigma(t_y)-0.5)=c_y by=(2σ(ty)0.5)=cy
    b w = p w ⋅ ( 2 ⋅ σ ( t w ) ) 2 b_w=p_w\cdot(2\cdot\sigma(t_w))^2 bw=pw(2σ(tw))2
    b h = p h ⋅ ( 2 ⋅ σ ( t h ) ) 2 b_h=p_h\cdot(2\cdot\sigma(t_h))^2 bh=ph(2σ(th))2

    正负样本的匹配

    先去计算每个GT Box与对应的Anchor Templates模板的高宽比例,即:
    r w = w g t / w a t r_w = w_{gt} / w_{at} rw=wgt/wat
    r h = h g t / h a t r_h = h_{gt} / h_{at} rh=hgt/hat
    然后统计这些比例和它们倒数之间的最大值,这里可以理解成计算GT Box和Anchor Templates分别在宽度以及高度方向的最大差异(当相等的时候比例为1,差异最小):
    r w m a x = m a x ( r w , 1 / r w ) r_w^{max} = max(r_w, 1 / r_w) rwmax=max(rw,1/rw)
    r h m a x = m a x ( r h , 1 / r h ) r_h^{max} = max(r_h, 1 / r_h) rhmax=max(rh,1/rh)

    接着统计 r w m a x r_w^{max} rwmax r h m a x r_h^{max} rhmax之间的最大值,即宽度和高度方向差异最大的值:
    r m a x = m a x ( r w m a x , r h m a x ) r^{max} = max(r_w^{max}, r_h^{max}) rmax=max(rwmax,rhmax)

    如果GT Box和对应的Anchor Template的 r m a x r^{max} rmax小于阈值anchor_t(在源码中默认设置为4.0),即GT Box和对应的Anchor Template的高、宽比例相差不算太大,则将GT Box分配给该Anchor Template模板。假设对某个GT Box而言,其实只要GT Box满足在某个Anchor Template宽和高的0.25×0.25倍和4.0×4.0倍之间就算匹配成功。
    Alt
    其余步骤和YOLOv4中一致:
    将GT投影到对应预测特征层上,根据GT的中心点定位到对应Cell,注意图中有三个对应的Cell。因为网络预测中心点的偏移范围已经调整到了( − 0.5 , 1.5 ) (-0.5, 1.5)(−0.5,1.5),所以按理说只要Grid Cell左上角点距离GT中心点在( − 0.5 , 1.5 ) (−0.5,1.5)(−0.5,1.5)范围内它们对应的Anchor都能回归到GT的位置处。这样会让正样本的数量得到大量的扩充。
    则这三个Cell对应的AT2和AT3都为正样本。
    Alt

    展开全文
  • Mosaic数据增强提出的作者也是来自Yolov5团队的成员,不过,随机缩放、随机裁剪、随机排布的方式进行拼接,对于小目标的检测效果还是很不错的。 算法优点:在Yolo算法中,针对不同的数据集,都会有初始设定长宽的锚...

    1.YOLO输入端

    在这里插入图片描述

    1.1 Mosaic数据增强

    Yolov5的输入端采用了和Yolov4一样的Mosaic数据增强的方式。

    Mosaic数据增强提出的作者也是来自Yolov5团队的成员,不过,随机缩放、随机裁剪、随机排布的方式进行拼接,对于小目标的检测效果还是很不错的。
    在这里插入图片描述

    • 4张图片拼接
    • 随机缩放
    • 随机裁剪
    • 随机排布

    算法优点:

    • 丰富数据集
    • 减少GPU计算

    1.2 自适应锚框计算

    在Yolo算法中,针对不同的数据集,都会有初始设定长宽的锚框。

    在网络训练中,网络在初始锚框的基础上输出预测框,进而和真实框groundtruth进行比对,计算两者差距,再反向更新,迭代网络参数。
    在这里插入图片描述

    • Step1:读取训练集中所有图片的w、h以及检测框的w、h

    • Step2:将读取的坐标修正为绝对坐标

    • Step3:使用Kmeans算法对训练集中所有的检测框进行聚类,得到k个anchors

    • Step4:通过遗传算法对得到的anchors进行变异,如果变异后效果好将其保留,否则跳过

    • Step5:将最终得到的最优anchors按照面积返回

    1.3 自适应图片缩放

    在常用的目标检测算法中,不同的图片长宽都不相同,因此常用的方式是将原始图片统一缩放到一个标准尺寸,再送入检测网络中。
    在这里插入图片描述

    letterbox自适应图片缩放技术尽量保持高宽比,缺的用灰边补齐达到固定的尺寸。

    2.YOLO总体架构图

    在这里插入图片描述

    2.1 BackBone

    主要进行特征提取,将图像中的物体信息通过卷积网络进行提取,用于后面目标检测。
    在这里插入图片描述

    2.1.1 Focus模块

    Focus层原理和PassThrough层很类似。它采用切片操作把高分辨率的图片拆分成多个低分辨率的图片/特征图,即隔列采样+拼接。
    在这里插入图片描述

    2.1.2 SPP模块

    空间金字塔池化,能将任意大小的特征图转换成固定大小的特征向量。
    在这里插入图片描述

    2.1.3 CSP_X模块

    backbone是较深的网络,增加残差结构可以增加层与层之间反向传播的梯度值,避免因为加深而带来的梯度消失,从而可以提取到更细粒度的特征并且不用担心网络退化。
    在这里插入图片描述

    2.2 Neck

    对特征进行混合与组合,增强网络的鲁棒性,加强物体检测能力,并且将这些特征传递给Head层进行预测。
    在这里插入图片描述

    2.2.1 FPN

    在这里插入图片描述

    2.2.2 PAN

    在这里插入图片描述

    2.3 YOLO输出端

    主要进行最终的预测输出。

    2.3.1 Bounding Box损失函数

    真实检测框和模型预测输出框的吻合程度,用于反向传播优化模型。
    在这里插入图片描述

    2.3.2 NMS非极大值抑制

    判断相邻网格识别的是否是同一物体,消除掉多余检测框。
    在这里插入图片描述

    展开全文
  • 图片缩放调整到指定大小 2、引用位置 在datasets.py多次调用,分别为 1、LoadImages类的__next__函数(242行); 2、LoadWebcam类的__next__函数(288行); 3、LoadStreams类的__init__函数(337行); 4、LoadStreams...

    yolov5-5.0版本代码详解----augmentations.py的letterbox函数

    1、作用

    将图片缩放调整到指定大小

    2、引用位置

    在datasets.py多次调用,分别为
    1、LoadImages类的__next__函数(242行);
    2、LoadWebcam类的__next__函数(288行);
    3、LoadStreams类的__init__函数(337行);
    4、LoadStreams类的__next__函数(366行);
    5、LoadImagesAndLabels类的__getitem__函数(566行)

    3、原理

    3.1 传统图片缩放

    在常用的目标检测算法中,不同的图片长宽都不相同,因此常用的方式是将原始图片统一缩放到一个标准尺寸,再送入检测网络中。
    在这里插入图片描述

    缺点:缩放填充后,两端的黑边大小都不同,而如果填充的比较多,则存在信息冗余,影响推理速度。

    3.2 Yolov5的自适应缩放

    在这里插入图片描述

    图像高度上两端的黑边变少了,在推理时,计算量也会减少,即目标检测速度会得到提升,通过这种简单的改进,推理速度得到了37%的提升,可以说效果很明显。

    4、代码

    4.1 参数
    def letterbox(im, new_shape=(640, 640), color=(114, 114, 114),
                  auto=True, scaleFill=False, scaleup=True, stride=32):
        """参数:
                im: 原图 hwc
                new_shape: 缩放后的尺寸
                color: pad的颜色(灰色边框,补齐调整后的区域)
                auto: True 保证缩放后的图片保持原图的比例 即 将原图最长边缩放到指定大小,再将原图较短边按原图比例缩放(不会失真)
                      False 将原图最长边缩放到指定大小,再将原图较短边按原图比例缩放,最后将较短边两边pad操作缩放到最长边大小(不会失真)
                scaleFill: True 简单粗暴的将原图resize到指定的大小,没有pad操作(失真)
                scaleup: True  
                         False 对于大于new_shape的原图进行缩放,小于的不变
                stride: 步长
    
    4.2 计算缩放比例
        # 在满足多个步幅约束的情况下调整图像大小并填充图像
    
        # 第一层resize后图片大小[h, w]
        shape = im.shape[:2]
    
        # 如果new_shape参数是整数(这里不是),防止将new_shape = 640
        if isinstance(new_shape, int):
            new_shape = (new_shape, new_shape)
    
        # 计算比例 (new / old) 选择小的那个
        r = min(new_shape[0] / shape[0], new_shape[1] / shape[1])
    

    在这里插入图片描述
    原始缩放尺寸是416×416,都除以原始图像的尺寸后,可以得到0.52,和0.69两个缩放系数,选择小的缩放系数0.52。

    4.3 计算缩放后的尺寸
        # 只进行下采样 因为上采样会让图片模糊
        if not scaleup:
            r = min(r, 1.0)
    
        # 计算pad长宽
        ratio = r, r  # 长宽比例
        new_unpad = int(round(shape[1] * r)), int(round(shape[0] * r))  # wh(512, 343) 保证缩放后图像比例不变
    

    在这里插入图片描述
    原始图片的长宽都乘以最小的缩放系数0.52,宽变成了416,而高变成了312。

    4.4 计算黑边填充数值
        dw, dh = new_shape[1] - new_unpad[0], new_shape[0] - new_unpad[1]  # wh padding
        if auto:  # 保证原图比例不变,将图像最大边缩放到指定大小
            # 这里的取余操作可以保证padding后的图片是32的整数倍(416x416),如果是(512x512)可以保证是64的整数倍
            dw, dh = np.mod(dw, stride), np.mod(dh, stride)  # wh padding
        elif scaleFill:  # 简单粗暴的将图片缩放到指定尺寸
            dw, dh = 0.0, 0.0
            new_unpad = (new_shape[1], new_shape[0])
            ratio = new_shape[1] / shape[1], new_shape[0] / shape[0]  # width, height ratios
    
        # 在较小边的两侧进行pad, 而不是在一侧pad
        dw /= 2  # divide padding into 2 sides
        dh /= 2
    
        if shape[::-1] != new_unpad:  # 将原图resize到new_unpad(长边相同,比例相同的新图)
            im = cv2.resize(im, new_unpad, interpolation=cv2.INTER_LINEAR)
        top, bottom = int(round(dh - 0.1)), int(round(dh + 0.1))   # 计算上下两侧的padding
        left, right = int(round(dw - 0.1)), int(round(dw + 0.1))  # 计算左右两侧的padding
        im = cv2.copyMakeBorder(im, top, bottom, left, right, cv2.BORDER_CONSTANT, value=color)  # add border
    

    在这里插入图片描述
    将416-312=104,得到原本需要填充的高度。再采用numpy中np.mod取余数的方式,得到8个像素,再除以2,即得到图片高度两端需要填充的数值。

    4.5 返回
        return im, ratio, (dw, dh)
        """:img: letterbox后的图片 HWC
            ratio: wh比例
            (dw, dh): w和h的pad
        """
    

    5、例子

    import numpy as np
    import cv2
    
    
    #  将图片缩放调整到指定大小
    #  在datasets.py多次调用,分别为1、LoadImages类的__next__函数(242行);2、LoadWebcam类的__next__函数(288行);
    #  3、LoadStreams类的__init__函数(337行);4、LoadStreams类的__next__函数(366行);
    #  5、LoadImagesAndLabels类的__getitem__函数(566行)
    def letterbox(im, new_shape=(640, 640), color=(114, 114, 114),
                  auto=True, scaleFill=False, scaleup=True, stride=32):
        """参数:
                im: 原图 hwc
                new_shape: 缩放后的尺寸
                color: pad的颜色(灰色边框,补齐调整后的区域)
                auto: True 保证缩放后的图片保持原图的比例 即 将原图最长边缩放到指定大小,再将原图较短边按原图比例缩放(不会失真)
                      False 将原图最长边缩放到指定大小,再将原图较短边按原图比例缩放,最后将较短边两边pad操作缩放到最长边大小(不会失真)
                scaleFill: True 简单粗暴的将原图resize到指定的大小,没有pad操作(失真)
                scaleup: True  对于小于new_shape的原图进行缩放,大于的不变
                         False 对于大于new_shape的原图进行缩放,小于的不变
                stride: 步长
    
        :return: img: letterbox后的图片 HWC
                 ratio: wh比例
                 (dw, dh): w和h的pad
        """
    
        # 在满足多个步幅约束的情况下调整图像大小并填充图像
    
        # 第一层resize后图片大小[h, w]
        shape = im.shape[:2]
    
        # 如果new_shape参数是整数(这里不是),防止将new_shape = 640
        if isinstance(new_shape, int):
            new_shape = (new_shape, new_shape)
    
        # 计算比例 (new / old)
        r = min(new_shape[0] / shape[0], new_shape[1] / shape[1])
    
        # 只进行下采样 因为上采样会让图片模糊
        if not scaleup:
            r = min(r, 1.0)
    
        # 计算灰边长宽
        ratio = r, r  # 长宽比例
        new_unpad = int(round(shape[1] * r)), int(round(shape[0] * r))  # wh(512, 343) 保证缩放后图像比例不变
        dw, dh = new_shape[1] - new_unpad[0], new_shape[0] - new_unpad[1]  # wh padding
        if auto:  # 保证原图比例不变,将图像最大边缩放到指定大小
            # 这里的取余操作可以保证padding后的图片是32的整数倍(416x416),如果是(512x512)可以保证是64的整数倍
            dw, dh = np.mod(dw, stride), np.mod(dh, stride)  # wh padding
        elif scaleFill:  # 简单粗暴的将图片缩放到指定尺寸
            dw, dh = 0.0, 0.0
            new_unpad = (new_shape[1], new_shape[0])
            ratio = new_shape[1] / shape[1], new_shape[0] / shape[0]  # width, height ratios
    
        # 在较小边的两侧进行pad, 而不是在一侧pad
        dw /= 2  # divide padding into 2 sides
        dh /= 2
    
        if shape[::-1] != new_unpad:  # 将原图resize到new_unpad(长边相同,比例相同的新图)
            im = cv2.resize(im, new_unpad, interpolation=cv2.INTER_LINEAR)
        top, bottom = int(round(dh - 0.1)), int(round(dh + 0.1))   # 计算上下两侧的padding
        left, right = int(round(dw - 0.1)), int(round(dw + 0.1))  # 计算左右两侧的padding
        im = cv2.copyMakeBorder(im, top, bottom, left, right, cv2.BORDER_CONSTANT, value=color)  # add border
        return im, ratio, (dw, dh)
    
    
    if __name__ == '__main__':
        img = r'2.jpg'
        im = cv2.imread(img)
    
        ni, _, _ = letterbox(im, new_shape=320)
        cv2.imwrite('res3.jpg', ni)
    

    在这里插入图片描述
    在这里插入图片描述
    注意:
    a.训练时没有采用缩减黑边的方式,还是采用传统填充的方式,即缩放到416×416大小。
    只是在测试,使用模型推理时,才采用缩减黑边的方式,提高目标检测,推理的速度。
    b.为什么np.mod函数的后面用32?因为Yolov5的网络经过5次下采样,而2的5次方,等于32。所以至少要去掉32的倍数,再进行取余。

    展开全文
  • YOLO系列梳理(三)YOLOv5

    千次阅读 2022-04-24 10:40:56
    前言YOLOv5 是在 YOLOv4 出来之后没多久就横空出世了。今天笔者介绍一下 YOLOv5 的相关知识。目前 YOLOv5 发布了新的版本,6.0版本。在这里,YOLOv5 也在5.0基础上集成了更多特性,同时也对模型做了微调,并且优化了...
  • yolo学习之自适应anchor

    2022-05-06 14:29:46
    一、前言 参考: YOLOv5中autoanchor.py的def metric(k)的r = wh[:, None] / k[None]的理解_Taylor不...yolov5 anchors设置详解_高祥xiang的博客-CSDN博客_yolov5自适应锚框 这个参考链接我觉得非常棒! 我这里不
  • yolov5理论学习笔记

    千次阅读 2020-11-25 10:18:10
    内容来源: 深入浅出Yolo系列之Yolov5核心基础知识完整讲解
  • yolov4的图像数据预处理--随机缩放并加上灰度条
  • YOLOv5包含:YOLOv5s、YOLOv5m、YOLOv5l、YOLOv5x四种版本,下面以YOLOv5s为例**:**数据增强Mosaic将四张图片拼成一张图片Copy paste将部分目标随机粘贴到图片中,前提是数据要有实例分割才可以Random affine随即...
  • 关于Yolov5在测试时,图像大小被调整的问题
  • yolov4,yolov5(学习记录)

    千次阅读 2021-11-10 20:08:01
    yolov4中使用的Mosaic是参考2019年底提出的CutMix数据增强的方式,但CutMix只使用了两张图片进行拼接,而Mosaic数据增强则采用了4张图片,随机缩放、随机剪裁、随机排布的方式进行拼接。 这里首先要了解为什么要...
  • 干货|深入浅出YOLOv5

    千次阅读 2021-10-06 01:08:16
    点击上方“小白学视觉”,选择加"星标"或“置顶”重磅干货,第一时间送达 本文转自|机器学习算法工程师之前已经对Yolov4的相关基础知识做了比较系统的梳理(深入浅出Yolov3和Yolo...
  • 【快速入门】YOLOv5目标检测算法

    万次阅读 多人点赞 2022-02-27 20:50:21
    简单快速入门YOLOv5秘籍!
  • YOLO-YOLOV5算法原理及网络结构整理

    万次阅读 多人点赞 2022-03-24 10:46:37
    介绍YOLO系列包括YOLO-YOLOV5的算法原理、网络框架以及版本之间的改进点
  • YOLOv5算法详解

    2022-07-21 10:13:09
    YOLOv5输入端、Backbone、Neck以及输出端的算法内容和主要改进
  • YOLO V5解读

    万次阅读 2021-12-09 17:05:03
    YOLO V5 1.对于V4的改进 1.YOLOv5YOLOv4算法的基础上做了进一步的改进,检测性能...Yolov5中将此功能嵌入到代码中,每次训练时,自适应的计算不同训练集中的最佳锚框值。 当然,如果觉得计算的锚框效果不是很好,也
  • 深入浅出Yolo系列之Yolov5核心基础知识完整讲解

    万次阅读 多人点赞 2020-08-10 15:21:33
    Yolov4的相关基础知识做了比较系统的梳理,但Yolov4后不久,又出现了Yolov5,虽然作者没有放上和Yolov4的直接测试对比,但在COCO数据集的测试效果还是很可观的。 很多人考虑到Yolov5的创新性不足,对算法是否能够...
  • 今天遇到了一个问题,就是在制作自适应网页时DIV中的图片无法做到同div一同缩放。后来发现以下代码可以解决。 这个是H5的代码 <div class="badyOneBlock1Photo"> <img src="Imagry/photo.png" alt="" ...
  • yolov5

    千次阅读 2021-12-24 16:46:49
    Yolov4核心基础知识完整讲解》对 Yolov4的相关基础知识做了比较系统的梳理,但Yolov4后不久,又出现了Yolov5,虽然作者没有放上和Yolov4的直接测试对比,但在COCO…https://zhuanlan.zhihu.com/p/172121380进击的...
  • YOLOv5 目标检测

    千次阅读 2021-09-01 09:27:08
    YOLOv5官方发布的代码中,检测网络共有四个版本,依次为YOLOv5s、YOLOv5m、YOLOv5l、YOLOv5x 。其中YOLOv5s是“深度”和“特征图宽度”均最小的网络,另外三种可以认为是在其基础上,进行了加深、加宽。 看一下...
  • YOLO V5 -- 学习笔记

    千次阅读 2021-04-11 10:32:09
    参考文章:深入浅出Yolo系列之Yolov5核心基础知识完整讲解 – 江大白* 参考视频教程:目标检测基础——YOLO系列模型(理论和代码复现)-- PULSE_ 0.V4 & V5 yolo v5和v4前后推出只有两个月,其实V5和V4都是V3...
  • YOLOv5

    2022-07-11 10:46:05
    该系列为博主自主学习YOLO系列的自我总结。本篇是对YOLOv5进行一个总结和分析。
  • 深度学习之学习(3-5YOLOV5

    千次阅读 2022-03-08 15:26:06
    YOLOv5是一种单阶段目标检测算法,该算法在YOLOv4的基础上添加了一些新的改进思路,使得其速度与精度都得到了极大的性能提升,具体包括:输入端的Mosaic数据增强、自适应锚框计算、自适应图片缩放操作;基准端的...
  • YoloV5 部分原理解析

    千次阅读 2022-02-15 09:37:35
    对四张图片进行拼接,每一张图片都有其对应的框,将四张图片拼接之后就获得一张新的图片,同时也获得这张图片对应的框,然后我们将这样一张新的图片传入到神经网络当中去学习,相当于一下子传入四张图
  • 【YOLO-v5学习笔记】

    2021-11-22 17:23:57
    (代码:https://www.cnblogs.com/yxyun/p/14253168.html) 3、自适应图片缩放: (1)思想:在常用的目标检测算法中,不同的图片长宽都不相同,因此常用的方式是将原始图片统一缩放到一个标准尺寸,再送入检测网络...
  • YOLOv5 学习笔记

    千次阅读 2021-06-22 19:33:23
    文章目录简介YOLOv5网络架构...输入端:在模型训练阶段,提出了一些改进思路,主要包括Mosaic数据增强、自适应锚框计算、自适应图片缩放; 基准网络:融合其它检测算法中的一些新思路,主要包括:Focus结构与CSP结构
  • 目标检测——YOLOv5(八)

    万次阅读 多人点赞 2020-08-27 17:43:23
    YOLOv5的大小仅有 27 MB,而使用 darknet 架构的 YOLOv4 有 244 MB,对比之下小了近 90%,同时在准确度方面又与 YOLOv4 基准相当。 Github地址:https://github.com/ultralytics/yolov5 作者给的算法性能如下图: ...
  • 一文看懂YOLO v5

    千次阅读 2021-08-15 15:45:45
    YOLOv5在比赛与落地中运用广泛,它可以通过chaneel与layer的控制因子来根据落地要求灵活配置模型。与YOLO系列1-4不同的是YOLOv5对正样本的定义:其采用了跨领域网格,并在不同输出层匹配,极大的扩增了正样本anchor...
  • 大话YOLOV5

    2022-07-08 21:39:23
    目标检测任务的损失函数一般由 Classification Loss(分类损失函数)和 Bounding Box Regression Loss(回归损失函数)2 部分构成。Yolov5中采用其中的CIOU_Loss做Bounding box的损失函数。

空空如也

空空如也

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

yolov5自适应图片缩放