ssd算法理解及与两阶段算法的区别

发布网友 发布时间:2024-09-27 11:55

我来回答

1个回答

热心网友 时间:2024-10-04 19:56

文章对SSD算法的原理进行了详细阐述,有助于读者理解。

文章对SSD-TensorFlow进行了逐句注释。

文章首先说明了SSD与两阶段算法的区别。

“作者提出了SSD模型,将输出的bounding boxes视为一组不同尺度、不同大小的boxes。简而言之,在不同尺度的feature map上设置了系列不同大小的default boxes,实现了多尺度检测。这种思路与faster rcnn中的anchor boxes类似。然而,anchor boxes实现多尺度的方式不是在不同feature map上进行回归,而是直接设置不同比例的boxes。与rcnn系列模型相比,SSD取消了region proposal的过程,即没有像素、特征重采样(对应于faster rcnn的ROI Pooling)的过程,提升了运行速度。同时,得益于多尺度检测,精度上并未损失,甚至在512x512大小的图片上超过了faster rcnn。”

“基于深度学习的目标检测网络主要有两大类,一类是以RCNN为代表的region proposals方法,这类方法速度较慢,最快的faster rcnn在GPU上也只有7FPS;另一类是以YOLO为代表的基于回归的算法。YOLO虽然在速度上很快(45 FPS),但是精度较低。作者本文旨在解决速度与精度的矛盾问题,提升模型速度的同时,避免了精度损失。SSD和YOLO同属基于回归的算法。”

简单的关键点回归:将一幅图像提取到featrue maps,然后直接将整个featrue maps映射到要回归的点坐标和要回归的类别。

SSD算法思想:先将一幅图像提取到featrue maps,然后从c通道维度拍扁这个立方体(保持w和h维度),对其遍历,对每个像素位置(有通道维度的特征,比如1*256的featrue map)映射到要回归的点坐标和要回归的类别。这种做法较为直接,对于一个map上的像素点,要回归出所有类别的置信度和此处的boundingbox。

“1.预测过程

这里详细说明了如何回归,即“如何从特征图上1个像素位置映射到想要回归的坐标和类别”这个步骤。

然后,问题来了。训练过程中,如何分配特征图每个像素位置处的监督坐标和监督类别?

“首先需要对每一个ground truth匹配相应的default box,一个ground truth可以匹配多个default box。如果ground truth和default box的重叠率大于一个阈值,则匹配为正样本,否则为负样本。

目标函数:偏置偏差损失+类别置信度损失

default boxes大小设置:根据相应的特征图的尺度,设置不同大小的default box,具体计算公式参见论文。作者使用了6个default box。其他trick:Hard negative mining:只有那些有最高训练损失(training loss)的负面样本(negative example)子集才会在每次训练迭代中被使用。SSD的「正负」比一直保持在1:3。Data augmentation:随机裁剪”

“主要创新之处在于:”

“ssd思想:因为可以有单独产生先验框的层,而且输出可以都是已知先验框的坐标和类别信息;也就知道了每个正样本先验框与它的groudtruth的坐标差,这就是每个正样本先验框的监督信号。因此,只要给每个先验框定义出分类和坐标节点信息(以承载其被预测为正确groudtruth的预测信息)即可解决问题了。由于先验框个数是遍历feature map得到,所以最终参与预测的先验框很多,这每个先验框,类似于从整个feature map中抽离出局部feature map,符合人眼日常多目标检测原理。”

“ssd为什么效果好?

MTCNN和SSD实现了两种不同的检测策略

MTCNN:首先构建图像金字塔,然后使用固定大小的滑动窗口(由全卷积网络PNet实现)在金字塔每一级滑动,对每个滑动窗口分类回归,由于图像金字塔对原图信息有一定程度的损失(做resize),同时由于特征提取只使用一个网络,所以对于不同尺度的目标提取特征不够充分。

SSD:图像大小不变,采用不同大小的滑动窗口(由不同特征图实现),并对每个滑动窗口分类回归。不同的特征图对应了不同大小的滑动窗口,实现了对不同大小滑动窗口的特征提取,由于不同特征图使用了不同CNN结构,提取特征更加充分。”

