关于人工智能:深度学习与CV教程13-目标检测-SSDYOLO系列

5次阅读

共计 12018 个字符,预计需要花费 31 分钟才能阅读完成。

  • 作者:韩信子 @ShowMeAI
  • 教程地址:http://www.showmeai.tech/tutorials/37
  • 本文地址:http://www.showmeai.tech/article-detail/272
  • 申明:版权所有,转载请分割平台与作者并注明出处
  • 珍藏 ShowMeAI 查看更多精彩内容

本系列为 斯坦福 CS231n《深度学习与计算机视觉 (Deep Learning for Computer Vision)》的全套学习笔记,对应的课程视频能够在 这里 查看。更多材料获取形式见文末。


引言

指标检测 (Object Detection)是计算机视觉畛域十分重要的工作,指标检测模型要实现「预测出各个物体的边界框(bounding box)」和「 给出每个物体的分类概率」两个子工作。

通常状况下,在对一张图片进行指标检测后,会失去许多物体的边界框和对应的置信度(代表其蕴含物体的可能性大小)。

指标检测算法次要集中在 two-stage 算法和 one-stage 算法两大类:

① two-stage 算法

  • 如 R-CNN 系列算法,须要学生成 proposal(一个有可能蕴含待检物体的预选框),而后进行细粒度的物体检测。
  • ShowMeAI 在上一篇 深度学习与 CV 教程(12) | 指标检测 (两阶段, R-CNN 系列) 中做了介绍。

② one-stage 算法

  • 间接在网络中提取特色来预测物体分类和地位。

two-stage 算法速度绝对较慢然而准确率高,one-stage 算法准确率没有 two-stage 算法高然而速度较快。在本篇咱们将聚焦 one-stage 的指标检测办法进行解说,次要包含 YOLO 系列算法和 SSD 等。

1.YOLO 算法(YOLO V1)

对于 YOLO 的具体常识也能够比照浏览 ShowMeAI 的 深度学习教程 | 吴恩达专项课程 · 全套笔记解读 中的文章 CNN 利用: 指标检测 中对于 YOLO 的解说。

1.1 算法核心思想

YOLO 算法采纳一个独自的 CNN 模型实现 end-to-end 的指标检测。首先将输出图片 resize 到 \(448 \times 448\),而后送入 CNN 网络,最初解决网络预测后果失去检测的指标。相比 R-CNN 算法,其是一个对立的框架,其速度更快,而且 YOLO 的训练过程也是 端到端 / end-to-end 的。所谓的 YOLO 全名是 You Only Look Once,意思是算法只须要一次的推断运算

相比上述滑动窗口算法,YOLO 算法不再是窗口滑动,而是间接将原始图片宰割成互不重合的小方块,而后通过卷积失去等同 size 的特色图,基于下面的剖析,能够认为特色图的每个元素也是对应原始图片的一个小方块,能够用每个元素来能够预测那些中心点在该小方块内的指标。

YOLO 算法的 CNN 网络将输出的图片宰割成 \(N\times N\) 网格,而后每个单元格负责去检测那些中心点落在该格子内的指标

如图所示,能够看到,狗这个指标的核心落在左下角一个单元格内,那么该单元格负责预测这个狗。每个单元格会预测 \(B\) 个边界框(bounding box)以及边界框的置信度(confidence score)。

所谓置信度其实蕴含两个方面,一是这个边界框含有指标的可能性大小,二是这个边界框的准确度

前者记为 \(P(object)\),当该边界框是背景时(即不蕴含指标时),\(P(object)=0\)。而当该边界框蕴含指标时,\(P(object)=1\)。

边界框的准确度能够用预测框与 ground truth 的 IoU(交并比)来表征,记为 \(\text{IoU}^{truth}_{pred}\)。因而置信度能够定义为 \(Pr(object) \ast \text{IoU}^{truth}_{pred}\)。

边界框的大小与地位能够用 4 个值来表征:\((x, y,w,h)\),其中 \((x,y)\) 是边界框的核心坐标,而 \(w\) 和 \(h\) 是边界框的宽与高。

还有一点要留神,核心坐标的预测值 \((x,y)\) 是绝对于每个单元格左上角坐标点的偏移值,并且单位是绝对于单元格大小的,单元格的坐标定义如上方图所示。

