Mask RCNN之mmdetection配置文件解讀

根據(jù)mmDetection的mask rcnn的配置文件來進(jìn)行理解囊颅。

網(wǎng)絡(luò)結(jié)構(gòu)

model = dict(
    type='MaskRCNN',
    pretrained='torchvision://resnet50',
    backbone=dict(
        type='ResNet',
        depth=50,
        num_stages=4,
        out_indices=(0, 1, 2, 3),  #使用resnet50作為主干網(wǎng)絡(luò)瀑构,/4辖所,/8叁执,/16咙俩,/32作為FPN的輸入
        frozen_stages=1, #stage 1及其之前層不進(jìn)行參數(shù)更新僧凤,-1表示參數(shù)都更新
        norm_cfg=dict(type='BN', requires_grad=True),
        style='pytorch'),
    neck=dict(
        type='FPN',
        in_channels=[256, 512, 1024, 2048], 
        out_channels=256, #利用1*1的卷積改變通道數(shù)蜻拨,低分辨率的進(jìn)行最近鄰上采樣,然后進(jìn)行相鄰尺度的相加融合眠冈,然后通過3*3的卷積進(jìn)行輸出飞苇。
        num_outs=5), #此處額外加了一個(gè)尺度輸出菌瘫,即在/32尺度利用2*2的最大池化輸出\64尺度。一起作為RPN網(wǎng)絡(luò)的輸入布卡。
    rpn_head=dict(
        type='RPNHead',
        in_channels=256,
        feat_channels=256,
        anchor_scales=[8], 
        anchor_ratios=[0.5, 1.0, 2.0], #3個(gè)base_anchors雨让,面積一樣。其中1.0表示8*8的大小忿等,數(shù)值表示長(zhǎng)寬比栖忠。
        anchor_strides=[4, 8, 16, 32, 64], #對(duì)于輸入的5個(gè)尺度,生成對(duì)應(yīng)的anchor贸街。設(shè)有A個(gè)anchors (1, A, 4)庵寞, 有K個(gè)shifts (K, 1, 4),
                                            #其中K為特征圖的大小W*H薛匪,得到(K*A, 4)的坐標(biāo)值捐川。
                                            #shift_x = torch.arange(0, feat_w, device=device) * stride
                                           #shift_y = torch.arange(0, feat_h, device=device) * stride
                                           #shift_xx, shift_yy = self._meshgrid(shift_x, shift_y)
                                           #shifts = torch.stack([shift_xx, shift_yy, shift_xx, shift_yy], dim=-1)
        target_means=[.0, .0, .0, .0],
        target_stds=[1.0, 1.0, 1.0, 1.0],
        loss_cls=dict(
            type='CrossEntropyLoss', use_sigmoid=True, loss_weight=1.0),
        loss_bbox=dict(type='SmoothL1Loss', beta=1.0 / 9.0, loss_weight=1.0)), #RPN網(wǎng)絡(luò)有2條支路——分類支路(anchor數(shù)目*2,
                                                                  #如果使用sigmoid逸尖,不需要乘2 )古沥,和回歸支路(anchor數(shù)目*4)
    bbox_roi_extractor=dict(
        type='SingleRoIExtractor',
        roi_layer=dict(type='RoIAlign', out_size=7, sample_num=2),
        out_channels=256,
        featmap_strides=[4, 8, 16, 32]), #ROI Align層,對(duì)于一個(gè)ROI娇跟,根據(jù)其大小岩齿,進(jìn)行映射,取相應(yīng)的尺度上的特征圖苞俘。
                                        #- scale < finest_scale * 2: level 0
                                       #- finest_scale * 2 <= scale < finest_scale * 4: level 1
                                       #- finest_scale * 4 <= scale < finest_scale * 8: level 2
                                       #- scale >= finest_scale * 8: level 3
    bbox_head=dict(
        type='SharedFCBBoxHead',
        num_fcs=2,
        in_channels=256,
        fc_out_channels=1024,
        roi_feat_size=7,
        num_classes=81,
        target_means=[0., 0., 0., 0.],
        target_stds=[0.1, 0.1, 0.2, 0.2], #預(yù)測(cè)的dx和dy需要*0.1,dw和dh需要*0.2
        reg_class_agnostic=False,
        loss_cls=dict(
            type='CrossEntropyLoss', use_sigmoid=False, loss_weight=1.0),
        loss_bbox=dict(type='SmoothL1Loss', beta=1.0, loss_weight=1.0)), #輸入7*7的ROI 特征盹沈,進(jìn)行類別預(yù)測(cè)和框的回歸
    mask_roi_extractor=dict(
        type='SingleRoIExtractor',
        roi_layer=dict(type='RoIAlign', out_size=14, sample_num=2),
        out_channels=256,
        featmap_strides=[4, 8, 16, 32]), #ROI Align層,同上吃谣,只是輸出大小為14*14
    mask_head=dict(
        type='FCNMaskHead',
        num_convs=4,
        in_channels=256,
        conv_out_channels=256,
        num_classes=81,
        loss_mask=dict(
            type='CrossEntropyLoss', use_mask=True, loss_weight=1.0))) #輸入14*14的ROI特征襟诸,F(xiàn)CN進(jìn)行Mask預(yù)測(cè)

