Light-Head R-CNN

titile Light-Head R-CNN: In Defense of Two-Stage Object Detector
url https://arxiv.org/pdf/1711.07264.pdf
动机 two-stage由于ROI处密集计算和heavy-head design影响运行速度(Faster RCNN:两层全卷积;R-FCN:large score maps)
内容 Light-Head R-CNN:
a thin feature map and a cheap R-CNN subnet (pooling and single fully-connected layer)。
R-CNN subnet and ROI warping
R-CNN subnet :
1、Faster RCNN:
two large fully connected layers提高分类性能。
proposals较多时,计算密集。
global average pooling减少第一个全连接层的计算会影响空间定位。
2、R-FCN:
large score map:channel数为classes × p × p。
computation-free R-CNN subnet:position-sensitive pooling后直接pooling进行prediction,不如Faster RCNN RoI-wise性能好。
3、全连接层的computation and memory cost主要由于ROI之后channel数较多。


Thin feature maps for RoI warping
1、thin feature maps :提高准确性,减少训练和inference的内存和计算量。
2、 PSRoI pooling:更多计算增强R-CNN,减少通道。
3、 RoI pooling:减少R-CNN开销,不使用Global Average Pooling,提高性能。

Light-Head R-CNN for Object Detection:
L:large backbone network,S:small backbone network

Basic feature extractor:
L:ResNet 101。
S: Xception-like small base model。

Thin feature maps
L:Cin = C5;k:15; Cmid = 64(S), Cmid = 256(L);Cout = 10×p×p;
large kernel,更大的感受野,feature maps we pooled on are more powerful。
R-CNN subnet:
1、single 全连接层(2048 channels (no dropout))
2、两个同级的全连接层预测RoI分类和回归(4 channels)。
3、RoI warping:Light- Head R-CNN achieve remarkable results, while keeping the efficiency。

RPN:
1、three aspect ratios{1:2, 1:1, 2:1} and five scales {322, 642, 1282, 2562, 5122}。
2、NMS:0.7。
实验 Implementation Details:
backbone:initialized based on the pretrained ImageNet base model;
pooling size:7。
each image has 2000/1000 RoIs for training/testing。

Ablation Experiments:

Baselines
1、resize:[800, 1200]
2、 double regression loss
3、256 samples ranked based on the loss for backpropagation,2000 RoIs per image for training and 1000 RoIs for testing
Thin feature maps for RoI warping
图4与original R-FCN不同(为了验证减少channel 的影响):
1、channel由3969 (81 × 7 × 7) 减少到490 (10 × 7 × 7) for PSRoI pooling
2、 修改channel数,无法直接为prediction(81类),加全连接层prediction。
可以增加feature pyramid network,original R-FCN由于memory consumption限制很难增加(Conv2)
RoI pooling替换PSRoI pooling,增加0.3,RoI pooling更多features (49x),用计算量换精度。

Large separable convolution:
R-CNN subnet:
Light-Head R-CNN: High Accuracy:
Light-Head R-CNN: High Speed:
S:xception backbone
fast inference speed改动:
1、tiny xception替换Resnet-101。
2、去掉atrous algorithm,与small backbone比计算量大。
3、RPN convolution to 256 channels(与origin比减半)。
4、large separable convolution:kernel size = 15,Cmid = 64,Cout = 490 (10 × 7 × 7),middle channels非常小,所以大kernel size也可以做到高效。
5、PSPooling with alignment:pooling后channel减少k × k倍,如果使用RoI-align效果会更好。
思考
补充 xception中reps代表block的中relu-SeparableConv2d-bn循环的数目,下面是xception中的block代码(非Light-Head R-CNN作者源码),stride=2是最后通过 MaxPool2d实现的。代码
class Block(nn.Module):
    def __init__(self,in_filters,out_filters,reps,strides=1,start_with_relu=True,grow_first=True):
        super(Block, self).__init__()

        if out_filters != in_filters or strides!=1:
            self.skip = nn.Conv2d(in_filters,out_filters,1,stride=strides, bias=False)
            self.skipbn = nn.BatchNorm2d(out_filters)
        else:
            self.skip=None

        rep=[]

        filters=in_filters
        if grow_first:
            rep.append(nn.ReLU(inplace=True))
            rep.append(SeparableConv2d(in_filters,out_filters,3,stride=1,padding=1,bias=False))
            rep.append(nn.BatchNorm2d(out_filters))
            filters = out_filters

        for i in range(reps-1):
            rep.append(nn.ReLU(inplace=True))
            rep.append(SeparableConv2d(filters,filters,3,stride=1,padding=1,bias=False))
            rep.append(nn.BatchNorm2d(filters))

        if not grow_first:
            rep.append(nn.ReLU(inplace=True))
            rep.append(SeparableConv2d(in_filters,out_filters,3,stride=1,padding=1,bias=False))
            rep.append(nn.BatchNorm2d(out_filters))

        if not start_with_relu:
            rep = rep[1:]
        else:
            rep[0] = nn.ReLU(inplace=False)

        if strides != 1:
            rep.append(nn.MaxPool2d(3,strides,1))
        self.rep = nn.Sequential(*rep)

    def forward(self,inp):
        x = self.rep(inp)

        if self.skip is not None:
            skip = self.skip(inp)
            skip = self.skipbn(skip)
        else:
            skip = inp

        x+=skip
        return x
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,634评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,951评论 3 391
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,427评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,770评论 1 290
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,835评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,799评论 1 294
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,768评论 3 416
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,544评论 0 271
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,979评论 1 308
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,271评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,427评论 1 345
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,121评论 5 340
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,756评论 3 324
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,375评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,579评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,410评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,315评论 2 352