目标检测:各种网络结构对比

news/2024/7/10 1:12:22 标签: 目标检测, 网络框架

1、通常的CNN网络结构如下图所示

                     图1

上图网络是自底向上卷积,然后使用最后一层特征图进行预测,像SPP-Net,Fast R-CNN,Faster R-CNN就是采用这种方式,即仅采用网络最后一层的特征。

以VGG16为例子,假如feat_stride=16,表示若原图大小是1000*600,经过网络后最深一层的特征图大小是60*40,可理解为特征图上一像素点映射原图中一个16*16的区域;那原图中有一个小于16*16大小的小物体,是不是就会被忽略掉,检测不到了呢?

结论:早起最常用的网络结构,缺点就是会造成检测小物体的性能急剧下降。

 

2、图片金字塔生成特征金字塔

鉴于上面的单层检测会丢失细节特征;就会想到利用图像的各个尺度进行训练和测试,比如下图所展示,将图像做成不同的scale,然后不同scale的图像生成对应的不同scale的特征

                                       图2

      将图片缩放成多个比例,每个比例单独提取特征图进行预测,这样,可以得到比较理想的结果,但是比较耗时,不太适合运用到实际当中。有些算法仅会在测试时候采用图像金字塔。

结论:在机器学习算法中经常使用,例如:HOG+SVM,但是它最大的缺点就是很耗时,很难应用于工程中。

3、多尺度特征融合的方式(特征金字塔)

                      图3

像SSD(Single Shot Detector)就是采用这种多尺度特征融合的方式,没有上采样过程,即从网络不同层抽取不同尺度的特征做预测,这种方式不会增加额外的计算量。作者认为SSD算法中没有用到足够低层的特征(在SSD中,最低层的特征是VGG网络的conv4_3),而在作者看来足够低层的特征对于检测小物体是很有帮助的。

结论:目前one-stage目标检测网络最常用的网络结构,对于小目标的检测,需要注意取到的较低层的特征,毕竟底层的特征包含更多的细节信息。

4、FPN(Feature Pyramid Networks)

                            图4

FPN主要解决的是物体检测中的多尺度问题,通过简单的网络连接改变,在基本不增加原有模型计算量的情况下,大幅度提升了小物体检测的性能。通过高层特征进行上采样和低层特征进行自顶向下的连接,而且每一层都会进行预测。

结论:借鉴了语义分割的思想,将上下层特征进行合并,进一步提升小物体检测率,在Anchor-free的目标检测网络中应用广泛。

 

5、top-down pyramid w/o lateral

                                              图5

      该网络有自顶向下的过程,但是没有横向连接,即向下过程没有融合原来的特征。实验发现这样效果比图1的网络效果更差。结论:效果之所以变差,主要因为目标的location特征在经过多次降采样和上采样过程后变得更加不准确。 

 

6、only finest level

                                       图6

上图带有skip connection的网络结构在预测的时候是在finest level(自顶向下的最后一层)进行的,简单讲就是经过多次上采样并融合特征到最后一步,拿最后一步生成的特征做预测,跟FPN的区别是它仅在最后一层预测。

结论:很显然,它没有在多个特征层进行predict,对多尺度目标鲁棒性不够好。

 

参考链接:https://blog.csdn.net/kk123k/article/details/86566954

 


http://www.niftyadmin.cn/n/634631.html

相关文章

使用virtualenv在ubuntu上搭建python 3开发环境

为什么80%的码农都做不了架构师?>>> ubuntu 13.04默认的python版本是2.7的,想在其上做python3的开发会遇到问题。比如要使用pip安装软件包时,默认安装的就是python2的包。如果想安装python3的包,就需要用到virtualenv…

Android入门——数据存储之SQLite详解与简单应用

引言 很多时候我们的APP都不能独立于数据之外,常常对数据进行各种操作。Android为数据存储提供了多种方式,主要有五种:文件、SharedPreferences、SQLite、网络、内容提供者。这一篇先总结下关于如何使用SQLite数据库。 一SQLite 数据库概述…

Android入门——内容提供者Content Provider详解与应用

引言 在Android 中,内容提供者Content Provider提供了对内容和外部数据进行增删改查的功能,应用程序可以通过内容提供者来访问其他应用程序的数据,作为内容提供者也可以成为内容提供者向其他应用程序共享内部数据。通常系统的一些内部数据例…

Iframe内部页面高度赋值于其父页面的Iframe标签

Iframe内部页面高度赋值于其父页面的Iframe标签,使得该Iframe不存在滚动条,布遮盖子页面的内容: $(#crowdfunding_iframe,parent.document).attr("height",$(document.body).height()); var height $(document.body).height() 30…

目标检测:Feature Pyramid Networks(FPN)

FPN:Feature Pyramid Networks,特征图金字塔网络 论文:feature pyramid networks for object detection (CVPR2017)论文链接:https://arxiv.org/abs/1612.03144 一、概述 原来多数的object detection算法都是只采用顶层特征做预…

Android入门——利用Canvas完成绘制点、圆、直线、路径、椭圆、多边形等2D图形

引言 一个成功的APP离不开优秀的UI,像墨迹天气等其他APP的一些精彩特效,仅仅依靠系统自带的UI组件是绝不可能实现。所以Android提供了另一种构造UI组件的方式——通过画布Canvas自己绘画,不夸张地说“只有想不到,没有做不到”配以…

[C#7] 1.Tuples(元组)

1. 老版本代码 1 class Program2 {3 static void Main(string[] args)4 {5 var fullName GetFullName();6 7 Console.WriteLine(fullName.Item1);// Item1,2,3不能忍,,,8 Console.WriteLine(fullName.Item2);9 …

Python+OpenCV:画矩形框,写文本

#用 OpenCV 标注 bounding box主要用到下面两个工具——cv2.rectangle() 和 cv2.putText()。用法如下: # cv2.rectangle() # 输入参数分别为图像、左上角坐标、右下角坐标、颜色数组、粗细 cv2.rectangle(img, (x,y), (xw,yh), (B,G,R), Thickness) # cv2.putText…