深度学习与计算机视觉教程(13) | 目标检测 (SSD,YOLO系列)(CV通关指南·完结🎉)

深度学习与计算机视觉教程(13) | 目标检测 (SSD,YOLO系列)(CV通关指南·完结🎉)

深度学习与计算机视觉教程(13) | 目标检测 (SSD,YOLO系列)(CV通关指南完结)

继续创作,加快生长!这是我参与「日新方案 6 月更文应战」的第11天,点击检查活动详情

  • 作者:韩信子@ShowMeAI
  • 教程地址:www.showmeai.tech/tutorials/3…
  • 本文地址:www.showmeai.tech/article-det…
  • 声明:版权一切,转载请联络平台与作者并注明出处
  • 保藏ShowMeAI检查更多精彩内容

深度学习与计算机视觉教程(13) | 目标检测 (SSD,YOLO系列)(CV通关指南完结)

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


导言

方针检测 ( Object Detection )是核算机视觉范畴非常重要的使命,方针检测模型要完结「猜测出各个物体的鸿沟框(bounding box)」和「给出每个物体的分类概率」两个子使命。

深度学习与计算机视觉教程(13) | 目标检测 (SSD,YOLO系列)(CV通关指南完结)

一般状况下,在对一张图片进行方针检测后,会得到许多物体的鸿沟框和对应的置信度(代表其包含物体的或许性巨细)。

深度学习与计算机视觉教程(13) | 目标检测 (SSD,YOLO系列)(CV通关指南完结)

方针检测算法首要集中在 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 到 448448448 \times 448,然后送入 CNN 网络,最终处理网络猜测成果得到检测的方针。比较 R-CNN 算法,其是一个统一的结构,其速度更快,而且 YOLO 的练习进程也是 端到端 / end-to-end 的。所谓的 YOLO 全名是 You Only Look Once,意思是算法只需求一次的推断运算

深度学习与计算机视觉教程(13) | 目标检测 (SSD,YOLO系列)(CV通关指南完结)

比较上述滑动窗口算法,YOLO 算法不再是窗口滑动,而是直接将原始图片切割成互不重合的小方块,然后通过卷积得到平等 size 的特征图,依据上面的剖析,能够认为特征图的每个元素也是对应原始图片的一个小方块,能够用每个元素来能够猜测那些中心点在该小方块内的方针。

YOLO算法的CNN网络将输入的图片切割成 NNN\times N 网格,然后每个单元格担任去检测那些中心点落在该格子内的方针

深度学习与计算机视觉教程(13) | 目标检测 (SSD,YOLO系列)(CV通关指南完结)

如图所示,能够看到,狗这个方针的中心落在左下角一个单元格内,那么该单元格担任猜测这个狗。每个单元格会猜测 BB 个鸿沟框(bounding box)以及鸿沟框的置信度(confidence score)。

所谓置信度其实包含两个方面,一是这个鸿沟框含有方针的或许性巨细,二是这个鸿沟框的准确度

前者记为 P(object)P(object),当该鸿沟框是背景时(即不包含方针时),P(object)=0P(object)=0。而当该鸿沟框包含方针时,P(object)=1P(object)=1

鸿沟框的准确度能够用猜测框与 ground truth 的 IoU (交并比)来表征,记为 IoUpredtruth\text{IoU}^{truth}_{pred}。因此置信度能够界说为 Pr(object)∗IoUpredtruthPr(object) \ast \text{IoU}^{truth}_{pred}

鸿沟框的巨细与方位能够用 4 个值来表征: (x,y,w,h)(x, y,w,h),其间 (x,y)(x,y) 是鸿沟框的中心坐标,而 wwhh 是鸿沟框的宽与高。

还有一点要注意,中心坐标的猜测值 (x,y)(x,y) 是相关于每个单元格左上角坐标点的偏移值,而且单位是相关于单元格巨细的,单元格的坐标界说如上方图所示。

