政哥哥哥哥哥哥
经典的目标检测网络RCNN系列分为两步,目标proposal和目标分类。而Faster-RCNN中把目标proposal和目标分类作为一个网络的两个分支分别输出,大大缩短了计算时间。而Yolo系列则把这两个分支都省了,只用一个网络同时输出目标的位置和分类。
输入:一张图片
输出:把每张图片分成SxS个方格,对每个方格,输出一个B*5+C维的数组。其中B是该方格预测方框的数目,包含(x,y,w,h,s),s表示方框的置信度,C表示需要预测的类别数。
在YOLO中,S=7, B=2,PASCAL VOC有20类,所以C=20,B*5+C=30。
YOLO网络结构主要分为两个部分,第一部分是特征提取网络,主要是为了提取物体的通用特征,一般在ImageNet上进行预训练;第二部分是后处理网络,目的是回归出待检测物体的坐标和类别。
第一个版本的YOLO的特征提取网络有24个卷积层和2个全连接层。网络结构如下图。
可以看出,这个网络中主要采用了1x1卷积后跟着3x3卷积的方式。
特征提取网络采用了前20个卷积层,加一个avg-pooling层和一个全连接层,对ImageNet2012进行分类,top-5正确率为88%,输入分辨率为224x224。
检测时,将输入分辨率改为448x448,因为网络结构是全卷积的,所以输入分辨率可以改变,整个网络输出为7x7x30维的tensor。
接下来要重点将一下这个损失函数。
用网络直接回归物体的坐标是很难的,这里对要回归的物体的坐标进行了一些转化。物体方框的长w和宽h分别除以图片的长和宽;x和y坐标分别表示对应方格坐标的偏移,分别除以方格的长和宽;它们都在0到1之间。
损失函数分为多个部分:
其中,其中i表示第i个方格,j表示该方格预测出的第j个方框。 表示物体obj的实际方框与第i个方格有 对应关系 ,即obj的中心落在第i个方格中; 表示物体obj的实际方框与第i个方格预测的第j个方框有 对应关系 ,即obj的中心落在第i个方格中,并与它的第j个预测方框的IOU最大。
可以看到损失函数包括5个部分。第一部分是x,y坐标;第二部分是w,h,采用根号使得小方框size变化的损失比大方框size变化的损失大;第三部分是方框置信度损失,回归目标是预测方框与实际方框的IOU值;前三部分都只在预测方框和实际方框有对应关系时才计算loss;第四部分是没有对应物体的方框置信度损失,实际的置信度都是0;第五部分是分类损失,当方格与物体有对应关系时,才计算分类损失。
因为在图片中很多方格都不包含物体,使得方格预测方框的置信分数趋于0。所以对包含物体的方格加大权重,对不包含物体的方格减小权重。论文中有 。
YOLO-v2在YOLO-v1的版本上做了一些改进。
主要利用了NIN的思想。有19个卷积层和5个maxpooling层,实现了72.9%的top-1正确率和91.2%的top-5正确率。在448x448的分辨率上,实现了76.5%的top-1正确率,和93.3%的top-5正确率。网络结构如下图所示。
修改成detection网络时,删除了最后的卷积层,添加了3个3x3x1024的卷积层,和一个1x1x125的卷积层,在最后的3x3x512层和导数第二层之间添加了一个paththrough进行特征concat。
开始学习率是0.001,在60和90个epoch时乘以0.1。
另外,YOLO-v2利用WordTree,将分类和检测任务进行联合训练,对于没有方框标注的物体也能预测出其方框,能够对词典中9000个概念进行预测。YOLO-v2也叫做YOLO9000。
YOLO-v3在YOLO-v2的基础上进行了一些改进。
Darknet-53和Resnet-152正确率相同,但速度是2倍。
总的来说,我觉得,YOLO的发展完全展现了汲取众家之长的力量。还是要多看paper,以上。
参考文献: [1] Redmon, Joseph, et al. "You only look once: Unified, real-time object detection." Proceedings of the IEEE conference on computer vision and pattern recognition. 2016. [2] Redmon J, Farhadi A. YOLO9000: better, faster, stronger[J]. arXiv preprint, 2017. [3] Redmon, Joseph, and Ali Farhadi. "Yolov3: An incremental improvement." arXiv preprint arXiv:1804.02767 (2018).
caroline2900
作为计算机视觉三大任务(图像分类、目标检测、图像分割)之一,目标检测任务在于从图像中定位并分类感兴趣的物体。传统视觉方案涉及霍夫变换、滑窗、特征提取、边界检测、模板匹配、哈尔特征、DPM、BoW、传统机器学习(如随机森林、AdaBoost)等技巧或方法。在卷积神经网络的加持下,目标检测任务在近些年里有了长足的发展。其应用十分广泛,比如在自动驾驶领域,目标检测用于无人车检测其他车辆、行人或者交通标志牌等物体。
目标检测的常用框架可以分为两类,一类是 two-stage/two-shot 的方法,其特点是将兴趣区域检测和分类分开进行,比较有代表性的是R-CNN,Fast R-CNN,Faster R-CNN;另一类是 one-stage/one-shot 的方法,用一个网络同时进行兴趣区域检测和分类,以YOLO(v1,v2,v3)和SSD为代表。
Two-stage的方式面世比较早,由于需要将兴趣区域检测和分类分开进行,虽然精度比较高,但实时性比较差,不适合自动驾驶无人车辆感知等应用场景。因而此次我们主要介绍一下SSD和YOLO系列框架。
SSD与2016年由W. Liu et al.在 SSD: Single Shot MultiBox Detector 一文中提出。虽然比同年提出的YOLO(v1)稍晚,但是运行速度更快,同时更加精确。
SSD的框架在一个基础CNN网络(作者使用VGG-16,但是也可以换成其他网络)之上,添加了一些额外的结构,从而使网络具有以下特性:
用多尺度特征图进行检测 作者在VGG-16后面添加了一些特征层,这些层的尺寸逐渐减小,允许我们在不同的尺度下进行预测。越是深层小的特征图,用来预测越大的物体。
用卷积网络进行预测 不同于YOLO的全连接层,对每个用于预测的 通道特征图,SSD的分类器全都使用了 卷积进行预测,其中 是每个单元放置的先验框的数量, 是预测的类别数。
设置先验框 对于每一个特征图上的单元格,我们都放置一系列先验框。随后对每一个特征图上的单元格对应的每一个先验框,我们预测先验框的 维偏移量和每一类的置信度。例如,对于一个 的特征图,若每一个特征图对应 个先验框,同时需要预测的类别有 类,那输出的大小为 。(具体体现在训练过程中) 其中,若用 表示先验框的中心位置和宽高, 表示预测框的中心位置和宽高,则实际预测的 维偏移量 是 分别是:
下图是SSD的一个框架,首先是一个VGG-16卷积前5层,随后级联了一系列卷积层,其中有6层分别通过了 卷积(或者最后一层的平均池化)用于预测,得到了一个 的输出,随后通过极大值抑制(NMS)获得最终的结果。
图中网络用于检测的特征图有 个,大小依次为 , , , , , ;这些特征图每个单元所对应的预置先验框分别有 , , , , , 个,所以网络共预测了 个边界框,(进行极大值抑制前)输出的维度为 。
未完待续
参考: chenxp2311的CSDN博客:论文阅读:SSD: Single Shot MultiBox Detector 小小将的知乎专栏:目标检测|SSD原理与实现 littleYii的CSDN博客:目标检测论文阅读:YOLOv1-YOLOv3(一)
作者的其他相关文章: 图像分割:全卷积神经网络(FCN)详解 PointNet:基于深度学习的3D点云分类和分割模型 详解 基于视觉的机器人室内定位
对于目标检测方向并不是特别熟悉,本文记录一下RCNN, fast-RCNN, faster-RCNN, mask-RCNN这4篇有关目标检测的论文笔记和学习心得
论文名称:Rich feature hierarchies for accurate object detection and semantic segment
论文名称:Rich feature hierarchies for accurate object detection and semantic segment
论文:A Dual Weighting Label Assignment Scheme for Object Detection [图片上传失败...(imag
一个经典例子是存在一个测试集合,测试集合只有大雁和飞机两种图片组成,假设你的分类系统最终的目的是:能取出测试集中所有飞机的图片,而不是大雁的图片。然后就可以定义