Paper Reading: SSD - Script

Outline

- 作者信息:

- 关于Object detection

  • - 输入:图片
  • - 输出:
    • - location
    • - 种类
  • - 评价指标:
    • - mAP
    • - FPS(frame per second)
  • 基于 CNNs 的 Object Detection 的已有工作有哪些?
    • 人脸识别
    • counting
    • 卫星图片物体检测

- 本文的动机

  • - 现在的benchmark(mAP):
    • - 区域推荐 - 学习区域中的特征 - 分类,如state of art Faster R-CNN
  • - benchmark的缺点:
    • - FPS = 7,太慢
  • - 现在的benchmark(FPS then mAP):
    • - 去除regional proposal的end-to-end NN,如state of art YOLO
  • - benchmark的缺点:
    • 速度的优化牺牲了准确率
  • - 所以这篇文章产生了速度快的,准确率高的OD模型:SSD

- Related work

  • (fig*2)
  • [新人Camp][镜像][图灵机2.0][Paper Reading] Template v1.0
  • 分为两大类:sliding window 和 region proposal classification
  • 在CNN之前:state of art 分别是DPM (Deformable(可变形) Part Model) 和 Selective Search
  • 因为R-CNN的诞生,后者成为主流
    • 首先运用selective search得到的region proposals的结果
    • 把上面的结果尺寸变换放入AlexNet中
    • 保留上面f7的输出特征再对针对每个类别训练一个SVM的二分类器,label就是是否属于该类别
    • 测试阶段最后再通过svm的分类器对之前的proposal进行训练,得到每个类别修正之后的bounding box

    • 也就是把卷积网络的输出做svm的分类,结合了Selective search 和 conv network based post-classification
    • R-CNN = Selective search + AlexNet + SVM
  • R-CNN的第一次升级:speed up post-classification, 因为post-classification这个过程十分耗时消耗内存,因为他要将几千个image的裁剪结果进行分类。
    • SPPnet:
      • pros: 发明了spatial pyramid pooling layer, 对区域的大小和规模更加robust
      • 并且让classification layers 复用之前在不同的分辨率的feature map上学习到的特征。
      • SPP layer(ROI pooling layer是SPP layer的特例:相当于只有一层的空间金字塔):把不同尺寸的featrue map上的框框的pooling为相同的,固定大小的feature。
      • 框框从不同到相同的过程:做不同level的pooling,然后把他们pooling的结果串在一起!
    • Fast R-CNN:
      • 运用了SPP layer,去掉SVM部分,把AlexNet最后一层的输出链接到ROI pooling layer上(SPP的特例!),让他尺寸固定。
      • 再把这个固定size的输出分叉,一个去softmax,一个去bbox的回归。
      • loss fun不再是分开的,loss = bounding box regression + conf, 实现了end-to-end tuning
      • Fast R-CNN = Selective search + AlexNet + ROI pooling + 分叉实现两个pred,loss结合两个loss

  • R-CNN系列的第二次升级:改善regional proposal:using deep neural networks
    • MultiBox: 
      • Selective search的缺点:用的是low level的feature
      • 所以用一个separate的神经网络替代
      • pros:regional proposal 准确率更高
      • cons: 太复杂了,两个网络要结合在一起训练比较复杂。
    • Faster R-CNN
      • 利用了RPN:region proposal network
      • pool了mid-level feature
      • 让最终的分类过程不那么expensive
      • RPN中包含了anchor box(fixed)的概念,很想ssd的default box
      • Faster R-CNN = RPN + Fast R-CNN(原来是ss)
      • cons: RPN+Fast R-CNN太复杂了,要分别预训练
      • RPN中的anchor box是为了提取特征(pool feature),生成feature map,再把feature map放到RPN里面得到每个fixed anchor是否有物体,然后把结果放到classification layer里面,找出他的class和bounding regression。
        fast rcnn结构
      • 但是SSD是通过default box同时预测出这一个box中所有种类的box的confidence。
  • 另一个系列:sliding window和ssd是一个系列的,
    • 去掉了proposal的阶段!
    • 直接预测位置+不同种类的object的confidence
    • Overfeat:
      • 把sliding window的过程换成了conv layer,最后的输出是2*2*4的话代表左上右上左下右下分别是四个class的confidence
      • 缺点:loc的精确度太低了
    • Yolo:
      • 使用top most feature map(就是lower feature map,没有经过conv的size收缩)同时提取bbox & all class conf
      • 问题:没有考虑anchor box的不同的aspect ratio
    • SSD vs Overfeat:
      • Oerfeat只用了topmost feature map
      • Overfeat没有使用multi aspect ratio的default box(retio=1)
    • SSD s YOLO:
      • Yolo只用了topmost feature map
      • Yolo没有使用multi aspect ratio的default box
      • YOLO:each grid cell only predicts two boxes,不像ssd那么多类而且还可以有不同的ratio

      • YOLO:can only have one class for one box, 但是SSD的一个default box可以和任何一个IoU > 0.5 的gt match

