python ssd目标检测_目标检测之ssd

v2-ab7e30b70c3b5df9e26059a6e8bb5625_1440w.jpg?source=172ae18b

设计理念

1.采用多尺度特征图用于检测不同大小的目标

CNN一般前面的feature map比较大,每个单位的感受野比较小,适合用于检测小目标;后面的feature map比较小,每个单位的感受野比较大,适合用于检测大目标

2.借鉴Faster RCNN采用anchor

为特征上的每个单元设置都设置不同尺度的anchor

3.采用卷积进行检测

SSD直接采用3*3的卷积核对特征进行卷积得到分类和位置回归的参数

设计细节

1.每个特征图需要的卷积核的数量

SSD将背景也当作了一个特殊的类别,如果检测目标有c个类别,那么SSD需要c+1个置信度,后面统称为C,每个类别会有一个分类预测值。

一个框会有C个分类预测值,4个位置回归值。那么特征图上的一个点假设有k个框,那么一个点就需要(C+4)K个值,由于SSD采用卷积做检测,所以一个特征图会有(C+4)K个卷积核完成这个特征图的检测过程。

与Faster RCNN一样,SSD也是密集采样。

2.在Conv4_3之后加入了L2 Normalization层

向量的L2 Normalization就是,将向量的值除以所有值的平方开根号,最后它们的和为1,也就是向量的归一化。

比如向量(a, b, c)进行L2 Normalization之后变为,(

,
,
)

在深度学习中加入归一化可以增加模型的鲁棒性。

L2 Normalization会有一个参数scale,如果把feature的模长放缩到刚好等于一的长度,会让学到的feature变得很小,网络会难以训练。所以,更可取的做法是将feature的值放大一定倍数,例如20倍,归一化后的结果就是(

,
,
)

L2 Normalization还可以设置按通道进行norm还是按照像素进行norm。

例如,现在要对大小为m×n×c的feature map进行norm操作,按通道是在c个m×n的tensor进行norm操作,按像素在m×n个c维向量上操作。

3.加上Conv4_3,共提取了6个特征图

特征图的大小分别为(38,38),(19,19),(10,10),(5,5),(3,3),(1,1)。对特征图设置对先验框对数量不同,对不同的特征图设置不同尺度的先验框,先验框的尺度符合线性递增。

下图描述了对(5,5)的特征图进行卷积得到结果的过程

v2-cf3a4c5a8bcb656ae9c462f243691457_b.jpg

训练过程

1.先验框匹配,选择训练对正负样本

  1. 为每个ground truth找到IOU最大的先验框
  2. 将剩余的先验框与ground truth进行匹配,选出IOU最大的,且大于0.5的(这一步是为了增加正样本的数量)
  3. 以上两步挑选出来的作为正样本
  4. 对剩余的先验框,也就是负样本按照置信度误差进行降序排列,预测背景的置信度越小,误差越大
  5. 选取误差的较大的top-k作为训练的负样本,以保证正负样本比例接近1:3

2.损失函数

损失函数定义为位置误差(locatization loss, loc)与置信度误差(confidence loss, conf)的加权和:

v2-cc8d5b7f9dee4dc941d1deef5468a3a9_b.jpg

对于位置误差,其采用Smooth L1 loss

N是先验框对正样本对数量

参考:

https://blog.csdn.net/xiaohu2022/article/details/79833786​blog.csdn.net https://blog.csdn.net/weixin_35653315/article/details/72715367​blog.csdn.net
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值