边界框的 \(w\) 和 \(h\) 预测值是绝对于整个图片的宽与高的比例,因而实践上 4 个元素的大小应该在 \([0,1]\) 范畴。这样,每个边界框的预测值实际上蕴含 5 个元素:\((x,y,w,h,c)\),其中前 4 个表征边界框的大小与地位,最初一个值是置信度。

除此之外,每一个单元格预测出 \(C\) 个类别概率值,其表征的是由该单元格负责预测的边界框中的指标属于各个类别的概率。这些概率值其实是在各个边界框置信度下类别的条件概率,即 \(Pr(class_{i}|object)\)。

值得注意的是,不论一个单元格预测多少个边界框,其只预测一组类别概率值。同时,咱们能够计算出各个边界框的类别置信度 :

$$
Pr(class_{i}|object)Pr(object)\text{IoU}^{truth}_{pred}=Pr(class_{i}) \ast \text{IoU}^{truth}_{pred}
$$

边界框类别置信度表征的是该边界框中指标属于各个类别的可能性大小以及边界框匹配指标的好坏。

1.2 YOLO 网络结构

YOLO 算法采纳 CNN 来提取特色,应用全连贯层来失去预测值。网络结构参考 GoogleNet,蕴含 24 个卷积层和 2 个全连贯层,如下图所示。

对于卷积层,次要应用 \(1 \times 1\) 卷积来做通道数升高,用 \(3 \times 3\) 卷积提取特色。对于卷积层和全连贯层,采纳 Leaky ReLU 激活函数:\(max(x, 0.1x)\),最初一层却采纳线性激活函数。

1.3 YOLO 训练与预测

在训练之前,先在 ImageNet 上进行预训练,其预训练的分类模型采纳上图中前 20 个卷积层,而后增加一个 average-pool 层和全连贯层。

在预训练完结之后之后,在预训练失去的 20 层卷积层之上加上随机初始化的 4 个卷积层和 2 个全连贯层进行 fine-tuning。因为检测工作个别须要更高清的图片,所以将网络的输出从 \(224 \times 224\) 减少到了 \(448 \times 448\)。

整个网络的流程如下图所示:

YOLO 算法将指标检测问题看作回归问题,所以采纳的是 MSE loss,对不同的局部采纳了不同的权重值。首先辨别定位误差和分类误差。

  • 对于定位误差,即边界框坐标预测误差,采纳较大的权重 \(\lambda=5\)。
  • 而后其辨别不蕴含指标的边界框与含有指标的边界框的置信度,对于前者,采纳较小的权重值 \(\lambda =0.5\)。其它权重值均设为 \(1\)。
  • 而后采纳均方误差,其同等对待大小不同的边界框,然而实际上较小的边界框的坐标误差应该要比拟大的边界框要更敏感。为了保障这一点,将网络的边界框的宽与高预测改为对其平方根的预测,即预测值变为 \((x,y,\sqrt{w}, \sqrt{h})\)。

因为每个单元格预测多个边界框。然而其对应类别只有一个。

训练时,如果该单元格内的确存在指标,那么只抉择与 ground truth 的 IoU 最大的那个边界框来负责预测该指标,而其它边界框认为不存在指标。这样设置的一个后果将会使一个单元格对应的边界框更加专业化,其能够别离实用不同大小,不同高宽比的指标,从而晋升模型性能。

YOLO 算法预测时采纳 非极大值克制(NMS)。NMS 算法次要解决的是一个指标被屡次检测的问题,如图中的汽车检测,能够看到汽车被屡次检测,然而其实咱们心愿最初仅仅输入其中一个最好的预测框。

比方对于上图中的汽车,只想要地位最正那个检测后果。那么能够采纳 NMS 算法来实现这样的成果:

  • 首先从所有的检测框中找到置信度最大的那个框,而后挨个计算其与残余框的 IoU,如果 IoU 大于肯定阈值(重合度过高),那么就将该框(残余框)剔除;
  • 而后对残余的检测框反复上述过程,直到解决完所有的检测框。

1.4 YOLO 算法细节

1) bbox 生成步骤

① 输出图像分成 \(S \times S\) 的网格。当初是划分成了 \(7 \times 7\) 的,如果物品的中点落在某一个网格单元,这个网格单元将负责辨认出这个物体。

留神只是看该指标的中心点,而不是整体。比方 \(A(2, 3)\) 是狗的中心点,那么 \(A\) 就负责来负责预测狗

② 每个网格本身也要预测 \(n\) 个边界框 bounding box 和边界框的置信度 confidence。论文中 \(b=2\)

