Outline
- 作者信息:
- 一作Wei Liu, UNC phd,citation 8251,研究领域CV,object detection
- 2016年SSD ECCV
- 同年 Fast single shot detection and pose estimation 3DV
- 2017年DSSD Frustum PointNets for 3D Object Detection from RGB-D Data preprint于arXiv
- 二作Dragomir Anguelov,17年发表CVPR, CoRR两篇二作,Stanford Univ. 研究领域Object detection
- 三作Dumitru Erhan, google brain senior,citation 15278
- 通讯作者Alex. Berg, UNC教授,一作导师,研究领域CV, citation 18407
- 关于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。
- 但是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更好的排列,分布更均匀
- - labeling: matching strategy (which boxes are Pos)
- 实验
- - 数据集:
- - 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中的类大体重合)
- - PASCAL VOC数据集, 包括20个目标超过11,000图像,超过27,000目标bounding box。其数据集图像质量好,标注完备,非常适合用来测试算法性能.
- - 参数
- - 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
- - 如果没有使用高层,去掉影响不大
- - 更多ratio更好:
- - info
- - 实验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
- 需要人工设置prior box的min_size,max_size和aspect_ratio值。网络中prior box的基础大小和形状不能直接通过学习获得,而是需要手工设置。而网络中每一层feature使用的prior box大小和形状恰好都不一样,导致调试过程非常依赖经验。
- 问题
- 对比方式:不一定更快
- 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被检测到(不被遗漏)。
- 否则可能有更多gt没有一个inference box能match上他的问题。有更多的matching bbox可以增加正例,并让更多的gt被检测到(不被遗漏)。
- 关于实验
- AR的实验是否合理?
- 关于ar的实验,之前认为bbox的数量没有保持不变所以有问题,但是实际上这两个属性出发点是一样的,都是为了更好地fit物体,所以上面的ref的slides里面并没有说AR而是说了box更多更好。
因为更多的tiling about box就是通过增加AR实现的。所以作者并没有区别更多box和更多aspect ratio,这两个概念在paper里是等同的。
- 关于ar的实验,之前认为bbox的数量没有保持不变所以有问题,但是实际上这两个属性出发点是一样的,都是为了更好地fit物体,所以上面的ref的slides里面并没有说AR而是说了box更多更好。
- faster R-CNN是否具有尺寸不变性
- 文中只是提及了更好的位置不变性(robust to object translation & data augmentation可能less important)。
- AR的实验是否合理?
- 最后提到的比较难解的问题
- 哪个模型的性能会更好???(给出一个整体评价)在实际中应当如何选择?(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非常低。
- 理解:形状一致一个gt会匹配更多的bbox,所以会出现更多的正例,对training收敛有帮助。
- 在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的结果是不准确的。
- matching阶段一个gt匹配了很多的box
- 哪个模型的性能会更好???(给出一个整体评价)在实际中应当如何选择?(TODO)
其他
- mAP计算
- SSD和Faster R-CNN性能对比,如果SSD的input size变为同Faster R-CNN性能会如何变化
- Multi feature map上的scale如何选择(open problem)
- Hard Negtive Mining的目的
- ....