政治从科学中吸取经验:

1)科学:SSD其实就是对6个不同特征图对应的所有priorbox进行分类和回归,每个特征图对应的priorbox其实就是每个特征图上每个像素点对应的感受野,而这些感受野其实就是滑动窗口,所以SSD本质上就是实现了对输入图像中所有滑动窗口的分类和回归

2)人民代表大会制度:从底层(conv4-3)选取代表,解决底层特有问题(小尺度)。

细节详解:

“voidcn.com/article/p-ki...

1)从原图采样crop出patch后reisze到300*300作为训练样本,自适应输入图像大小。

//对于batch_sampler的解释:(train.prototxt)

batch_sampler {

sampler {

min_scale: 0.3 #scale是patch随机框和原图的面积比

max_scale: 1.0

min_aspect_ratio: 0.5 #长宽比

max_aspect_ratio: 2.0

}

sample_constraint {

min_jaccard_overlap: 0.3 #随机框和原ground truth的jaccard overlap

}

max_sample: 1

max_trials: 50 #最大迭代寻找次数,一张图片寻找符合条件的bbox的次数

}

7个采样器,对应生成7个样本?IOU=0.1,0.3,0.5,0.7,0.9。对于每个采样器,随机选择一个来裁剪图片和标注数据。

2)怎样获取小尺寸目标?

ExpandImage是缩小图片,达到zoom out的效果:先做一个比原图大的画布,然后随机找一个放原图的位置将原图镶嵌进去,像天安门上挂了一个画像。这在SSD原文中提到的zoom out缩小16倍(4×4,3.6节)来获得小对象的方法。

这对控件检测是个缺点。控件目标的尺寸分布整体偏小,做完zoom操作后,整体更加偏小。当去掉zoom操作后,效果变好,但是泛化能力降低。这也是ssd中data augment对效果提升很大的原因。

3)多种数据增强方法怎么排列组合?

先扰动,后裁剪。

热心网友 时间:2024-10-04 19:54

文章对SSD算法的原理进行了详细阐述,有助于读者理解。

文章对SSD-TensorFlow进行了逐句注释。

文章首先说明了SSD与两阶段算法的区别。

“作者提出了SSD模型,将输出的bounding boxes视为一组不同尺度、不同大小的boxes。简而言之,在不同尺度的feature map上设置了系列不同大小的default boxes,实现了多尺度检测。这种思路与faster rcnn中的anchor boxes类似。然而,anchor boxes实现多尺度的方式不是在不同feature map上进行回归,而是直接设置不同比例的boxes。与rcnn系列模型相比,SSD取消了region proposal的过程,即没有像素、特征重采样(对应于faster rcnn的ROI Pooling)的过程,提升了运行速度。同时,得益于多尺度检测,精度上并未损失,甚至在512x512大小的图片上超过了faster rcnn。”

“基于深度学习的目标检测网络主要有两大类,一类是以RCNN为代表的region proposals方法,这类方法速度较慢,最快的faster rcnn在GPU上也只有7FPS;另一类是以YOLO为代表的基于回归的算法。YOLO虽然在速度上很快(45 FPS),但是精度较低。作者本文旨在解决速度与精度的矛盾问题,提升模型速度的同时,避免了精度损失。SSD和YOLO同属基于回归的算法。”

简单的关键点回归:将一幅图像提取到featrue maps,然后直接将整个featrue maps映射到要回归的点坐标和要回归的类别。

SSD算法思想:先将一幅图像提取到featrue maps,然后从c通道维度拍扁这个立方体(保持w和h维度),对其遍历,对每个像素位置(有通道维度的特征,比如1*256的featrue map)映射到要回归的点坐标和要回归的类别。这种做法较为直接,对于一个map上的像素点,要回归出所有类别的置信度和此处的boundingbox。

“1.预测过程