鸿沟框的 wwhh 猜测值是相关于整个图片的宽与高的份额,因此理论上4个元素的巨细应该在 [0,1][0,1] 范围。这样,每个鸿沟框的猜测值实际上包含5个元素: (x,y,w,h,c)(x,y,w,h,c),其间前4个表征鸿沟框的巨细与方位,最终一个值是置信度。

除此之外,每一个单元格猜测出 CC 个类别概率值,其表征的是由该单元格担任猜测的鸿沟框中的方针归于各个类别的概率。这些概率值其实是在各个鸿沟框置信度下类别的条件概率,即 Pr(classi∣object)Pr(class_{i}|object)

值得注意的是,不管一个单元格猜测多少个鸿沟框,其只猜测一组类别概率值。一起,咱们能够核算出各个鸿沟框的类别置信度 :

Pr(classi∣object)Pr(object)IoUpredtruth=Pr(classi)∗IoUpredtruthPr(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个全衔接层,如下图所示。

深度学习与计算机视觉教程(13) | 目标检测 (SSD,YOLO系列)(CV通关指南完结)

关于卷积层,首要运用 111 \times 1 卷积来做通道数降低,用 333 \times 3 卷积提取特征。关于卷积层和全衔接层,选用 Leaky ReLU 激活函数: max(x,0.1x)max(x, 0.1x),最终一层却选用线性激活函数。

1.3 YOLO练习与猜测

在练习之前,先在 ImageNet 上进行预练习,其预练习的分类模型选用上图中前20个卷积层,然后添加一个 average-pool 层和全衔接层。

在预练习完毕之后之后,在预练习得到的 20 层卷积层之上加上随机初始化的 4 个卷积层和 2 个全衔接层进行 fine-tuning。因为检测使命一般需求更高清的图片,所以将网络的输入从 224224224 \times 224 添加到了 448448448 \times 448

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

深度学习与计算机视觉教程(13) | 目标检测 (SSD,YOLO系列)(CV通关指南完结)

YOLO 算法将方针检测问题看作回归问题,所以选用的是 MSE loss,对不同的部分选用了不同的权重值。首要区别定位差错和分类差错。

  • 关于定位差错,即鸿沟框坐标猜测差错,选用较大的权重 =5\lambda=5
  • 然后其区别不包含方针的鸿沟框与含有方针的鸿沟框的置信度,关于前者,选用较小的权重值 =0.5\lambda =0.5。其它权重值均设为 11
  • 然后选用均方差错,其平等对待巨细不同的鸿沟框,可是实际上较小的鸿沟框的坐标差错应该要比较大的鸿沟框要更敏感。为了确保这一点,将网络的鸿沟框的宽与高猜测改为对其平方根的猜测,即猜测值变为 (x,y,w,h)(x,y,\sqrt{w}, \sqrt{h})

因为每个单元格猜测多个鸿沟框。可是其对应类别只有一个。

练习时,假如该单元格内的确存在方针,那么只挑选与 ground truth 的 IoU 最大的那个鸿沟框来担任猜测该方针,而其它鸿沟框认为不存在方针。这样设置的一个成果将会使一个单元格对应的鸿沟框更加专业化,其能够分别适用不同巨细,不同高宽比的方针,然后提高模型功能。

深度学习与计算机视觉教程(13) | 目标检测 (SSD,YOLO系列)(CV通关指南完结)

YOLO算法猜测时选用非极大值按捺 (NMS) 。NMS 算法首要处理的是一个方针被屡次检测的问题,如图中的轿车检测,能够看到轿车被屡次检测,可是其实咱们期望最终只是输出其间一个最好的猜测框。

比方关于上图中的轿车,只想要方位最正那个检测成果。那么能够选用 NMS 算法来完成这样的作用:

  • 首要从一切的检测框中找到置信度最大的那个框,然后挨个核算其与剩下框的 IoU,假如 IoU 大于必定阈值(重合度过高),那么就将该框(剩下框)除掉;
  • 然后对剩下的检测框重复上述进程,直到处理完一切的检测框。

1.4 YOLO算法细节

1) bbox生成进程

