• 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卷积核代替即可  

  • 相关阅读:
    30分钟学会如何使用Shiro
    Java NIO 系列教程
    Kafka学习之路
    Kafka消费组(consumer group)
    潭拓寺
    如何设置 ssh secure shell 支持中文
    goaccess nginx 日志分析
    【转】服务化框架技术选型与京东JSF解密
    java ee wildfly 批处理 job 工作
    wildfly 10上使用最新的 Hibernate ORM OGM
  • 原文地址:https://www.cnblogs.com/shensobaolibin/p/9303748.html
Copyright © 2020-2023  润新知