边界框 蕴含四个数据 \(x\),\(y\),\(w\),\(h\):\((x,y)\) 框核心是绝对于网格单元的坐标,\(w\) 和 \(h\) 是框相当于整幅图的宽和高。

置信度 有两局部形成:含有物体的概率和边界框笼罩的准确性。

$$
\operatorname{Pr}(\text {Object}) \ast \mathrm{IoU}_{\text {pred}}^{\text {truth}}
$$

  • \(IoU\) 交并比
  • \(Pr\) 就是概率 \(p\)

如果有 object 落在一个 grid cell 里,第一项取 \(1\),否则取 \(0\)。第二项是预测的 bounding box 和理论的 ground truth 之间的 IoU 值。

每个边界框又要预测五个数值:\(x\), \(y\), \(w\), \(h\), \(confidence\)。\((x,y)\) 框核心是绝对于网格单元的坐标,\(w\) 和 \(h\) 是框相当于整幅图的宽和高,confidence 代表该框与 ground truth 之间的 IoU(框里没有物体分数间接为 \(0\))。

每个网格都要预测 \(b= 2\) 个框,49 个网格就会输入 98 个边界框,每个框还有它的分数。每个格子最多只预测出一个物体。当物体占画面比例较小,如图像中蕴含畜群或鸟群时,每个格子蕴含多个物体,但却只能检测出其中一个。这是 YOLO 办法的一个缺点。

最初每个单元格再预测他的 \(n\) 个边界框中的物体分类概率,有 \(c\) 个类别就要计算 \(c\) 个概率,和全连贯层相似。

$$
S \times S \times(B \ast 5+C)
$$

本文中有 20 个类别:即 \(7 \ast 7(2 \ast 5+20)\)

总结:每个方格要找到 \(n\) 个边界框,而后还要计算每个边界框的置信度,最初再计算每个边界框的分类的可能性。

生成的 bounding box 的 \((x, y)\) 被限度在 cell 里, 但长宽是没有限度的(即生成的 bounding box 可超出 cell 的边界)

2) 损失函数

YOLO V1 的损失函数就是把三类损失加权求和,用的也都是简略的平方差:

边缘中心点误差

$$
\lambda_{\text {coord}} \sum_{i=0}^{S^{2}} \sum_{j=0}^{B} \mathbb{1}_{i j}^{\text {obj}}\left[\left(x_{i}-\hat{x}_{i}\right)^{2}+\left(y_{i}-\hat{y}_{i}\right)^{2}\right]
$$

边框宽度、高度误差

$$
+\lambda_{\text {coord}} \sum_{i=0}^{S^{2}} \sum_{j=0}^{B} \mathbb{1}_{i j}^{\text {obj}}\left[\left(\sqrt{w_{i}}-\sqrt{\hat{w}_{i}}\right)^{2}+\left(\sqrt{h_{i}}-\sqrt{\hat{h}_{i}}\right)^{2}\right]
$$

置信度误差(边框内有对象)

$$
+\sum_{i=0}^{S^{2}} \sum_{j=0}^{B} \mathbb{1}_{i j}^{\text {obj}}\left(C_{i}-\hat{C}_{i}\right)^{2}
$$

置信度误差(边框内无对象)

$$
+\lambda_{\text {noobj}} \sum_{i=0}^{S^{2}} \sum_{j=0}^{B} \mathbb{1}_{i j}^{\text {noobj}}\left(C_{i}-\hat{C}_{i}\right)^{2}
$$

对象分类误差

$$
+\sum_{i=0}^{S^{2}} \mathbb{1}_{i}^{\text {obj}} \sum_{c \in \text { classes}}\left(p_{i}(c)-\hat{p}_{i}(c)\right)^{2}
$$

其中

  • \(1_{i}^{o b j}\) 意思是网格 \(i\) 中存在对象。
  • \(1_{i j}^{o b j}\) 意思是网格的第 \(j\) 个 bounding box 中存在对象。
  • \(1_{i j}^{n o o b j}\) 意思是网格 \(i\) 的第 个 bounding box 中不存在对象。

损失函数计算是有条件的,是否存在对象对损失函数的计算有影响。

先要计算 地位误差:预测中点和理论中点之间的间隔,再计算 bbox 宽度和高度之间的差距,权重为 5 调高地位误差的权重

