关于SSD中的细节问题

2 篇文章 0 订阅

关于SSD中的细节问题

SSD总结报告:https://blog.csdn.net/weixin_38715903/article/details/84878592

参考博客:1.https://blog.csdn.net/xunan003/article/details/79186162

2.https://blog.csdn.net/zbzb1000/article/details/81037852

目录

关于SSD中的细节问题

1.关于prior box的计算问题:

2.关于SSD的输入图像的预处理及数据增强:


1.关于prior box的计算问题:

1)简单介绍:

2)对应ssd_pascal.py代码,解读计算过程:

"""
#参数生成先验。  
#输入图像的最小尺寸  
min_dim = 300   #维度  
# conv4_3 ==> 38 x 38  
# fc7 ==> 19 x 19  
# conv6_2 ==> 10 x 10  
# conv7_2 ==> 5 x 5  
# conv8_2 ==> 3 x 3  
# conv9_2 ==> 1 x 1  
"""
"""
#prior_box的来源层,可以更改。(使用的特征层层数)
"""
mbox_source_layers = ['conv4_3', 'fc7', 'conv6_2', 'conv7_2', 'conv8_2', 'conv9_2'] 

"""
# in percent % 
#对应论文中的Smin和Smax:0.2,0.9:
"""
min_ratio = 20   
max_ratio = 90  


"""
#math.floor()函数表示:求一个最接近它的整数,它的值小于或等于这个浮点数。 
#公式中的(Smax-Smin)/(m-1)
"""
step = int(math.floor((max_ratio - min_ratio) / (len(mbox_source_layers) - 2)))
"""
#m-1=6,即为5个间隔
#取一个间距步长,即在下面for循环给ratio取值时起一个间距作用。可以用一个具体的数值代替,这里等于17。  
"""

"""
min_sizes[0]=S1;max_sizes[0]=S2
min_sizes[1]=S2;max_sizes[1]=S3
...
"""
min_sizes = []  
max_sizes = []  

"""
#从min_ratio至max_ratio+1每隔step=17取一个值赋值给ratio
#(Smax-Smin)/(m-1)*(k-1)=step*(k-1)
#这里相当于step这个值再乘以(k-1)
#ratio=[20,37,54,71,88]
"""
for ratio in xrange(min_ratio, max_ratio + 1, step):   
    """
    #分别计算每一个尺度下的最大最小值
    """
    min_sizes.append(min_dim * ratio / 100.)  #[60.0,111.0,162.0,213.0,264.0]
    max_sizes.append(min_dim * (ratio + step) / 100.) #[111.0,162.0,213.0,264.0,315.0]

"""
#拼接conv4_3的尺度:
"""
min_sizes = [min_dim * 10 / 100.] + min_sizes  #[30.0,60.0,111.0,162.0,213.0,264.0]
max_sizes = [min_dim * 20 / 100.] + max_sizes  #[60.0,111.0,162.0,213.0,264.0,315.0]

"""
#这一步要仔细理解,即计算卷积层产生的default_box距离原图的步长,先验框中心点的坐标会乘以step,相当于从feature map位置映射回原图位置,比如conv4_3输出特征图大小为38*38,而输入的图片为300*300,所以38*8约等于300,所以映射步长为8。这是针对300*300的训练图片。  
"""
steps = [8, 16, 32, 64, 100, 300]  


aspect_ratios = [[2], [2, 3], [2, 3], [2, 3], [2], [2]]  
"""
#这里指的是横纵比,六种尺度对应六个产生default_box的卷积层。具体可查看生成的train.prototxt文件一一对应每层的aspect_ratio参数,此参数在caffe.proto中有定义,关于aspect_ratios如何把其内容传递给了aspect_ratio,在model_libs.py文件中有详细定义。    
"""
 min_size(Sk)max_size(Sk+1)
conv4_33060
fc760111
conv6_2111162
conv7_2162213
conv8_2213264
conv9_2264315

3)产生最终default bbox:

  • 以feature map上每个点的中点为中心(offset=0.5),生成一些列同心的default box(然后中心点的坐标会乘以step,相当于从feature map位置映射回原图位置)
  • 正方形default box最小边长为:min\_size,最大边长为:\sqrt{min\_size\cdot max\_size}
  • 在prototxt设置一个aspect ratio,会生成2个长方形,长宽为: \sqrt{aspect\_ratio}\cdot min\_size和 \frac{1}{\sqrt{aspect\_ratio}}\cdot min\_size

a).接着上述代码:

aspect_ratios = [[2], [2, 3], [2, 3], [2, 3], [2], [2]]  

对于:[2]-->如上图产生两个正方形+两个矩形=4个候选框

           [2,3]-->产生两个正方形+四个矩形框=6个候选框

           .....以此类推

b).将候选框映射回原图,则是将坐标乘以代码中给出的steps就可以惹:

steps = [8, 16, 32, 64, 100, 300]  

4)最终的prior bbox:

回归之后的bbox送去计算loss,default box 会生成prior box。

后续通过softmax分类+bounding box regression即可从priox box中预测到目标。

2.关于SSD的输入图像的预处理及数据增强:

1.mirror、mean:

  • 镜像,均值
