zoukankan      html  css  js  c++  java
  • SSD模型解析

    SSD模型训练起来较为简单,所以最近用的也比较多

    现在做一个完整的SSD模型解析,包括训练过程中遇到的各种坑的解决办法

    先放一个被用烂了的图

     模型说明

    图片通过vgg16的conv4_3layer得到一个feature_map_1

    对feature_map_1进行卷积,使用3*3的卷积核,再使用1*1的卷积核,使用multi_task方法(在使用3*3卷积核之后,分别经过两个不同的1*1卷积核)

    获得result_sigmoid(h*w*1)和result_softmax(h*w*m)

    result_sigmoid对应的是这个区域的archer_box是否包含正样本

    result_softmax对应的是这个区域那一个archer_box为字母框的概率最大

    对feature_map_1通过3*3卷积核卷积之后的结果进行max_pooling获取feature_map_2

    对feature_map_2进行卷积,使用3*3的卷积核,再使用1*1的卷积核,使用multi_task方法(在使用3*3卷积核之后,分别经过两个不同的1*1卷积核)

    获得result_sigmoid_2(hh*ww*1)和result_softmax_2(hh*ww*m)

    result_sigmoid_1对应的是这个区域的archer_box是否包含正样本

    result_softmax_2对应的是这个区域那一个archer_box为字母框的概率最大

    以此类推

    关于archer_box:

      先放个图

      

         一般来说,CNN的不同层有着不同的感受野。然而,在SSD结构中,default box不需要和每一层的感受野相对应,特定的特征图负责处理图像中特定尺度的物体。在每个特征图上,default box的尺度计算如下:

      计算feature_map_k的感受野 receptive_field

          其中,smin = 0.2 ×  receptive_field,smax = 0.9 × receptive_field


          default box的aspect ratios 有:

      一般来说,设置6个radio即可(m=6)

          每一个default box,宽度、高度、中心点计算如下:

      

      对于每一个Sk 我们有

      a = {1, 2, 3,1/2,1/3},对于 aspect ratio = 1,额外增加一个default box,该box的尺度为 

      

    训练过程:

    训练和解析是很不一样的

    因为ssd模型的输出是一个feature map嘛,我开始就拿输入为一张图和输出为n张feature map去做反向传播

    结果效果非常差,,,feature_map 全部趋于0

      

    之后重新读了一遍论文,又读了一些博客,找到了正确训练的方法

    我们已有的数据为带标记的图片数据

    数据生成:

      将图片输入vgg_16的conv5_3获取feature_map(h*w*c)

      使用3*3的滑动窗口,stride为1 ,padding = same 将feature_map 取成h*w个3*3*c的小窗口

      计算这个3*3滑动窗口的感受野

      通过感受野,每个滑动窗口生成35个default box

      遍历所有的标记,找到对这35个default_box最大的IOU

      若iou<0.3则记为负样本,若iou>0.7则记为正样本

      

      对于IOU>0.7的,找到对于iou最大的default box 相当于一个softmax 分类

      因为我们ssd是多层的,feature_map是可以替换的,所以每一个feature map按照以上规则生成数据即可

    网络训练

      我们的输入是3*3*c的一个feature map

      输出有两个

      一个是一维的值,表示是否是正负样本

      另一个是35维的向量,表示哪一个default box为iou最大的那个

      网络结构就是卷积加全连接嘛,这个也比较简单

      但要注意,最后一个卷积要使用(3*3) 的卷积核,输出为1*c

      就是把每一个通道变成一个

    网络封装

      封装之后的网络输入为h*w*3的bgr图像

      输出为3-5个map_1(h*w) ,     map_2(h*w*35)

      第一个map 表示正负样本  第二个map表示哪一个default box iou最大

      但是我们有全连接,,,全连接使用1*1卷积核代替即可

      

      卷积没什么好说的

      全连接用1*1卷积核代替即可  

  • 相关阅读:
    Jenkins+SVN+Maven自动化部署环境搭建
    基于Maven+SSM整合shiro+Redis实现后台管理项目
    Linux学习之CentOS(一)----在VMware虚拟机中安装CentOS 7
    如何用Jmeter做压力测试
    项目沟通管理中的几种技巧
    软件生命周期管理(ALM)
    大数据入门-记录
    为啥项目做到最后都成为了“屎山”,代码改不动
    看企业如何玩转低代码,引发效率革命
    行云创新亮相云栖大会,解读云原生时代开发者工具变革探索与实践
  • 原文地址:https://www.cnblogs.com/shensobaolibin/p/9303748.html
Copyright © 2011-2022 走看看