① 输入图画分红 SSS \times S 的网格。现在是划分红了 777 \times 7 的,假如物品的中点落在某一个网格单元,这个网格单元将担任识别出这个物体。

深度学习与计算机视觉教程(13) | 目标检测 (SSD,YOLO系列)(CV通关指南完结)

注意只是看该方针的中心点,而不是全体。比方 A(2,3)A(2, 3) 是狗的中心点,那么 AA 就担任来担任猜测狗

② 每个网格自身也要猜测 nn 个鸿沟框 bounding box 和鸿沟框的置信度 confidence。论文中 b=2b=2

鸿沟框包含四个数据 xxyywwhh(x,y)(x,y) 框中心是相关于网格单元的坐标,wwhh 是框相当于整幅图的宽和高。

置信度有两部分构成:含有物体的概率和鸿沟框覆盖的准确性。

Pr⁡(Object)∗IoUpredtruth\operatorname{Pr}(\text {Object}) \ast \mathrm{IoU}_{\text {pred }}^{\text {truth }}
  • IoU IoU 交并比
  • PrPr 便是概率 pp

假如有 object 落在一个 grid cell 里,第一项取 11,否则取 00。 第二项是猜测的 bounding box 和实际的 ground truth 之间的 IoU 值。

每个鸿沟框又要猜测五个数值:xx, yy, ww, hh, confidenceconfidence(x,y)(x,y) 框中心是相关于网格单元的坐标,wwhh 是框相当于整幅图的宽和高,confidence 代表该框与 ground truth 之间的 IoU (框里没有物体分数直接为 00)。

深度学习与计算机视觉教程(13) | 目标检测 (SSD,YOLO系列)(CV通关指南完结)

每个网格都要猜测 b=2b= 2 个框,49 个网格就会输出 98 个鸿沟框,每个框还有它的分数。每个格子最多只猜测出一个物体。当物体占画面份额较小,如图画中包含畜群或鸟群时,每个格子包含多个物体,但却只能检测出其间一个。这是 YOLO 办法的一个缺陷。

最终每个单元格再猜测他的 nn 个鸿沟框中的物体分类概率,有 cc 个类别就要核算 cc 个概率,和全衔接层类似。

SS(B∗5+C)S \times S \times(B \ast 5+C)

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

总结:每个方格要找到 nn 个鸿沟框,然后还要核算每个鸿沟框的置信度,最终再核算每个鸿沟框的分类的或许性。

深度学习与计算机视觉教程(13) | 目标检测 (SSD,YOLO系列)(CV通关指南完结)

生成的 bounding box 的 (x,y)(x, y) 被约束在 cell 里, 但长宽是没有约束的(即生成的 bounding box 可超出 cell 的鸿沟)

2) 丢失函数

YOLO V1 的丢失函数便是把三类丢失加权求和,用的也都是简单的平方差:

边际中心点差错

coord∑i=0S2∑j=0B1ijobj[(xi−xi)2+(yi−yi)2]\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]

边框宽度、高度差错

+coord∑i=0S2∑j=0B1ijobj[(wi−wi)2+(hi−hi)2]+\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]

置信度差错(边框内有方针)

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

置信度差错(边框内无方针)

+noobj∑i=0S2∑j=0B1ijnoobj(Ci−Ci)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}

方针分类差错

+∑i=0S21iobj∑c∈classes(pi(c)−pi(c))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}

其间

  • 1iobj1_{i}^{o b j} 意思是网格 ii 中存在方针。
  • 1ijobj1_{i j}^{o b j} 意思是网格的第 jj 个 bounding box 中存在方针。
  • 1ijnoobj1_{i j}^{n o o b j} 意思是网格 ii 的第 个 bounding box 中不存在方针。

丢失函数核算是有条件的,是否存在方针对丢失函数的核算有影响。

先要核算方位差错:猜测中点和实际中点之间的间隔,再核算 bbox 宽度和高度之间的距离,权重为 5 调高方位差错的权重

置信度差错:要考虑两个状况:这个框里实际上有方针;这个框里没有方针,而且要成一个权重降低他的影响,调低不存在方针的 bounding box 的置信度差错的权重,论文中是 0.50.5