置信度误差:要思考两个状况:这个框里实际上有指标;这个框里没有指标,而且要成一个权重升高他的影响,调低不存在对象的 bounding box 的置信度误差的权重,论文中是 \(0.5\)

对象分类的误差:当该框中有指标时才计算,概率的二范数

3) YOLO V1 的缺点

不能解决小指标问题,YOLO 对边界框预测施加了严格的空间束缚,因为每个网格单元只能预测两个边界框,并且只能有一个类。这个空间束缚限度了咱们模型可能预测的邻近对象的数量。

YOLO V1 在解决以群体模式呈现的小对象时会有艰难,比方成群的鸟。

2. SSD 算法

SSD 算法全名是 Single Shot Multibox Detector,Single shot 指明了 SSD 算法属于 one-stage 办法,MultiBox 指明了 SSD 是多框预测。

SSD 算法在准确度和速度上都优于最原始的 YOLO 算法。比照 YOLO,SSD 次要改良了三点:多尺度特色图,利用卷积进行检测,设置先验框。

  • SSD 采纳 CNN 来间接进行检测,而不是像 YOLO 那样在全连贯层之后做检测。
  • SSD 提取了不同尺度的特色图来做检测,大尺度特色图(较靠前的特色图)能够用来检测小物体,而小尺度特色图(较靠后的特色图)用来检测大物体。
  • SSD 采纳了不同尺度和长宽比的先验框(在 Faster R-CNN 中叫做 anchor )。

上面开展解说 SSD 指标检测算法。

2.1 算法核心思想

1) 采纳多尺度特色图用于检测

所谓多尺度特色图,就是采纳大小不同的特色图进行检测。

CNN 网络个别后面的特色图比拟大,前面会逐步采纳 \(stride=2\) 的卷积或者 pool 来升高特色图大小,如下图所示,一个比拟大的特色图和一个比拟小的特色图,它们都用来做检测。

  • 这样做的益处是比拟大的特色图来用来检测绝对较小的指标,而小的特色图负责检测大指标。
  • \(8 \times 8\) 的特色图能够划分更多的单元,然而其每个单元的先验框尺度比拟小。

2) 利用卷积进行检测

与 YOLO 最初采纳全连贯层不同,SSD 间接采纳卷积对不同的特色图来进行提取检测后果。

对于形态为 \(m\times n \times p\) 的特色图,只须要采纳 \(3\times 3 \times p\) 这样比拟小的卷积核失去检测值。

3) 设置先验框

在 YOLO 中,每个单元预测多个边界框,然而其都是绝对这个单元自身(正方块),然而实在指标的形态是多变的,YOLO 须要在训练过程中自适应指标的形态。

SSD 借鉴了 Faster R-CNN 中 anchor 的理念,每个单元设置尺度或者长宽比不同的先验框,预测的 bbox 是以这些先验框为基准的,在肯定水平上缩小训练难度。

个别状况下,每个单元会设置多个先验框,其尺度和长宽比存在差别,如图所示,能够看到每个单元应用了 4 个不同的先验框,图片中猫和狗别离采纳最适宜它们形态的先验框来进行训练,前面会具体解说训练过程中的先验框匹配准则。

SSD 的检测值也与 YOLO 不太一样。对于每个单元的 每个先验框,其都输入一套独立的检测值,对应一个边界框,次要分为两个局部。

  • 第 1 局部是各个类别的置信度,值得注意的是 SSD 将背景也当做了一个非凡的类别,如果检测指标共有 \(c\) 个类别,SSD 其实须要预测 \(c+1\) 个置信度值,第一个置信度指的是不含指标或者属于背景的评分。在预测过程中,置信度最高的那个类别就是边界框所属的类别,特地地,当第一个置信度值最高时,示意边界框中并不蕴含指标。
  • 第 2 局部就是边界框的 location,蕴含 4 个值 \((cx, cy, w, h)\),别离示意边界框的核心坐标以及宽和高。然而,实在预测值其实只是边界框绝对于先验框的转换值。先验框地位用 \(d=(d^{cx}, d^{cy}, d^w, d^h)\) 示意,其对应边界框用 \(b=(b^{cx}, b^{cy}, b^w, b^h)\) 示意,那么边界框的预测值 \(l\) 其实是 \(b\) 绝对于 \(d\) 的转换值:

$$
l^{cx} = (b^{cx} – d^{cx})/d^w, \space l^{cy} = (b^{cy} – d^{cy})/d^h
$$