YOLO认为:

  • DPM(Deformable parts models)太慢太不准
  • R-CNN这个pipeline太慢太复杂,因为要分别tune precisely
  • SS给出的proposal太多了
  • Faster R-CNN:
    • 比R-CNN更快
    • 比R-CNN更准
    • 但还是太慢了 不能real time
  • Deep multibox:
    • Multibox仅仅是ss的替代品
    • 它只是大figure里面的小pipe,不完整
    • 它虽然不用ss但是还用further image patch classification呀
  • Over feat:
    • 是sliding window神一样的改进
    • 但还是disjoined system
    • 只优化了定位,没有优化detection performance
    • 只能看到局部信息,浪费了global info
    • 所以需要后期处理来deal with相连的detection
  • MultiGrasp
    • grasp detection比object detection简单多了
    • 只需要找到图里面的一个object,不需要分来,loc,估计大小,估计boundary
    • 总之功能太弱了

- 性能分析

  • (fig)
  • - why high speed?
    • - 去掉了Regional proposal, feature resampling,subsequent pixel的阶段(as Overfeat和YOLO)。
  • - 但是真的能说明更快吗?
    • - SSD:300*300
    • - YOLO:448*448 (faster than YOLO cuz SSD512 performs faster)
    • - Faster R-CNN:600*1000 (false!)
  • - why high acc?
    • - small conv filter to predict class & bounding box with:
    • - feature maps from different layer - have diff scales of boxes
    • - diff aspect ratio - have diff shapes of boxes
    • - 对于分辨率低的图片(图片更小)有更高的准确率和速度
  • - 所以可能准确性更高了,但是并不能证明速度!



- 核心特征:

  • - 让输出的空间离散+浓密的box分布(从浓密到稀疏)
  • - multi scale feature map prediction
    • - 从多个不同分辨率的feature map上进行不同class的不同位置、不同scale(也就是每个box对应原图的大小)、不同的confidence的default box的class和bounding box偏移的结果。
    • - 和Faster R-CNN的anchor box的区别
      • - Faster & Overfeatr:只在大小固定的feature map上形成一次bounding box
      • - SSD:在不同scale的feature map上分别形成default box
    • - why multi feature maps?
      • - (box num fig)
      • - suitable for multi-size objects (receptive field size) 仿照了从不同尺寸处理照片
      • - 共享参数,用一个kernel conv所有的照片的同feature map的所有position
    • - why multi boxes instead of 1 box per location like Overfeat
      • - more boxes, more densely the space would be separated
      • - more box, higher accuracy of location: (cat dog fig)
  • - a single network
    • - 没有以下操作:
      • - Regional proposal(R-CNN系列)
      • - feature resampling
      • - subsequent pixel(后面两项指的是先有了regional proposal,再从这个region学习新的特征/子特征)
    • - easy to train
    • - straightforward