訓(xùn)練

train_cfg = dict(
    rpn=dict(
        assigner=dict(
            type='MaxIoUAssigner',
            pos_iou_thr=0.7,
            neg_iou_thr=0.3,
            min_pos_iou=0.3,
            ignore_iof_thr=-1),#對(duì)于每個(gè)box,分配真值框或者背景基协。遍歷每個(gè)bbox歌亲,
         #與一gt的iou超過pos_iou_thr為正樣本,與所有g(shù)t的iou低于neg_iou_thr的為負(fù)樣本澜驮。
         #遍歷每個(gè)gt陷揪,如果與其最重合的box的iou大于min_pos_iou,此gt分配給此box杂穷。
        sampler=dict(
            type='RandomSampler',
            num=256,
            pos_fraction=0.5,
            neg_pos_ub=-1,
            add_gt_as_proposals=False),#采樣正負(fù)樣本悍缠,進(jìn)行損失計(jì)算
        allowed_border=0,
        pos_weight=-1,
        debug=False),
    rpn_proposal=dict(
        nms_across_levels=False,
        nms_pre=2000,
        nms_post=2000,
        max_num=2000,
        nms_thr=0.7,
        min_bbox_size=0),#按照置信度選取前nms_pre的前景,進(jìn)行nms
                        #然后選前nms_post個(gè)框耐量,送入bbox分支
    rcnn=dict(
        assigner=dict(
            type='MaxIoUAssigner',
            pos_iou_thr=0.5,
            neg_iou_thr=0.5,
            min_pos_iou=0.5,
            ignore_iof_thr=-1), #同上
        sampler=dict(
            type='RandomSampler',
            num=512,
            pos_fraction=0.25,
            neg_pos_ub=-1,
            add_gt_as_proposals=True),#同上
        mask_size=28,
        pos_weight=-1,
        debug=False))

推理

#推理時(shí)飞蚓,rpn網(wǎng)絡(luò)輸出roi,roi特征圖輸入bbox分支廊蜒,得到預(yù)測(cè)框趴拧。
#預(yù)測(cè)的框所對(duì)應(yīng)的特征圖輸入到mask分支溅漾。
test_cfg = dict(
    rpn=dict(
        nms_across_levels=False,
        nms_pre=1000,
        nms_post=1000,
        max_num=1000,
        nms_thr=0.7,
        min_bbox_size=0), #1000個(gè)roi框送到bbox分支中
    rcnn=dict(
        score_thr=0.05,
        nms=dict(type='nms', iou_thr=0.5),
        max_per_img=100,
        mask_thr_binary=0.5))  #100個(gè)bbox分支預(yù)測(cè)框送入到mask分支中
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市著榴,隨后出現(xiàn)的幾起案子添履,更是在濱河造成了極大的恐慌,老刑警劉巖脑又,帶你破解...
    沈念sama閱讀 218,386評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件暮胧,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡问麸,警方通過查閱死者的電腦和手機(jī)往衷,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,142評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來严卖,“玉大人席舍,你說我怎么就攤上這事⊥铮” “怎么了?”我有些...
    開封第一講書人閱讀 164,704評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵驮捍,是天一觀的道長(zhǎng)疟呐。 經(jīng)常有香客問我,道長(zhǎng)东且,這世上最難降的妖魔是什么启具? 我笑而不...
    開封第一講書人閱讀 58,702評(píng)論 1 294
  • 正文 為了忘掉前任,我火速辦了婚禮珊泳,結(jié)果婚禮上鲁冯,老公的妹妹穿的比我還像新娘。我一直安慰自己色查,他們只是感情好薯演,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,716評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著秧了,像睡著了一般跨扮。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上验毡,一...
    開封第一講書人閱讀 51,573評(píng)論 1 305
  • 那天衡创,我揣著相機(jī)與錄音,去河邊找鬼晶通。 笑死璃氢,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的狮辽。 我是一名探鬼主播一也,決...
    沈念sama閱讀 40,314評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼巢寡,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了塘秦?” 一聲冷哼從身側(cè)響起讼渊,我...
    開封第一講書人閱讀 39,230評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎尊剔,沒想到半個(gè)月后爪幻,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,680評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡须误,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,873評(píng)論 3 336
  • 正文 我和宋清朗相戀三年挨稿,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片京痢。...
    茶點(diǎn)故事閱讀 39,991評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡奶甘,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出祭椰,到底是詐尸還是另有隱情臭家,我是刑警寧澤,帶...
    沈念sama閱讀 35,706評(píng)論 5 346
  • 正文 年R本政府宣布方淤,位于F島的核電站钉赁,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏携茂。R本人自食惡果不足惜你踩,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,329評(píng)論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望讳苦。 院中可真熱鬧带膜,春花似錦、人聲如沸鸳谜。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,910評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽咐扭。三九已至束莫,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間草描,已是汗流浹背览绿。 一陣腳步聲響...
    開封第一講書人閱讀 33,038評(píng)論 1 270
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留穗慕,地道東北人饿敲。 一個(gè)月前我還...
    沈念sama閱讀 48,158評(píng)論 3 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像逛绵,于是被迫代替她去往敵國(guó)和親怀各。 傳聞我的和親對(duì)象是個(gè)殘疾皇子倔韭,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,941評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容