方针分类的差错:当该框中有方针时才核算,概率的二范数

深度学习与计算机视觉教程(13) | 目标检测 (SSD,YOLO系列)(CV通关指南完结)

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 算法中心思维

深度学习与计算机视觉教程(13) | 目标检测 (SSD,YOLO系列)(CV通关指南完结)

1) 选用多标准特征图用于检测

所谓多标准特征图,便是选用巨细不同的特征图进行检测。

CNN 网络一般前面的特征图比较大,后面会逐渐选用 stride=2stride=2 的卷积或许 pool 来降低特征图巨细,如下图所示,一个比较大的特征图和一个比较小的特征图,它们都用来做检测。

  • 这样做的好处是比较大的特征图来用来检测相对较小的方针,而小的特征图担任检测大方针。
  • 888 \times 8 的特征图能够划分更多的单元,可是其每个单元的先验框标准比较小。

深度学习与计算机视觉教程(13) | 目标检测 (SSD,YOLO系列)(CV通关指南完结)

2) 利用卷积进行检测

与 YOLO 最终选用全衔接层不同,SSD 直接选用卷积对不同的特征图来进行提取检测成果。

关于形状为 mnpm\times n \times p 的特征图,只需求选用 33p3\times 3 \times p 这样比较小的卷积核得到检测值。

深度学习与计算机视觉教程(13) | 目标检测 (SSD,YOLO系列)(CV通关指南完结)

3) 设置先验框

在 YOLO 中,每个单元猜测多个鸿沟框,可是其都是相对这个单元本身(正方块),可是实在方针的形状是多变的,YOLO 需求在练习进程中自适应方针的形状。

SSD 学习了Faster R-CNN 中 anchor 的理念,每个单元设置标准或许长宽比不同的先验框,猜测的bbox是以这些先验框为基准的,在必定程度上削减练习难度。

深度学习与计算机视觉教程(13) | 目标检测 (SSD,YOLO系列)(CV通关指南完结)

一般状况下,每个单元会设置多个先验框,其标准和长宽比存在差异,如图所示,能够看到每个单元运用了 4 个不同的先验框,图片中猫和狗分别选用最适合它们形状的先验框来进行练习,后面会具体解说练习进程中的先验框匹配准则。

SSD 的检测值也与 YOLO 不太一样。关于每个单元的每个先验框,其都输出一套独立的检测值,对应一个鸿沟框,首要分为两个部分。

  • 第1部分是各个类别的置信度,值得注意的是 SSD 将背景也当做了一个特别的类别,假如检测方针共有 cc 个类别,SSD 其实需求猜测 c+1c+1 个置信度值,第一个置信度指的是不含方针或许归于背景的评分。在猜测进程中,置信度最高的那个类别便是鸿沟框所属的类别,特别地,当第一个置信度值最高时,表明鸿沟框中并不包含方针。
  • 第2部分便是鸿沟框的location,包含4个值 (cx,cy,w,h)(cx, cy, w, h),分别表明鸿沟框的中心坐标以及宽和高。然而,实在猜测值其实只是鸿沟框相关于先验框的转换值。先验框方位用 d=(dcx,dcy,dw,dh)d=(d^{cx}, d^{cy}, d^w, d^h) 表明,其对应鸿沟框用 b=(bcx,bcy,bw,bh)b=(b^{cx}, b^{cy}, b^w, b^h) 表明,那么鸿沟框的猜测值 ll 其实是 bb 相关于 dd 的转换值:
lcx=(bcx−dcx)/dw,lcy=(bcy−dcy)/dhl^{cx} = (b^{cx} – d^{cx})/d^w, \space l^{cy} = (b^{cy} – d^{cy})/d^h
lw=log⁡(bw/dw),lh=log⁡(bh/dh)l^{w} = \log(b^{w}/d^w), \space l^{h} = \log(b^{h}/d^h)

习惯上,咱们称上面这个进程为鸿沟框的编码(encode),猜测时,你需求反向这个进程,即进行解码(decode),从猜测值 ll 中得到鸿沟框的实在方位 bb

