SSD MTCNN YOLO基本对比

2023-10-07 08:40
文章标签 yolo 基本 对比 ssd mtcnn

本文主要是介绍SSD MTCNN YOLO基本对比,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

SSD与MTCNN的区别


1)生成训练数据的方式不同 
MTCNN需要将训练样本事先生成好,同时生成label(分类label和回归label),然后输入到网络中训练,而SSD直接输入原图,实际的训练数据由数据层和priorbox层共同完成,其中priorbox层用来确定每个样本的label,也就是说SSD将MTCNN的生成训练数据的部分融合到一个网络中,实现了真正意义上的端到端。


2)MTCNN和SSD实现了两种滑动窗口检测策略 
MTCNN:首先构建图像金字塔,然后使用固定大小的滑动窗口在金字塔每一级滑动,对每个滑动窗口分类回归。这个固定大小的滑动窗口的大小就是PNet的输入大小,滑动窗口操作由全卷积PNet实现。

 
SSD: 近似于在原图中设置了不同大小的滑动窗口,对不同大小的滑动窗口进行分类和回归。由于SSD可以看作是由6个不同的PNet组成,所以这些不同大小的滑动窗口其实对应了6种PNet。 
不管是MTCNN,还是SSD,本质上是对所有滑动窗口的分类。这与传统的目标检测方法本质上是一样的。


3)SSD使用3x3卷积核进行分类和回归,而MTCNN使用1x1卷积核进行分类和回归 
3x3的卷积核覆盖了该像素点的感受野以及它的领域,加入了局部信息,使得模型更加鲁棒。
-

 

一.  我们发现SSD比Faster rcnn默认框还多,更比yolo多的多,为什么省时间呢?

1)Faster-rcnn是一个双阶段网络,尽管Faster-rcnn的BB少很多,但是其需要大量的前向和反向推理(训练阶段),而且需要交替的训练两个网络

2)SSD其实相当于一个优化了的RPN网络,不需要进行后面的检测,且没有全连接层裁剪

3)YOLO网络中含有大量的全连接层

4)通过裁剪限制输入图片大小 ,从而限制计算量

 

二.YOLOv3 为什么速度比ssd快呢?

1)分类器不同,ssd采用了softmax分类器。而yolov3则使用了多logistic分类器分别针对每个类进行二分类,只用设置阈值,便可以大批量筛选。

2)yolov3的默认框选取采用了聚类的方式,聚类

3)在ssd预测时,每次预测的bbox都是在defalut bbox上基础上,预测出其偏移量。

       在刚开始训练时我们预测时,会十分不稳定,导致位置偏移量很大,出现越界现象(即超出图片范围),因此yolov3会在每个位置偏移后加入sigmoid函数激活(将其限定在0-1之间)(可以更有效进行多通道的融合)。

4) Darknet网络是个全卷积网络,大量采用残杀跳层。且网络中使用歩长为2 的卷积操作对网络进行降采样。

5)

 

 

三.分析 smooth 激活函数的意义

有函数可知,当坐标偏差过大时,斜率不再是正比增大,而是常数增长,可以有效减小 ,使得偏差大的坐标对训练影响小

 

 

YOLO ,SSD对目标检测的发展史:

yolov1:最后一层的输出特征图是固定7*7

缺点:最后一层的输出特征图是固定7*7

 

SSD:最后一层的检测是由之前多个尺度(Multi-Scale)的特征图共同生成的。

缺点:对于极小的目标识别,SSD就显得无能为力了

例如图中的风筝

 

FPN(特征金字塔网络):从顶层(自上而下)的每一层都进行上采样获取更准确的像素位置信息(有些类似残差网络的跳层连接)

卷积操作缺点:像素错位(最上层特征图中,你早已分不清某个像素对应原图的哪些像素)

上采样还原特征图的方式很好地缓解了像素不准的问题(使得高层特征图的像素也有据可查)

缺点:计算量的增多额外的上采样和跳层计算

 

SNIPER:每个尺度大类下都维护一个重点关注区域(region)

实线框是ground truth的目标物体框,可见SNIPER试图把ground truth都圈围在重点关注区域的合适尺度下。此外,SNIPER还在重点关注区域中加入了重点排除区域,在许多背景中,许多目标是无须识别的