- 模型描述:

  • (fig.2)
  • - Inference阶段
    • - Input Image
    • - on different feature maps:get the box and class applying small conv kernels (3*3-s1, pad=1)
      • subinput: the conv layer (like conv4_3 result), shape = (h, w, 512)
      • suboutput1: the confidence for each class: shape = (h, w, k*num_class), where k is the box num on each position
      • suboutput1: the loc for each class: shape = (h, w, k*4)
    • - continue conv steps
    • - use nms on each class (before which: threshold selection) cuz so much boxes. IoU > 0.45 per class 中nms,最后keep top200个box。比较耗时
    • - get final boxes
    • - calculate mAP
    • 每一步的输入输出都是什么

这里写图片描述

SSD300, VOC2007

Input layer 300,300,3 VGG16 till conv4_3 38,38,512(conv4_3)    
conv4_3 38,38,512 VGG16 conv4_3 till POOL5(3*3-s1, pad=1) 19,19,512(pool5)

conv 3*3*(4*class)

conv 3*3*(4*4)

38*38*(4*class)

38*38*(4*4)

fc6(conv6) 19,19,512

conv 3*3*1024, same

conv 1*1*1024

19,19,1024(fc7)    
fc7(conv7) 19,19,1024

conv 1*1*256

conv 3*3*512-s2, p=1

10,10,512(conv8_2)

conv 3*3*(6*class)

conv 3*3*(6*4)

19*19*(6*class)

19*19*(6*4)

conv8_2 10,10,512

conv 1*1*126

conv 3*3*256-s2

5,5,256(conv9_2)

conv 3*3*(6*class)

conv 3*3*(6*4)

10*10*(6*class)

10*10*(6*4)

conv9_2 5,5,256

conv 1*1*126

conv 3*3*256-s1

3,3,256(conv10_2)

conv 3*3*(6*class)

conv 3*3*(6*4)

5*5*(6*class)

5*5*(6*4)

conv10_2 3,3,256

conv 1*1*126

conv 3*3*256-s1

1,1,256(conv11_2)

conv 3*3*(4*class)

conv 3*3*(4*4)

3*3*(4*class)

3*3*(4*4)

conv11_2 1,1,256    

conv 3*3*(4*class)

conv 3*3*(4*4)

1*1*(6*class)

1*1*(4*4)

Total boxes: 38*38*4+19*19*6+10*10*6+5*5*6+3*3*4+1*1*4=8732 * class

网络主线时间复杂度:

