-
2021-09-02 18:38:04
YOLOV5中的自适应图片缩放letterbox
前言
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:23NULL 博文链接:https://superwulei.iteye.com/blog/580318 -
Yolov5
2022-04-10 15:55:06Yolov5是一个基于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组成而成。
图1
创新点
输入端:Mosaic数据增强、自适应锚框计算、自适应图片缩放。
Backbone:Focus结构,CSP结构。
Neck:FPN+PAN结构。
Prediction:GIOU_Loss。Mosaic数据增强
主要是将数据通过随机缩放、随机裁剪、随机排布的方式进行拼接,对于小目标的检测效果较好。
自适应锚框计算
针对不同的数据集,都会有初始设定长宽的锚框。
在初始锚框的基础上输出预测框,进而和真实框groundtruth进行比对,计算两者差距,再反向更新,迭代网络参数。
Yolov5中将此功能嵌入到代码中,每次训练时,自适应的计算不同训练集中的最佳锚框值。自适应图片缩放
Yolo算法中常用416416,608608等尺寸。
缩放填充后,两端的黑边大小都不同,如果填充的比较多,则存在信息冗余,影响推理速度。yolov5对原始图像自适应的添加最少的黑边。图像高度上两端的黑边变少了,在推理时,计算量也会减少,即目标检测速度会得到提升。
注意只在检测时使用,在训练时仍使用传统填充方法。图2
Focus
以Yolov5s的结构为例,原始6086083的图像输入Focus结构,采用切片操作,先变成30430412的特征图,再经过一次32个卷积核的卷积操作,最终变成30430432的特征图。
但是在6.1版本,这里被替换成了卷积核为6*6的卷积层,效果是一样的,但是可以适配更高版本的pytorch和cpu,提高计算速度。
图3
两种CSP
以Yolov5s网络为例,CSP1_X结构应用于Backbone主干网络,另一种CSP2_X结构则应用于Neck中。
图4
Neck
FPN+PAN的结构。
采用借鉴CSPnet设计的CSP2结构,加强网络特征融合的能力。消除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倍之间就算匹配成功。
其余步骤和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都为正样本。
-
【目标检测】目标检测界的扛把子YOLOv5(原理详解+修炼指南)
2022-06-30 17:18:54Mosaic数据增强提出的作者也是来自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非极大值抑制
判断相邻网格识别的是否是同一物体,消除掉多余检测框。
-
2021-11-11yolov5-5.0版本代码详解----augmentations.py的letterbox函数
2021-11-11 15:16:34将图片缩放调整到指定大小 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图像预处理--图像缩放并加上灰度条
2022-04-14 11:41:01yolov4的图像数据预处理--随机缩放并加上灰度条 -
目标检测 YOLOv5网络v6 0版本总结
2022-06-30 17:06:14YOLOv5包含:YOLOv5s、YOLOv5m、YOLOv5l、YOLOv5x四种版本,下面以YOLOv5s为例**:**数据增强Mosaic将四张图片拼成一张图片Copy paste将部分目标随机粘贴到图片中,前提是数据要有实例分割才可以Random affine随即... -
关于Yolov5在测试时,图像大小被调整的问题
2022-06-02 11:02:38关于Yolov5在测试时,图像大小被调整的问题 -
yolov4,yolov5(学习记录)
2021-11-10 20:08:01yolov4中使用的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:09YOLOv5输入端、Backbone、Neck以及输出端的算法内容和主要改进 -
YOLO V5解读
2021-12-09 17:05:03YOLO V5 1.对于V4的改进 1.YOLOv5在YOLOv4算法的基础上做了进一步的改进,检测性能...Yolov5中将此功能嵌入到代码中,每次训练时,自适应的计算不同训练集中的最佳锚框值。 当然,如果觉得计算的锚框效果不是很好,也 -
深入浅出Yolo系列之Yolov5核心基础知识完整讲解
2020-08-10 15:21:33对Yolov4的相关基础知识做了比较系统的梳理,但Yolov4后不久,又出现了Yolov5,虽然作者没有放上和Yolov4的直接测试对比,但在COCO数据集的测试效果还是很可观的。 很多人考虑到Yolov5的创新性不足,对算法是否能够... -
自适应状态下图片的缩放问题
2019-08-08 15:40:06今天遇到了一个问题,就是在制作自适应网页时DIV中的图片无法做到同div一同缩放。后来发现以下代码可以解决。 这个是H5的代码 <div class="badyOneBlock1Photo"> <img src="Imagry/photo.png" alt="" ... -
yolov5
2021-12-24 16:46:49Yolov4核心基础知识完整讲解》对 Yolov4的相关基础知识做了比较系统的梳理,但Yolov4后不久,又出现了Yolov5,虽然作者没有放上和Yolov4的直接测试对比,但在COCO…https://zhuanlan.zhihu.com/p/172121380进击的... -
YOLOv5 目标检测
2021-09-01 09:27:08YOLOv5官方发布的代码中,检测网络共有四个版本,依次为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-5)YOLOV5
2022-03-08 15:26:06YOLOv5是一种单阶段目标检测算法,该算法在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:23YOLOv5的大小仅有 27 MB,而使用 darknet 架构的 YOLOv4 有 244 MB,对比之下小了近 90%,同时在准确度方面又与 YOLOv4 基准相当。 Github地址:https://github.com/ultralytics/yolov5 作者给的算法性能如下图: ... -
一文看懂YOLO v5
2021-08-15 15:45:45YOLOv5在比赛与落地中运用广泛,它可以通过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的损失函数。