大白话分析——SSD目标检测网络从训练到预测(上)

一. 背景

本文档以ssd300作为背景网络进行解读,以Tensorflow,Keras为框架
原始代码:https://github.com/pierluigiferrari/ssd_keras
分析后的代码:https://github.com/Freshield/LEARN_detection/tree/master/a4_github_better_ssd/a2_analyze_model
目前网上基本都网络部分讲的比较多,但是真正训练和预测部分都相对粗略,所以自己网上找了一个相对比较好的ssd检测作为蓝本来分析,然后把相应的过程用大白话给表达出来,方便大家可以更好的理解网络。

二. 整体流程

整个SSD大致可以分为四个部分:模型部分,数据部分,Loss部分以及decode部分

三. 模型部分

模型部分是一般网上文章说的比较多的部分,模型可以分为主干网络,conf预测,loc预测,pirorbox,reshaper这5个部分,下图为总体的架构
在这里插入图片描述

1. 主干网络

图片: https://uploader.shimo.im/f/x9HU88zQeek07wyY.png
这里是主干网络和yolo的网络的对比,可以看出从不同的地方选择了多尺度的信息。主干网络这例使用的是vgg网络,其实就是从头到尾的正常卷积操作,尺寸的变化如下:
(300,300,3) -> (150,150,64) -> (75,75,128) -> (38,38,256) -> (38,38,512)(conv4_3) -> (19,19,512) -> (19,19,1024)(fc7) -> (10,10,512)(conv6_2) -> (5,5,256)(conv7_2) ->
(3,3,256)(conv8_2) -> (1,1,256)(conv9_2)
这里后边加上名称的都是之后要用的的层。

2. conf预测

这是是conf预测,也就是confidence,其实就是相当于分类网络,把每个priorbox的21个类别都预测出来,就像正常的分类网络一样。各层的变化如下:
conv4_3(38,38,512) -> L2 norm -> (38,38,4*21)
这里要进行L2 norm的原因是conv4_3层比较靠前,它的值相对较大所以使用L2 norm来减小数值。后边的4为每个格的先验框数量,也就是说本层一共有38*38*4个先验框,具体的解释会在priorbox部分介绍,而21则代表了类别数,其中20个类别和1个背景类。
fc7(19,19,1024) -> (19,19,6*21),6代表这层是每个格6个先验框,一共19*19*6个先验框。
conv6_2(10,10,512) -> (10,10,6*21)
conv7_2(5,5,256) -> (5,5,6*21)
conv8_2(3,3,256) -> (3,3,4*21)
conv9_2(1,1,256) -> (1,1,4*21)

3. loc预测

这里是坐标预测的部分,需要特别注意的是,坐标的预测并不是真正的预测检测的目标的位置,而是检验的目标相对于先验框也就是priorbox的相对位置,包括相对的中心点的偏移以及宽高的缩放。
这里之所以不直接预测检验框的位置是因为无法做到。由于使用的卷积神经网络,所以所有的操作都是卷积,而卷积神经网络先验的前提是空间不变性,所以我们会用同一个卷积核按照步长遍历整个图像,这样可以大大减少所需的计算量。但是也由于是同样的卷积核,那么对于同一个特征,也会得出一模一样的结果。我们假设在一张图的左上和右下有一模一样的两辆车,那么同一个卷积核则会得出同样的结果而无法得出不同的车的位置。这也是之所以需要先验框的一部分原因&#

  • 4
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值