网络conv detector hierarchy分支的时间复杂度:

  • O(sum(m*n, 3^2, C_featureMapChannel, (#boxPerPosition)(#class+4))

上面二者求和即可

  • - Training阶段
    • - labeling: matching strategy (which boxes are Pos)
      • - match gt to box with highest IoU
      • - match gt to any box with IoU > 0.5
      • - Aim: simplify training,更方便收敛
    • Pos result:
      • 上面有gt相匹配的db
    • TP:
      • 在上面Pos result之中
      • IoU > Threshold
      • Class is corret
    • FP:
      • 在上面的Pos result之中
      • 不是TP的box
    • - how to choose default box
      • - 让scale的分布在每一个feature map上更加均匀,线性递增
      • - (公式)
    • - loss func: SmoothL1(box param) + Softmax(class prob)
      • - why smooth: less sensitive to outliers, small dist -> smaller smooth
      • - loc loss is only about Pos boxes
      • - class loss: all Pos + some Neg
    • - hard negative mining
      • - 为了减少FP,让Neg:pos最大=3:1
      • - 好处:降低FP,训练更快
    • - data aug
      • - 方式:
        • - 水平翻转
        • - 随机裁剪,颜色,扭曲
        • - 随机扩张(zoom out,扩张补灰色)
      • - VOC07: 8.8%mAP
      • - Faster R-CNN不会因此更精准的原因:有一个ROI pooling的过程让图片缩放成一个size,所以对大小十分robust
      • - 对小物体效果好
      • - 但是training需要更长时间的迭代
    • - 需要考虑的参数
      • - tiling of db: position & scale,能否和receptive field更好的排列,分布更均匀


- 实验

  • - 数据集:
    • - PASCAL VOC数据集, 包括20个目标超过11,000图像,超过27,000目标bounding box。其数据集图像质量好,标注完备,非常适合用来测试算法性能. 
      • 特点:数据量少,质量好 + 数据种类少(20)
    • - COCO数据集有超过 200,000 张图片,80种物体类别. 所有的物体实例都用详细的分割mask进行了标注,共标注了超过 500,000 个物体实体
      • 特点:object较小,数据量大,数据种类多(80)
    • - ImageNet数据下的ILSVRC检测数据集分为三个集:train(395,918),val(20,121)和test(40,152)
      • 特点:数据量大 + 数据种类很多(200)
      • - val1用来训练
      • - val2用来测试,其中200个类的类别分布都比较均衡(val1中和val2中的类大体重合)
  • - 参数
    • - 10-3 staging change
    • - 0.9 momentum
    • - 0.0005 weight decay - overfitting
  • - 实验1: PASCAL VOC2007
    • - info
      • - test:4952 (small)
      • - SSD300: 6 maps,SSD512: 7 maps
      • - Xavier init
      • - conv4_3 = 0.1
      • - 为什么conv4_3用了L2 norm来调整scale:lower feature差异较大
      • - lr staging change比较快
    • - SSD512:
      • - 添加了conv12_2上的conv detector
      • - min = 0.15, conv4_3 = 0.07
      • - 为什么scale的最小值要缩小:
        • - 为了让不同的feature map对应的不同的scale更加均匀,对小的物体的检测效果更好。层变多了,如果不改scale,可能scale会集中在0.2-0.9之间,过于密集
      • - 得到更多box
    • - result:
      • 数据集越大mAP越高,从07+12开始超越R-CNN系列
    • - 分析(FIg4)
      • - loc更精准,因为有了更精准的box
      • - simi class难区分,因为两个不同的class可能有很相近的location,比如猫狗那张图片,中间的box会不知道是which one(图猫狗)
      • - 对大小敏感,小物体很差
        • - lower layer, higher 已经不存在了
        • - lower layer, lower feature, 不好classification
        • - lower layer感受野太小,感受不到全局的feature,只能提取到local
      • - 对不同形状因为有不同长款比所以性能很好(放图Fig4)
    • - 优化问题
      • - 更多ratio更好:
        • - 问题,没有保证#box数量不变吧
      • - atrous is faster:
        • - 问题,变量太多了吧:
        • - 2*2 -s2 vs 3*3-s1,
        • - atrous vs no-atrous
      • - conv5_3 pred vs no-conv5_3 pred
      • - multi-scale feature map 更好
        • - 一层一层减少,保证bounding box数量不变,mAP下降
      • - 关于是否应当去掉边界的box:
        • - 如果使用了高层featuremap,去掉会十分影响,因为pruned a lot boxes
        • - 如果没有使用高层,去掉影响不大
  • - 实验2:PASCAL VOC2012
    • - 数据:
      • - trainnval = 12trainval+07trainval + 07test
      • - test = 12test
    • - 参数:iter更多
    • - result:mAP碾压
  • - 实验3:COCO
    • - (table5)
    • - 数据:
      • - 类别非常多(80)
      • - object small
      • - training:trainval35k
      • - test:test-dev2015
    • - 参数:
      • - IoU Pos threshold:mAP@后面的参数的平均值
      • - iter更多
      • - s_min=0.15(512=0.1);conv4_3=0.07(512=0.04)为了检测小的物体,让最小的scale更小
    • - result
      • - SSD300总体来说挺差的,除了在大物体检测的APAR超过了之前的(100个点)要比ION和faster差。
      • - Faster的小物体检测特别好。
      • - SSD512还是碾压的
      • - 关于为什么@0.75似乎比@0.5还要好
        • - 位置准确性:ssd performs better,(loss of loc控制的好)说明了多scale多box的好处:denser
  • - 实验4:ILSVRC的简单训练:
    • - 数据
      • - ILSVRC2013检测数据集分为三个集:train(395,918),val(20,121)和test(40,152)
      • - val1用来训练
      • - val2用来测试,其中200个类的类别分布都比较均衡(val1中和val2中的类大体重合)
    • - 模型:
      • - SSD300:43.4mAP
    • - 参数
      • - lr变化慢,iter非常长

- Future work

  • - Base net speed up
  • - db tiling method

- 总结

  • pros
    • 运行速度可以和YOLO媲美,检测精度可以和Faster RCNN媲美。
    • 因为从输入到输出是一个整体,不像RCNN是先有proposal再进行训练,所以更直观,更easy to train
    • 对于分辨率低的数据也有很好的表现
  • cons
    • 需要人工设置prior box的min_size,max_size和aspect_ratio值。网络中prior box的基础大小和形状不能直接通过学习获得,而是需要手工设置。而网络中每一层feature使用的prior box大小和形状恰好都不一样,导致调试过程非常依赖经验。
      • tiling方案
    • 虽然采用了pyramdial feature hierarchy的思路,但是对小目标的recall依然一般,并没有达到碾压Faster RCNN的级别。由于SSD使用conv4_3低级feature去检测小目标,而低级特征卷积层数少,存在特征提取不充分的问题。
      • data aug
      • 多层的feature没有共享信息,可以考虑FPN结合了每一个feature map的global特征
    • 浪费时间主要在vgg16上
      • basenet提速
    • 最大的FP在于similar class,相邻的class还是不好检测,因为中间的default box(包含了两个类)会不知道自己被放到哪个class里面比较好
      • 提高分辨率,使用更加密集的db
  • 问题
    • 对比方式:不一定更快
    • atrous更好的证明
    • more aspect ratio更好的证明



ssd/ssd_pascal.py

  • benchmark基本信息
  • 列举所有模型、训练相关的参数,定性讨论每个参数对性能的影响

    input wieight & height
    use boundary - 如果使用higher feature map(with hight scale), 性能变差,如果不使用higher feature, 性能没什么大变化
    batch - 有助于FPS,size=8对mAP没有影响
    data aug
    - 裁剪min_jaccard_overlap: 0.1 0.3 0.5 0.7 0.9 (1.0) 有利于识别小物体
    -   num of each min_jaccard_overlap:50
    - aug scale [0.1-1] # 随机裁剪,有利于zoom in功效
    -   aspect ration [0.5-2] #裁剪的aspect ratio,有利于不同形状物体识别
    - distort
    - expandprob:0.5,max_expand_ratio:4.0,zoom out,生成更多的小物体
     
     
     
     
    use batchnorm = False, if true , should use batch norm for all newly added layers因为还没有测试有batchnorm的performance
    如果有BN,base_lr 0.0004, else : 0.00004
     
     
    base_lr 0.00004
    weight_decay = 0.0005 # penalty防止过拟合
    lr_policy = multistep
    stepvalue = 12w,10w,8w # 数据集变大or数据尺寸变大,step也要变大
    momentum = 0.9 # 优化SGD方向
    type:SGD
     
    # multibox params
    n_classes: 21
    bg_lable = 0
    ignore cross boundary bbox = false
    hard negative mining: neg_pos_ratio=3 # 防止过分关注FP
    mining type: max_negative
     
     
    share location: true
    train on diff dt: true ?????
    loc_weight = (neg_pos_ratio + 1.) / 4.如果neg更多,loc的比重应该越大,因为loc里面只有Pos,而conf=Pos + Neg,要多关注TP
     
     
    multibox_loss_param = {
    'loc_loss_type' : P.MultiBoxLoss.SMOOTH_L1, # less sensitive to outliers
    'conf_loss_type' : P.MultiBoxLoss.SOFTMAX,
    'loc_weight' : loc_weight,
    'num_classes' : num_classes,
    'share_location' : share_location,
    'match_type' : P.MultiBoxLoss.PER_PREDICTION,
    'overlap_threshold' : 0.5, # 大于0.5算作匹配,越大匹配的db越少,越不利于训练
    'use_prior_for_matching' : True, # ???
    'background_label_id' : background_label_id,
    'use_difficult_gt' : train_on_diff_gt,
    'mining_type' : mining_type,
    'neg_pos_ratio' : neg_pos_ratio,
    'neg_overlap' : 0.5, # ???
    'code_type' : code_type,
    'ignore_cross_boundary_bbox' : ignore_cross_boundary_bbox,
    }
    loss_param = {
    'normalization' : normalization_mode,
    }
    # feature maps
     
    # 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
    mbox_source_layers = [ 'conv4_3' , 'fc7' , 'conv6_2' , 'conv7_2' , 'conv8_2' , 'conv9_2' ]
     
    # in percent %
    min_ratio = 20
    max_ratio = 90
    step = int (math. floor ((max_ratio - min_ratio) / (len(mbox_source_layers) - 2)))
    min_sizes = []
    max_sizes = []
    for ratio in xrange(min_ratio, max_ratio + 1, step):
    min_sizes.append(min_dim * ratio / 100.)
    max_sizes.append(min_dim * (ratio + step) / 100.)
    min_sizes = [min_dim * 10 / 100.] + min_sizes
    max_sizes = [min_dim * 20 / 100.] + max_sizes
    '' '
    [30.0, 60.0, 111.0, 162.0, 213.0, 264.0]
    [60.0, 111.0, 162.0, 213.0, 264.0, 315.0]
    '' '
    steps = [8, 16, 32, 64, 100, 300] # receptive field
    aspect_ratios = [[2], [2, 3], [2, 3], [2, 3], [2], [2]]
    # L2 normalize conv4_3. # lwoer features have higher var
    normalizations = [20, -1, -1, -1, -1, -1]
    # variance used to encode/decode prior bboxes.
    if code_type == P.PriorBox.CENTER_SIZE:
    prior_variance = [0.1, 0.1, 0.2, 0.2]
    else :
    prior_variance = [0.1]
    flip = True
    clip = False
     
     
     
    # Roughly there are 2000 prior bboxes per image.
    # TODO(weiliu89): Estimate the exact # of priors.
    base_lr *= 2000.
    # Evaluate on whole test set.
    num_test_image = 4952
    test_batch_size = 8
    # Ideally test_batch_size should be divisible by num_test_image,
    # otherwise mAP will be slightly off the true value.
    test_iter = int (math. ceil ( float (num_test_image) / test_batch_size))
    solver_param = {
    # Train parameters
    'base_lr' : base_lr,
    'weight_decay' : 0.0005,
    'lr_policy' : "multistep" ,
    'stepvalue' : [80000, 100000, 120000],
    'gamma' : 0.1,
    'momentum' : 0.9,
    'iter_size' : iter_size,
    'max_iter' : 120000,
    'snapshot' : 80000,
    'display' : 10,
    'average_loss' : 10,
    'type' : "SGD" ,
    'solver_mode' : solver_mode,
    'device_id' : device_id,
    'debug_info' : False,
    'snapshot_after_train' : True,
    # Test parameters
    'test_iter' : [test_iter],
    'test_interval' : 10000,
    'eval_type' : "detection" ,
    'ap_version' : "11point" ,
    'test_initialization' : False,
    }
     
     
     
     
     
    # parameters for generating detection output.
    det_out_param = {
    'num_classes' : num_classes,
    'share_location' : share_location,
    'background_label_id' : background_label_id,
    'nms_param' : { 'nms_threshold' : 0.45, 'top_k' : 400}, # 最终经过nms后保留400个box,overlap > 0.45的进行nms
    'save_output_param' : {
    'output_directory' : output_result_dir,
    'output_name_pix' : "comp4_det_test_" ,
    'output_format' : "VOC" ,
    'label_map_file' : label_map_file,
    'name_size_file' : name_size_file,
    'num_test_image' : num_test_image,
    },
    'keep_top_k' : 200, # 最终经过nms后保留400个box
    'confidence_threshold' : 0.01,
    'code_type' : code_type,
    }
    # parameters for evaluating detection results.
    det_eval_param = {
    'num_classes' : num_classes,
    'background_label_id' : background_label_id,
    'overlap_threshold' : 0.5,
    'evaluate_difficult_gt' : False,
    'name_size_file' : name_size_file,
    }
    e

    Reference:

  • https://confluence.yitu-inc.com/pages/viewpage.action?pageId=280796716 SSD介绍
  • http://blog.csdn.net/kuaitoukid/article/details
  • https://handong1587.github.io/deep_learning/2015/10/09/object-detection.html 历史一览表(这个很全面!!!)
  • https://blog.csdn.net/u014380165/article/details/72824889 conv detector构造
  • https://blog.csdn.net/u013010889/article/details/78670672  Scale计算
  • https://blog.csdn.net/u013010889/article/details/78658135 FPN
  • https://arxiv.org/abs/1506.01497 Faster R-CNN
  • https://arxiv.org/abs/1506.02640 YOLO
  • ECCV Slides


没有想到的点/意识到的问题

  • 关于Presentation
    • 最好直接用原文的英文单词不要自己翻译。
    • 记得列出参考文献。
    • 参数列表应该分类更清晰一些,如training, inference等。

  • 关于算法
    • 正例和负例没有理解对(vs TP FP)
    • 关于matching strategy 是否会导致一只大狗被检测成了两只小狗的问题?
      • 其实不是matching strategy的问题,而是正常的OD算法都存在这个问题,因为几乎任何的OD算法都可能在一个gt上产生多个inference box。
    • 思考:为什么要有这样的matching strategy:
      • 否则可能有更多gt没有一个inference box能match上他的问题。有更多的matching bbox可以增加正例,并让更多的gt被检测到(不被遗漏)。

  • 关于实验
    • AR的实验是否合理?
      • 关于ar的实验,之前认为bbox的数量没有保持不变所以有问题,但是实际上这两个属性出发点是一样的,都是为了更好地fit物体,所以上面的ref的slides里面并没有说AR而是说了box更多更好。
        因为更多的tiling about box就是通过增加AR实现的。所以作者并没有区别更多box和更多aspect ratio,这两个概念在paper里是等同的。
    • faster R-CNN是否具有尺寸不变性
      • 文中只是提及了更好的位置不变性(robust to object translation & data augmentation可能less important)。

  • 最后提到的比较难解的问题
    • 哪个模型的性能会更好???(给出一个整体评价)在实际中应当如何选择?(TODO)
    • e.g.对于自行车,使用1/2和1/1的AR的box,会有什么区别?
      • 理解:形状一致一个gt会匹配更多的bbox,所以会出现更多的正例,对training收敛有帮助。
        可以假设object的AR是8:1的时候用了1:8的AR的default box,会几乎不会有bbox可以匹配到gt上面,所以在训练时这样的gt就会被忽略掉,最终模型可能检测这样的gt的mAP非常低。
    • 在matching阶段用了AR,在计算loss阶段没有使用AR(bug,比如产生box的堆叠),会有什么结果?
      • matching阶段一个gt匹配了很多的box
        相当于在同一个地方用了k个一样的3*3的卷积核,其实是没有区别的。因为在conv detect阶段是不会区分不同ar的(假设计算Loss偏移量L_loc的时候使用了ar的bounding box)。只是在计算loss阶段需要了正例负例的信息,而这些信息是从matching阶段产生的。
      • 如果在通过偏移量计算loss时也忘记了AR,那么这个bug就必须fix掉了...因为inference的结果是不准确的。

其他

  • mAP计算
  • SSD和Faster R-CNN性能对比,如果SSD的input size变为同Faster R-CNN性能会如何变化
  • Multi feature map上的scale如何选择(open problem)
  • Hard Negtive Mining的目的
  • ....

猜你喜欢

转载自blog.csdn.net/weixin_42148236/article/details/80708294