$$
l^{w} = \log(b^{w}/d^w), \space l^{h} = \log(b^{h}/d^h)
$$

习惯上,咱们称下面这个过程为边界框的编码(encode),预测时,你须要反向这个过程,即进行解码(decode),从预测值 \(l\) 中失去边界框的实在地位 \(b\):

$$
b^{cx}=d^w l^{cx} + d^{cx}, \space b^{cy}=d^y l^{cy} + d^{cy}
$$

$$
b^{w}=d^w \exp(l^{w}), \space b^{h}=d^h \exp(l^{h})
$$

2.2 SSD 网络结构

SSD 采纳 VGG16 作为根底模型,而后在 VGG16 的根底上新增了卷积层来取得更多的特色图以用于检测。SSD 的网络结构如下图所示

SSD 利用了多尺度的特色图做检测。模型的输出图片大小是 \(300 \times 300\)。

采纳 VGG16 做根底模型,首先 VGG16 是在 ILSVRC CLS-LOC 数据集上做预训练。

而后,别离将 VGG16 的全连贯层 fc6 和 fc7 转换成 \(3 \times 3\) 卷积层 conv6 和 \(1 \times 1\) 卷积层 conv7,同时将池化层 pool5 由原来的 \(stride=2\) 的 \(2\times 2\) 变成 \(stride=1\) 的 \(3\times 3\),为了配合这种变动,采纳了一种 Atrous Algorithm,就是 conv6 采纳扩张卷积(空洞卷积),在不减少参数与模型复杂度的条件下指数级扩充了卷积的视线,其应用扩张率(dilation rate)参数,来示意扩张的大小。

如下图所示:

  • (a)是一般的 \(3\times3\) 卷积,其视线就是 \(3\times3\)
  • (b)是扩张率为 2,此时视线变成 \(7\times7\)
  • (c)扩张率为 4 时,视线扩充为 \(15\times15\),然而视线的特色更稠密了。

Conv6 采纳 \(3\times3\) 大小但 \(dilation rate=6\) 的扩大卷积。而后移除 Dropout 层和 fc8 层,并新增一系列卷积层,在检测数据集上做 fine-tuning。

2.3 SSD 训练与预测

在训练过程中,首先要确定训练图片中的 ground truth(实在指标)与哪个先验框来进行匹配,与之匹配的先验框所对应的边界框将负责预测它。

YOLO 中:ground truth 的核心落在哪个单元格,该单元格中与其 IoU 最大的边界框负责预测它。

SSD 中:解决形式不一样,SSD 的先验框与 ground truth 有 2 个匹配准则。

  • 第 1 准则:对于图片中每个 ground truth,找到与其 IoU 最大的先验框,该先验框与其匹配,这样,能够保障每个 ground truth 肯定与某个先验框匹配。通常称与 ground truth 匹配的先验框为正样本,反之,若一个先验框没有与任何 ground truth 进行匹配,那么该先验框只能与背景匹配,就是负样本。

    • 然而,因为一个图片中 ground truth 是非常少的,而先验框却很多,如果仅按上述准则匹配,很多先验框会是负样本,正负样本极其不均衡,所以有下述第 2 准则。
  • 第 2 准则:对于残余的未匹配先验框,若某个 ground truth 的 \(\text{IoU}\) 大于某个阈值(个别是 0.5),那么该先验框也与这个 ground truth 进行匹配。这意味着某个 ground truth 可能与多个先验框匹配,这是能够的。然而反过来却不能够,因为一个先验框只能匹配一个 ground truth,如果多个 ground truth 与某个先验框 \(\text{IoU}\) 大于阈值,那么先验框只与 IoU 最大的那个 ground truth 进行匹配。

第 2 准则肯定在第 1 准则之后进行。

认真考虑一下这种状况,如果某个 ground truth 所对应最大 \(\text{IoU}\) 小于阈值,并且所匹配的先验框却与另外一个 ground truth 的 \(\text{IoU}\) 大于阈值,那么该先验框应该匹配谁,答案应该是前者,首先要确保每个 ground truth 肯定有一个先验框与之匹配

然而,这种状况存在的概率很小。因为先验框很多,某个 ground truth 的最大 \(\text{IoU}\) 必定大于阈值,所以可能只施行第二个准则既能够了。

上图为一个匹配示意图,其中绿色的 GT 是 ground truth,红色为先验框,FP 示意负样本,TP 示意正样本。