mirror: true#开启镜像 
	#图像均值
    mean_value: 104
    mean_value: 117
    mean_value: 123

2.resize_param:

  • resize图像至固定大小
    #resize文件
    resize_param {
      prob: 1
      resize_mode: WARP
      height: 300
      width: 300
      interp_mode: LINEAR
      interp_mode: AREA
      interp_mode: NEAREST
      interp_mode: CUBIC
      interp_mode: LANCZOS4
    }
    

3.emit_constraint:

  • 给定注释的条件[不明白...]
    emit_constraint {
      emit_type: CENTER
    }

4.distort_param:

    distort_param {
      brightness_prob: 0.5 #调整亮度的概率
      #调整像素的范围
      brightness_delta: 32.0  #添加像素值,对原图增加-32至32中的随机像素值

      contrast_prob: 0.5   #调整对比度的概率
      contrast_lower: 0.5  #随机对比因子的下界
      contrast_upper: 1.5  #随机对比因子的上界

      hue_prob: 0.5  #调整色调的概率
      hue_delta: 18.0  #调整色调通道数量

      saturation_prob: 0.5  #调整饱和度的概率
      saturation_lower: 0.5 #调整饱和因子的上界
      saturation_upper: 1.5 #调整饱和因子的下界
      random_order_prob: 0.0 #随机排列图像通道的概率
    }

5.expand_param:

    expand_param {
      prob: 0.5 //expand发生的概率
      max_expand_ratio: 4 //expand的扩大倍数
    }
  • expand是指对图像进行缩小,图像的其余区域补0。
  • 目的是在数据处理阶段增加多尺度的信息:大object通过expand方法的处理可以变成小尺度的物体训练。提高ssd对尺度的泛化性。

 

这里写图片描述

 

6.data_param:

  • 给data数据
  data_param {
    source: "/ssd/caffe/data/VOC0712/lmdb/VOC0712_trainval_lmdb"
    batch_size: 8
    backend: LMDB
  }
  

7.annotated_data_param:

  • 以下有7个batch_sampler
  • batch_sampler是对图像选取一个满足限制条件的区域(注意这个区域是随机抓取的)。限制条件就是抓取的patch和GT(Ground Truth)的IOU的值。
  • 以如下代码为例:
    batch_sampler {
      sampler {
        min_scale: 0.3
        max_scale: 1.0
        min_aspect_ratio: 0.5
        max_aspect_ratio: 2.0
      }
      sample_constraint {
        min_jaccard_overlap: 0.9
      }
      max_sample: 1
      max_trials: 50
    }

步骤是:先在区间[min_scale,max_sacle]内随机生成一个值,这个值作为patch的高Height,然后再在[min_aspect_ratio,max_aspect_ratio]范围内生成ratio,从而得到patch的Width。(归一化了)

patch的宽和高随机得到了,然后在图像中进行一次patch,要求满足与GT的最小IOU是0.9,也就是IOU>=0.9。如果随机patch满足这个条件,那么张图会被resize到300*300(在SSD300*300中)送进网络训练。如下图。

max_sample为1,即在该batch_sampler条件下,只需要找到一个满足条件的sample_box;

max_trails为50,即在该batch_sampler条件下,会尝试50次上述操作。

annotated_data_param {
    batch_sampler {
      max_sample: 1
      max_trials: 1
    }
    batch_sampler {
      sampler {
        min_scale: 0.3
        max_scale: 1.0
        min_aspect_ratio: 0.5
        max_aspect_ratio: 2.0
      }
      sample_constraint {
        min_jaccard_overlap: 0.1
      }
      max_sample: 1
      max_trials: 50
    }
    batch_sampler {
      sampler {
        min_scale: 0.3
        max_scale: 1.0
        min_aspect_ratio: 0.5
        max_aspect_ratio: 2.0
      }
      sample_constraint {
        min_jaccard_overlap: 0.3
      }
      max_sample: 1
      max_trials: 50
    }
    batch_sampler {
      sampler {
        min_scale: 0.3
        max_scale: 1.0
        min_aspect_ratio: 0.5
        max_aspect_ratio: 2.0
      }
      sample_constraint {
        min_jaccard_overlap: 0.5
      }
      max_sample: 1
      max_trials: 50
    }
    batch_sampler {
      sampler {
        min_scale: 0.3
        max_scale: 1.0
        min_aspect_ratio: 0.5
        max_aspect_ratio: 2.0
      }
      sample_constraint {
        min_jaccard_overlap: 0.7
      }
      max_sample: 1
      max_trials: 50
    }
    batch_sampler {
      sampler {
        min_scale: 0.3
        max_scale: 1.0
        min_aspect_ratio: 0.5
        max_aspect_ratio: 2.0
      }
      sample_constraint {
        min_jaccard_overlap: 0.9
      }
      max_sample: 1
      max_trials: 50
    }
    batch_sampler {
      sampler {
        min_scale: 0.3
        max_scale: 1.0
        min_aspect_ratio: 0.5
        max_aspect_ratio: 2.0
      }
      sample_constraint {
        max_jaccard_overlap: 1.0
      }
      max_sample: 1
      max_trials: 50
    }
	#类别标签信息
    label_map_file: "data/VOC0712/labelmap_voc.prototxt"
  }
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值