目标检测是计算机视觉领域里的一个重要分支,其本质内容是:What objects
are where?
它同时作为一个基础任务为领域内一些更复杂的问题(如实例分割、图片文本识别、目标跟踪等)提供支持。从应用的角度来看,目标检测可以划分为两大类:通用目标检测和检测应用。通用目标检测主要是探索在统一的算法框架下检测不同类型目标的方法,类似于人类的视觉感知;检测应用则侧重于实际场景,例如行人检测、人脸检测和文本检测等。
Map
目标检测领域从1999年发展至今已过了大约20个年头。这期间相关的算法模型发展路线如下图所示(摘自原论文):
本文以此为依据按照发展历程记录各个算法的关键贡献。
...
通常的目标检测算法都是基于Anchor来做的,这样虽然会生成许多无用的锚框,同时带来耗时的NMS后处理操作,但算法的准确率较高,因为锚框基本上覆盖来所有目标区域。在检测领域还有一种做法的基于Anchor
free的,即无锚框,我了解的范围内主要有Cornernet、Centernet(Keypoint
Triplets for Object Detection)和Centernet(Objects as
Points)。这种类型的算法无需生成锚框,也就不需要耗时的NMS后处理。这里主要记录一下Centernet(Objects
as Points)的处理方法。
模型结构
Center...
学习了那么多的深度学习算法,损失函数总是绕不过去的点,但好在一般情况下使用的损失函数都比较固定,偶尔会有一些随缘性的改变。这里主要列举了一些常用的损失函数。
L1-loss
L1损失函数,又称平均绝对误差(Mean Absolute Error,
MAE)。数学表达式如下:
\[
MAE = \frac{1}{n}\sum^n_{i=1}\vert f(x_i)-y_i\vert
\]
其中\(n\)表示训练批次样本数量,\(f(x_i)\)表示模型在样本\(x_i\)处的预测值,\(y_i\)为样本\(x_i\)对应的真实值。
L2-loss
L2损失函数,又称均方误差(Mean ...
在2019年年末和2020年年初,谷歌大脑发表了两篇论文,分别针对图片分类和目标检测领域提出了一个快速准确的模型,并命名为EfficientNet和EfficientDet。作者还通过对模型参数进行调整得到了一系列高效的分类和检测模型。
EfficientNet
作者通过前人的工作以及自己的实验总结出了两个观点:
缩放模型的任一维度(深度、宽度、分辨率)都会提升模型的精度,但对于过大的模型缩放尺度,其精度收益会减少
在卷积网络的缩放中,平衡地缩放模型各个维度可以获得更好的精度和速度
compound scaling
通过上述的两个观点,作者不再使用传统的单一维度的模型缩放,而是对...
IoU是目标检测里的一个重要指标,它是通过计算预测框与真实框的交集和并集的比值来衡量预测框的优劣。但通常的预测框调整函数一般采用的是L2范数,即以MSE的方式来计算损失,而目前来看,一些研究表明这并非最优的优化函数,所以就有了IOU损失函数。
IoU的计算:
\[
IoU = \frac{\vert B \cap B^{gt}\vert}{\vert B \cup B^{gt}\vert}
\]
其中\(B\)表示的是预测框,\(B^{gt}\)表示的是真实框,整体上看\(IoU\)就是预测框与真实框的交集与预测框与真实框的并集的比值。它可以有效的反映出预测框的检测效果,同时它还具有...
不知不觉又积累了好多论文,真是让人憔悴呢。回归正题,神经网络在很多领域已经有了应用,在图像识别领域甚至已经超越人类的能力,而模型准确率的提高带来的是更高的算力要求。在实际工程应用中往往提供不了很高的计算能力,有些甚至在嵌入式平台上运行算法,这意味着那些高大上的算法根本是不可能部署上去的。谷歌继mobilenetv1后提出了其改进版本mobilenetv2,该模型更适合于轻量级部署,在保持运行速度的同时也能拥有能看的准确率。
深度可分离卷积
首先先来看一下已经mobilenetv1中使用了的深度可分离卷积。大致逻辑就是将一个普通的卷积计算分为两步来完成:depthwise卷积和poin...
当前大部分的目标检测/分割模型是基于Fast/Faster
RCNN和FPN,作者主要提供了一个可比的框架用于实例分割,即Mask R-CNN。
Introduction
mask rcnn是通过在faster
rcnn基础上,加一个分支用于并行地预测分割模板。该分支其实是一个小型的FCN网络,作用于每个ROI区域。
这里小提一下fast/faster rcnn。fast
rcnn在rcnn基础上引入了ROIPool;faster rcnn在fast
rcnn的基础上引入了RPN。
实例分割是在像素级别上实现划分对象轮廓。常用的策略有两种:
分割候选,即分割先于识别,先划分出...
是的,它来了。
简介
yolo3在\(320\times
320\)的分辨率输入下,准确率维持在\(28.2mAP\),运行速度大致为\(22ms\)。
这个模型跟yolo2相比,并没有什么重大的改变,作者通过尝试许多技巧来提升模型性能,最后筛选出当前有用的一些技巧组合成yolo3。
边界框与类别预测
在yolo2中,边界框是通过预测框相对于图片左上角的中心坐标和先验框的长宽来得到框的位置大小:
\[
\begin{aligned}
b_x & = \sigma(t_x)+c_x \\
b_y & = \sigma(t_y)+c_y \\
b_w & = p_...
yolov1算法发布后,引起了大众的强烈反应,有许多研究员将该算法与Fast
Rcnn做了比较,yolov1在目标定位上出现了较多的偏差,同时有着较低的召回率。于是作者在几乎同年的时间段里就推出了yolov2以及用于超多类别检测的yolo9000,这算法的迭代速度令人一脸茫然(是真滴NB)。
作者主要围绕着在保持模型精度的前提下提高模型的召回率和降低目标定位偏差这几点来提升算法模型,同时提出了共同训练的方法来实现超多类别检测算法yolo9000。
Better
作者采用了许多技巧来简化模型的同时提升准确率。 首先是批归一化(Batch
Normalization),它可以显著提高模型...
元旦快乐
首先在这里祝福各位元旦快乐,2020年没有bug。
距上一次SSD博文的推出已经有将近3个月了,这一段时间的话一直比较忙,毕竟年末了嘛,有些工作应该要收尾了。接下来的一两周可能会有点空闲,借此机会,我会更新一下目标检测yolo系列的算法模型。说来惭愧,之前一直对开源项目是只进不出,没有做什么贡献,所以最近我也在准备一个开源项目,是时候让我github账号上的star数突破1位数了。。。