只管一个 ground truth 能够与多个先验框匹配,然而 ground truth 绝对先验框还是太少了,所以负样本绝对正样本会很多。

为了保障正负样本尽量均衡,SSD 采纳了 hard negative mining 算法,就是对负样本进行抽样,抽样时依照置信度误差(预测背景的置信度越小,误差越大)进行降序排列,选取误差的较大(置信度小)的 \(top-k\) 作为训练的负样本,以保障正负样本比例靠近 \(1:3\)。

3.YOLO V2

论文链接:https://openaccess.thecvf.com…
代码链接:https://github.com/longcw/YOL…

1) 算法简介

相比于 YOLO V1,YOLO V2 在精度、速度和分类数量上都有了很大的改良。YOLO V2 应用 DarkNet19 作为特征提取网络,该网络比 YOLO V2 所应用的 VGG-16 要更快。YOLO V2 应用指标分类和检测的联结训练技巧,联合 Word Tree 等办法,使得 YOLO V2 的检测品种裁减到了上千种,分类成果更好。

下图展现了 YOLO V2 相比于 YOLO V1 在进步检测精度上的改良策略。

2) 性能成果

YOLO V2 算法在 VOC 2007 数据集上的体现为 67 FPS 时,mAP 为 76.8,在 40FPS 时,mAP 为 78.6。

3) 毛病有余

YOLO V2 算法只有一条检测分支,且该网络不足对多尺度上下文信息的捕捉,所以对于不同尺寸的指标检测成果仍然较差,尤其是对于小指标检测问题。

4. RetinaNet

论文链接:https://openaccess.thecvf.com…
代码链接:https://github.com/yhenon/pyt…

1) 算法简介

只管一阶段检测算推理速度快,但精度上与二阶段检测算法相比还是有余。RetinaNet论文剖析了一阶段网络训练存在的类别不均衡问题,提出能依据 Loss 大小主动调节权重的 Focal loss,代替了规范的穿插熵损失函数,使得模型的训练更专一于艰难样本。同时,基于 FPN 设计了 RetinaNet,在精度和速度上都有不俗的体现。

2) 性能成果

RetinaNet 在保持高速推理的同时,领有与二阶段检测算法相媲美的精度(COCO \(mAP@.5=59.1\%\), \(mAP@[.5, .95]=39.1\%\))。

5.YOLO V3

论文链接:https://arxiv.org/pdf/1804.02…
代码链接:https://github.com/ultralytic…

1) 算法简介

相比于 YOLO V2,YOLO V3 将特征提取网络换成了 DarkNet53,对象分类用 Logistic 取代了 Softmax,并借鉴了 FPN 思维采纳三条分支(三个不同尺度 / 不同感触野的特色图)去检测具备不同尺寸的对象。

2) 性能成果

YOLO V3 在 VOC 数据集,Titan X 上解决 \(608 \times 608\) 图像速度达到 20FPS,在 COCO 的测试数据集上 \(mAP@0.5\) 达到 \(57.9\%\)。其精度比 SSD 高一些,比 Faster RCNN 相比略有逊色(简直持平),比 RetinaNet 差,但速度是 SSD、RetinaNet 和 Faster RCNN 至多 2 倍以上,而简化后的 YOLO V3 tiny 能够更快。

3) 毛病有余

YOLO V3 采纳 MSE 作为边框回归损失函数,这使得 YOLO V3 对指标的定位并不精准,之后呈现的 IOU,GIOU,DIOU 和 CIOU 等一系列边框回归损失大大改善了 YOLO V3 对指标的定位精度。

6.YOLO V4

论文链接:https://arxiv.org/pdf/2004.10934
代码链接:https://github.com/Tianxiaomo…

1) 算法简介

相比于 YOLO V4,YOLO V4 在输出端,引入了 Mosaic 数据加强、cmBN、SAT 自反抗训练;在特征提取网络上,YOLO V4 将各种新的形式联合起来,包含 CSPDarknet53,Mish 激活函数,Dropblock;在检测头中,引入了 SPP 模块,借鉴了 FPN+PAN 构造;在预测阶段,采纳了 CIOU 作为网络的边界框损失函数,同时将 NMS 换成了 DIOU_NMS 等等。总体来说,YOLO V4 具备极大的工程意义,将近年来深度学习畛域最新钻研的 tricks 都引入到了 YOLO V4 做验证测试,在 YOLO V3 的根底上更进一大步。

