MSCNN(主要解决多尺度同时存在时的检索问题):
1.针对多尺度问题:
由于卷积网络中不同层得到的特征不同,就对不同的特征层加以利用。例如,Conv4-3的底层,一些细节特征会更加清楚可以用来进行小目标的检测;而高层Conv5-3层,对于大目标的检测效果更好可以用来进行大目标检测,对于不同的层设计不同尺度的目标检测器,完成多尺度下的检测问题。
2.针对速度问题
使用特征图的上采样来代替输入图像的上采样,可以大大减少内存,提高速度,这里设计一个卷积层来增加特征图的分辨率,使得小目标依然可以呗检测出来。
网络结构如下:
这里Conv4-3上面加入了一个卷积缓冲层,因为这一层更靠近主干网络(更加接近输入图),为了不影响梯度学习过程卷积缓冲层可以防止检测分支的梯度直接反向传播回主干层。
这部分就是将特征图上采样后经过ROIPolling层后进行分类跟坐标回归,这里加入了上下文描述,其实就是上图中的蓝色的cube它是对应绿色cube尺寸的1.5倍大小,这样就起到一个上下文的作用,而最后一个Conv层就是减少model参数,对featuer map起到一个降维的作用。
3.采样
对于每一个检测层训练样本都分为正、负样本。其中候选框是通过一个Anchor作为滑动窗口的中心,在特征映射上滑动产生的。Anchor的大小设置与卷积核的大小相关,并且不同检测层的大小设置也不同,具体设置如下表所示。当候选框与真实样本的IOU值大于等于0.5时,被标记为正样本,当IOU值小于0.2时被标记为负样本,其余的丢弃。
为了评估MS-CNN的性能,使用KITTI,Caltech数据集。因为对比于pascal voc,imagenet这两个数据集其中包含了更多小尺度目标,Caltech中图像的分辨率为:640×480,KITTI中图像的分辨率为:1250×375.包含Car,pedestrain,cyyclist三个类,分为easy,moderate,hard三个子集,7481张图像用于train/val,7518张图像用于test;KITTI中Car训练一个模型,pedestrain,cyclist训练一个模型,Caltech中pedestrain训练一个模型。
注:这里说一下滑动窗口法。
滑动窗口法:其基本原理就是采用不同大小和比例(宽高比)的窗口在整张图片上以一定的步长进行滑动,然后对这些窗口对应的区域做图像分类。这样就可以实现对整张图片的检测了。但是这个方法有个缺点,就是并不知道要检测的目标大小是什么规模,所以你要设置不同大小和比例的窗口去滑动,而且还要选取合适的步长。这样就会产生很多的子区域,并且都要金国分类器去做预测,这样需要很大的计算量,所以分类器不能太复杂,因为要保证速度。
具体步骤:对输入图像进行不同窗口大小的滑窗进行从左至右,从上到下的滑动。每次滑动的时候对当前窗口执行分类器(分类器事先训练好),如果当前窗口得到较高的分类概率,则认为检测到了物体。对每个不同窗口大小的滑窗都进行检测后,会得到不同窗口检测到的物体标记,这些窗口大小会存在重复较高的部分,最后需要用NMS方法进行筛选。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:目标检测算法-MSCNN - Python技术站