其中红色框就是重点排除区域,FPN不同的是,SNIPER不再需要处理每一层特征图的像素进行上采样,计算量下降了不少,据说只比普通的类似yolo的one shot模型多处理30%的像素

这篇关于SSD MTCNN YOLO基本对比的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/157266

相关文章

Python实现Microsoft Office自动化的几种方式及对比详解

《Python实现MicrosoftOffice自动化的几种方式及对比详解》办公自动化是指利用现代化设备和技术,代替办公人员的部分手动或重复性业务活动,优质而高效地处理办公事务,实现对信息的高效利用... 目录一、基于COM接口的自动化(pywin32)二、独立文件操作库1. Word处理(python-d

Java常用注解扩展对比举例详解

《Java常用注解扩展对比举例详解》:本文主要介绍Java常用注解扩展对比的相关资料,提供了丰富的代码示例,并总结了最佳实践建议,帮助开发者更好地理解和应用这些注解,需要的朋友可以参考下... 目录一、@Controller 与 @RestController 对比二、使用 @Data 与 不使用 @Dat

python中字符串拼接的几种方法及优缺点对比详解

《python中字符串拼接的几种方法及优缺点对比详解》在Python中,字符串拼接是常见的操作,Python提供了多种方法来拼接字符串,每种方法有其优缺点和适用场景,以下是几种常见的字符串拼接方法,需... 目录1. 使用 + 运算符示例:优缺点:2. 使用&nbsjsp;join() 方法示例:优缺点:3

SpringBoot整合MybatisPlus的基本应用指南

《SpringBoot整合MybatisPlus的基本应用指南》MyBatis-Plus,简称MP,是一个MyBatis的增强工具,在MyBatis的基础上只做增强不做改变,下面小编就来和大家介绍一下... 目录一、MyBATisPlus简介二、SpringBoot整合MybatisPlus1、创建数据库和

C++ 各种map特点对比分析

《C++各种map特点对比分析》文章比较了C++中不同类型的map(如std::map,std::unordered_map,std::multimap,std::unordered_multima... 目录特点比较C++ 示例代码 ​​​​​​代码解释特点比较1. std::map底层实现:基于红黑

Golang中拼接字符串的6种方式性能对比

《Golang中拼接字符串的6种方式性能对比》golang的string类型是不可修改的,对于拼接字符串来说,本质上还是创建一个新的对象将数据放进去,主要有6种拼接方式,下面小编就来为大家详细讲讲吧... 目录拼接方式介绍性能对比测试代码测试结果源码分析golang的string类型是不可修改的,对于拼接字

MySQL表锁、页面锁和行锁的作用及其优缺点对比分析

《MySQL表锁、页面锁和行锁的作用及其优缺点对比分析》MySQL中的表锁、页面锁和行锁各有特点,适用于不同的场景,表锁锁定整个表,适用于批量操作和MyISAM存储引擎,页面锁锁定数据页,适用于旧版本... 目录1. 表锁(Table Lock)2. 页面锁(Page Lock)3. 行锁(Row Lock

Python中多线程和多进程的基本用法详解

《Python中多线程和多进程的基本用法详解》这篇文章介绍了Python中多线程和多进程的相关知识,包括并发编程的优势,多线程和多进程的概念、适用场景、示例代码,线程池和进程池的使用,以及如何选择合适... 目录引言一、并发编程的主要优势二、python的多线程(Threading)1. 什么是多线程?2.

Python使用Pandas对比两列数据取最大值的五种方法

《Python使用Pandas对比两列数据取最大值的五种方法》本文主要介绍使用Pandas对比两列数据取最大值的五种方法,包括使用max方法、apply方法结合lambda函数、函数、clip方法、w... 目录引言一、使用max方法二、使用apply方法结合lambda函数三、使用np.maximum函数

MyBatis-Flex BaseMapper的接口基本用法小结

《MyBatis-FlexBaseMapper的接口基本用法小结》本文主要介绍了MyBatis-FlexBaseMapper的接口基本用法小结,文中通过示例代码介绍的非常详细,对大家的学习或者工作具... 目录MyBATis-Flex简单介绍特性基础方法INSERT① insert② insertSelec