bcx=dwlcx+dcx,bcy=dylcy+dcyb^{cx}=d^w l^{cx} + d^{cx}, \space b^{cy}=d^y l^{cy} + d^{cy}
bw=dwexp⁡(lw),bh=dhexp⁡(lh)b^{w}=d^w \exp(l^{w}), \space b^{h}=d^h \exp(l^{h})

2.2 SSD 网络结构

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

SSD 利用了多标准的特征图做检测。模型的输入图片巨细是 300300300 \times 300

深度学习与计算机视觉教程(13) | 目标检测 (SSD,YOLO系列)(CV通关指南完结)

选用 VGG16 做根底模型,首要VGG16是在 ILSVRC CLS-LOC 数据集上做预练习。

然后,分别将 VGG16 的全衔接层 fc6 和 fc7 转换成 333 \times 3 卷积层 conv6 和 111 \times 1 卷积层 conv7,一起将池化层 pool5 由原来的 stride=2stride=2222\times 2 变成 stride=1stride=1333\times 3,为了配合这种变化,选用了一种 Atrous Algorithm,便是 conv6 选用扩张卷积(空泛卷积),在不添加参数与模型复杂度的条件下指数级扩大了卷积的视界,其运用扩张率(dilation rate)参数,来表明扩张的巨细。

如下图所示:

  • (a)是一般的 333\times3 卷积,其视界便是 333\times3
  • (b)是扩张率为2,此刻视界变成 777\times7
  • (c)扩张率为4时,视界扩大为 151515\times15,可是视界的特征更稀少了。

Conv6 选用 333\times3 巨细但 dilationrate=6dilation rate=6 的扩展卷积。然后移除 Dropout 层和 fc8 层,并新增一系列卷积层,在检测数据集上做 fine-tuning。

深度学习与计算机视觉教程(13) | 目标检测 (SSD,YOLO系列)(CV通关指南完结)

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 的 IoU\text{IoU} 大于某个阈值(一般是0.5),那么该先验框也与这个 ground truth 进行匹配。这意味着某个 ground truth 或许与多个先验框匹配,这是能够的。可是反过来却不能够,因为一个先验框只能匹配一个 ground truth,假如多个 ground truth 与某个先验框 IoU\text{IoU} 大于阈值,那么先验框只与 IoU 最大的那个 ground truth 进行匹配。

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

仔细考虑一下这种状况,假如某个 ground truth 所对应最大 IoU\text{IoU} 小于阈值,而且所匹配的先验框却与别的一个 ground truth 的 IoU\text{IoU} 大于阈值,那么该先验框应该匹配谁,答案应该是前者,首要要确保每个 ground truth 必定有一个先验框与之匹配

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

深度学习与计算机视觉教程(13) | 目标检测 (SSD,YOLO系列)(CV通关指南完结)

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

虽然一个 ground truth 能够与多个先验框匹配,可是 ground truth 相对先验框仍是太少了,所以负样本相对正样本会许多。

为了确保正负样本尽量平衡,SSD 选用了hard negative mining算法,便是对负样本进行抽样,抽样时依照置信度差错(猜测背景的置信度越小,差错越大)进行降序摆放,选取差错的较大(置信度小)的 top−ktop-k 作为练习的负样本,以确保正负样本份额挨近 1:31:3

3.YOLO V2

论文链接:openaccess.thecvf.com/content_cvp… 代码链接:github.com/longcw/YOLO…

深度学习与计算机视觉教程(13) | 目标检测 (SSD,YOLO系列)(CV通关指南完结)

1) 算法简介

比较于 YOLO V1,YOLO V2 在精度、速度和分类数量上都有了很大的改进。YOLO V2运用DarkNet19作为特征提取网络,该网络比 YOLO V2 所运用的 VGG-16 要更快。YOLO V2运用方针分类和检测的联合练习技巧,结合Word Tree等办法,使得 YOLO V2的检测种类扩充到了上千种,分类作用更好。