这里详细说明了如何回归,即“如何从特征图上1个像素位置映射到想要回归的坐标和类别”这个步骤。

然后,问题来了。训练过程中,如何分配特征图每个像素位置处的监督坐标和监督类别?

“首先需要对每一个ground truth匹配相应的default box,一个ground truth可以匹配多个default box。如果ground truth和default box的重叠率大于一个阈值,则匹配为正样本,否则为负样本。

目标函数:偏置偏差损失+类别置信度损失

default boxes大小设置:根据相应的特征图的尺度,设置不同大小的default box,具体计算公式参见论文。作者使用了6个default box。其他trick:Hard negative mining:只有那些有最高训练损失(training loss)的负面样本(negative example)子集才会在每次训练迭代中被使用。SSD的「正负」比一直保持在1:3。Data augmentation:随机裁剪”

“主要创新之处在于:”

“ssd思想:因为可以有单独产生先验框的层,而且输出可以都是已知先验框的坐标和类别信息;也就知道了每个正样本先验框与它的groudtruth的坐标差,这就是每个正样本先验框的监督信号。因此,只要给每个先验框定义出分类和坐标节点信息(以承载其被预测为正确groudtruth的预测信息)即可解决问题了。由于先验框个数是遍历feature map得到,所以最终参与预测的先验框很多,这每个先验框,类似于从整个feature map中抽离出局部feature map,符合人眼日常多目标检测原理。”

“ssd为什么效果好?

MTCNN和SSD实现了两种不同的检测策略

MTCNN:首先构建图像金字塔,然后使用固定大小的滑动窗口(由全卷积网络PNet实现)在金字塔每一级滑动,对每个滑动窗口分类回归,由于图像金字塔对原图信息有一定程度的损失(做resize),同时由于特征提取只使用一个网络,所以对于不同尺度的目标提取特征不够充分。

SSD:图像大小不变,采用不同大小的滑动窗口(由不同特征图实现),并对每个滑动窗口分类回归。不同的特征图对应了不同大小的滑动窗口,实现了对不同大小滑动窗口的特征提取,由于不同特征图使用了不同CNN结构,提取特征更加充分。”

政治从科学中吸取经验:

1)科学:SSD其实就是对6个不同特征图对应的所有priorbox进行分类和回归,每个特征图对应的priorbox其实就是每个特征图上每个像素点对应的感受野,而这些感受野其实就是滑动窗口,所以SSD本质上就是实现了对输入图像中所有滑动窗口的分类和回归

2)人民代表大会制度:从底层(conv4-3)选取代表,解决底层特有问题(小尺度)。

细节详解:

“voidcn.com/article/p-ki...

1)从原图采样crop出patch后reisze到300*300作为训练样本,自适应输入图像大小。

//对于batch_sampler的解释:(train.prototxt)

batch_sampler {

sampler {

min_scale: 0.3 #scale是patch随机框和原图的面积比

max_scale: 1.0

min_aspect_ratio: 0.5 #长宽比

max_aspect_ratio: 2.0

}

sample_constraint {

min_jaccard_overlap: 0.3 #随机框和原ground truth的jaccard overlap

}

max_sample: 1

max_trials: 50 #最大迭代寻找次数,一张图片寻找符合条件的bbox的次数

}

7个采样器,对应生成7个样本?IOU=0.1,0.3,0.5,0.7,0.9。对于每个采样器,随机选择一个来裁剪图片和标注数据。

2)怎样获取小尺寸目标?

ExpandImage是缩小图片,达到zoom out的效果:先做一个比原图大的画布,然后随机找一个放原图的位置将原图镶嵌进去,像天安门上挂了一个画像。这在SSD原文中提到的zoom out缩小16倍(4×4,3.6节)来获得小对象的方法。

这对控件检测是个缺点。控件目标的尺寸分布整体偏小,做完zoom操作后,整体更加偏小。当去掉zoom操作后,效果变好,但是泛化能力降低。这也是ssd中data augment对效果提升很大的原因。

3)多种数据增强方法怎么排列组合?

先扰动,后裁剪。

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com