2) 性能成果

YOLO V4 在 COCO 数据集上达到了 \(43.5\%AP\)(\(65.7\% AP50\)),在 Tesla V100 显卡上实现了 65 fps 的实时性能,下图展现了在 COCO 检测数据集上 YOLO V4 和其它 SOTA 检测算法的性能比照。

7.YOLO V5

代码链接:https://github.com/ultralytic…

1) 算法简介

YOLO V5 与 YOLO V4 有点类似,都大量整合了计算机视觉畛域的前沿技巧,从而显著改善了 YOLO 对指标的检测性能。相比于 YOLO V4,YOLO V5 在性能上略微逊色,但其灵活性与速度上远强于 YOLO V4,而且在模型的疾速部署上也具备极强劣势。

2) 性能成果

如下图展现了在 COCO 检测数据集上 YOLO V5 和其它 SOTA 检测算法的性能比照。

8. 举荐学习

能够点击 B 站 查看视频的【双语字幕】版本

<iframe
src=”http://player.bilibili.com/player.html?aid=759478950&bvid=BV1g64y1B7m7&cid=377496779&page=11″
width=”100%”
height=500
scrolling=”no”
frameborder=0>
</iframe>

  • 【课程学习指南】斯坦福 CS231n | 深度学习与计算机视觉
  • 【字幕 + 材料下载】斯坦福 CS231n | 深度学习与计算机视觉 (2017·全 16 讲)
  • 【CS231n 进阶课】密歇根 EECS498 | 深度学习与计算机视觉
  • 【深度学习教程】吴恩达专项课程 · 全套笔记解读
  • 【Stanford 官网】CS231n: Deep Learning for Computer Vision

斯坦福 CS231n 全套解读

  • 深度学习与 CV 教程(1) | CV 引言与根底
  • 深度学习与 CV 教程(2) | 图像分类与机器学习根底
  • 深度学习与 CV 教程(3) | 损失函数与最优化
  • 深度学习与 CV 教程(4) | 神经网络与反向流传
  • 深度学习与 CV 教程(5) | 卷积神经网络
  • 深度学习与 CV 教程(6) | 神经网络训练技巧 (上)
  • 深度学习与 CV 教程(7) | 神经网络训练技巧 (下)
  • 深度学习与 CV 教程(8) | 常见深度学习框架介绍
  • 深度学习与 CV 教程(9) | 典型 CNN 架构 (Alexnet, VGG, Googlenet, Restnet 等)
  • 深度学习与 CV 教程(10) | 轻量化 CNN 架构 (SqueezeNet, ShuffleNet, MobileNet 等)
  • 深度学习与 CV 教程(11) | 循环神经网络及视觉利用
  • 深度学习与 CV 教程(12) | 指标检测 (两阶段, R-CNN 系列)
  • 深度学习与 CV 教程(13) | 指标检测 (SSD, YOLO 系列)
  • 深度学习与 CV 教程(14) | 图像宰割 (FCN, SegNet, U-Net, PSPNet, DeepLab, RefineNet)
  • 深度学习与 CV 教程(15) | 视觉模型可视化与可解释性
  • 深度学习与 CV 教程(16) | 生成模型 (PixelRNN, PixelCNN, VAE, GAN)
  • 深度学习与 CV 教程(17) | 深度强化学习 (马尔可夫决策过程, Q-Learning, DQN)
  • 深度学习与 CV 教程(18) | 深度强化学习 (梯度策略, Actor-Critic, DDPG, A3C)

ShowMeAI 系列教程举荐

  • 大厂技术实现:举荐与广告计算解决方案
  • 大厂技术实现:计算机视觉解决方案
  • 大厂技术实现:自然语言解决行业解决方案
  • 图解 Python 编程:从入门到精通系列教程
  • 图解数据分析:从入门到精通系列教程
  • 图解 AI 数学根底:从入门到精通系列教程
  • 图解大数据技术:从入门到精通系列教程
  • 图解机器学习算法:从入门到精通系列教程
  • 机器学习实战:手把手教你玩转机器学习系列
  • 深度学习教程:吴恩达专项课程 · 全套笔记解读
  • 自然语言解决教程:斯坦福 CS224n 课程 · 课程带学与全套笔记解读
  • 深度学习与计算机视觉教程:斯坦福 CS231n · 全套笔记解读

正文完
 0