下图展现了 YOLO V2 比较于 YOLO V1 在提高检测精度上的改进战略。

深度学习与计算机视觉教程(13) | 目标检测 (SSD,YOLO系列)(CV通关指南完结)

2) 功能作用

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

3) 缺陷缺乏

YOLO V2 算法只有一条检测分支,且该网络缺少对多标准上下文信息的捕获,所以关于不同标准的方针检测作用依然较差,尤其是关于小方针检测问题。

4. RetinaNet

论文链接:openaccess.thecvf.com/content_ICC… 代码链接:github.com/yhenon/pyto…

深度学习与计算机视觉教程(13) | 目标检测 (SSD,YOLO系列)(CV通关指南完结)

1) 算法简介

虽然一阶段检测算推理速度快,但精度上与二阶段检测算法比较仍是缺乏。RetinaNet论文剖析了一阶段网络练习存在的类别不平衡问题,提出能依据 Loss 巨细自动调节权重的 Focal loss,替代了标准的交叉熵丢失函数,使得模型的练习更专心于困难样本。一起,依据 FPN 规划了 RetinaNet,在精度和速度上都有不俗的体现。

2) 功能作用

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

5.YOLO V3

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

深度学习与计算机视觉教程(13) | 目标检测 (SSD,YOLO系列)(CV通关指南完结)

1) 算法简介

比较于 YOLO V2,YOLO V3 将特征提取网络换成了 DarkNet53,方针分类用 Logistic 取代了 Softmax,并学习了 FPN 思维选用三条分支(三个不同标准/不同感受野的特征图)去检测具有不同标准的方针。

2) 功能作用

YOLO V3 在 VOC 数据集,Titan X 上处理 608608608 \times 608 图画速度到达 20FPS,在 COCO 的测试数据集上 mAP@0.5mAP@0.5 到达 57.9%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

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

深度学习与计算机视觉教程(13) | 目标检测 (SSD,YOLO系列)(CV通关指南完结)

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%AP43.5\%AP65.7%AP5065.7\% AP50),在 Tesla V100 显卡上完成了 65 fps 的实时功能,下图展现了在 COCO 检测数据集上 YOLO V4 和其它 SOTA 检测算法的功能比照。

深度学习与计算机视觉教程(13) | 目标检测 (SSD,YOLO系列)(CV通关指南完结)

7.YOLO V5

代码链接:github.com/ultralytics…

深度学习与计算机视觉教程(13) | 目标检测 (SSD,YOLO系列)(CV通关指南完结)

1) 算法简介

YOLO V5 与 YOLO V4 有点类似,都很多整合了核算机视觉范畴的前沿技巧,然后显著改进了 YOLO 对方针的检测功能。比较于 YOLO V4,YOLO V5 在功能上稍微差劲,但其灵活性与速度上远强于 YOLO V4,而且在模型的快速布置上也具有极强优势。

2) 功能作用

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

深度学习与计算机视觉教程(13) | 目标检测 (SSD,YOLO系列)(CV通关指南完结)

8.引荐学习

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

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

ShowMeAI 斯坦福 CS231n 全套解读

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

ShowMeAI 系列教程引荐

  • 大厂技能完成:引荐与广告核算处理方案
  • 大厂技能完成:核算机视觉处理方案
  • 大厂技能完成:自然语言处理职业处理方案
  • 图解Python编程:从入门到通晓系列教程
  • 图解数据剖析:从入门到通晓系列教程
  • 图解AI数学根底:从入门到通晓系列教程
  • 图解大数据技能:从入门到通晓系列教程
  • 图解机器学习算法:从入门到通晓系列教程
  • 机器学习实战:手把手教你玩转机器学习系列
  • 深度学习教程:吴恩达专项课程 全套笔记解读
  • 自然语言处理教程:斯坦福CS224n课程 课程带学与全套笔记解读
  • 深度学习与核算机视觉教程:斯坦福CS231n 全套笔记解读

深度学习与计算机视觉教程(13) | 目标检测 (SSD,YOLO系列)(CV通关指南完结)