Scheaven
2021-09-18 291deeb1fcf45dbf39a24aa72a213ff3fd6b3405
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
U
]Œ—_0ã
@sÜdZddlZddlZddlZddlmZddlmZmZmZm    Z    ddl
m Z m Z ddl mZddlmZe e¡Zd    d
d d d dddddœ    ZGdd„dejƒZGdd„dejƒZGdd„dejƒZdd„Ze ¡dd„ƒZdS)z9
@author:  liaoxingyu
@contact: sherlockliao01@gmail.com
éN)Únn)ÚIBNÚSELayerÚ    Non_localÚget_norm)Úget_missing_parameters_messageÚ!get_unexpected_parameters_messageé)ÚBACKBONE_REGISTRY)Úcommz9https://download.pytorch.org/models/resnet18-5c106cde.pthz9https://download.pytorch.org/models/resnet34-333f7ec4.pthz9https://download.pytorch.org/models/resnet50-19c8e357.pthz:https://download.pytorch.org/models/resnet101-5d3b4d8f.pthzXhttps://github.com/XingangPan/IBN-Net/releases/download/v1.0/resnet18_ibn_a-2f571257.pthzXhttps://github.com/XingangPan/IBN-Net/releases/download/v1.0/resnet34_ibn_a-94bc1577.pthzXhttps://github.com/XingangPan/IBN-Net/releases/download/v1.0/resnet50_ibn_a-d9d0bb7b.pthzYhttps://github.com/XingangPan/IBN-Net/releases/download/v1.0/resnet101_ibn_a-59ea0ac6.pthz\https://github.com/XingangPan/IBN-Net/releases/download/v1.0/se_resnet101_ibn_a-fabed4e2.pth)    Ú18xÚ34xÚ50xÚ101xZibn_18xZibn_34xZibn_50xZibn_101xZ se_ibn_101xcs*eZdZdZd    ‡fdd„    Zdd„Z‡ZS)
Ú
BasicBlockr    FNéc        s¢tt|ƒ ¡tj||d|ddd|_|r8t||ƒ|_n t||ƒ|_tj||ddddd|_    t||ƒ|_
tj dd|_ |rˆt ||ƒ|_n
t ¡|_||_||_dS)Nér    F©Ú kernel_sizeÚstrideÚpaddingÚbiasT©Úinplace)ÚsuperrÚ__init__rÚConv2dÚconv1rÚbn1rÚconv2Úbn2ÚReLUÚrelurÚseÚIdentityÚ
downsampler©    ÚselfÚinplanesÚplanesÚbn_normÚwith_ibnÚwith_serr%Ú    reduction©Ú    __class__©ú./modeling/backbones/resnet.pyr)s  
zBasicBlock.__init__cCs`|}| |¡}| |¡}| |¡}| |¡}| |¡}|jdk    rJ| |¡}||7}| |¡}|S©N)rrr"rr r%)r'ÚxÚidentityÚoutr0r0r1Úforward;s
 
 
 
 
 
 
 
zBasicBlock.forward)FFr    Nr©Ú__name__Ú
__module__Ú __qualname__Ú    expansionrr6Ú __classcell__r0r0r.r1r&sÿrcs*eZdZdZd
‡fdd„    Zdd    „Z‡ZS) Ú
BottleneckéFr    Nrc        sÐtt|ƒ ¡tj||ddd|_|r4t||ƒ|_n t||ƒ|_tj||d|ddd|_    t||ƒ|_
tj|||j ddd|_ t|||j ƒ|_ tjdd|_|r¶t||j |ƒ|_n
t ¡|_||_||_dS)Nr    F)rrrrTr)rr=rrrrrrrrr r;Úconv3Úbn3r!r"rr#r$r%rr&r.r0r1rQs$  ÿ 
zBottleneck.__init__cCsˆ|}| |¡}| |¡}| |¡}| |¡}| |¡}| |¡}| |¡}| |¡}| |¡}|jdk    rr| |¡}||7}| |¡}|Sr2)    rrr"rr r?r@r#r%)r'r3Zresidualr5r0r0r1r6fs
 
 
 
 
 
 
 
 
 
 
 
zBottleneck.forward)FFr    Nrr7r0r0r.r1r=Nsÿr=cs>eZdZ‡fdd„Zddd„Zdd    „Zd
d „Zd d „Z‡ZS)ÚResNetc            süd|_tƒ ¡tjddddddd|_t|dƒ|_tjdd|_    tj
ddd    d
|_ |  |d|d d    |||¡|_ |  |d |d    d|||¡|_|  |d |dd|||¡|_|j |d|d|||d|_| ¡|rà| |||¡ng|_|_|_|_dS)Né@rééFrTrr    )rrrré€éé)r,)r(rrrrrrrr!r"Ú    MaxPool2dÚmaxpoolÚ _make_layerÚlayer1Úlayer2Úlayer3Úlayer4Ú random_initÚ_build_nonlocalÚNL_1_idxÚNL_2_idxÚNL_3_idxÚNL_4_idx)    r'Ú last_strider*r+r,Úwith_nlÚblockÚlayersÚ
non_layersr.r0r1rs 
ÿ zResNet.__init__r    ÚBNFc
Csªd}|dks|j||jkrLt tj|j||jd|ddt|||jƒ¡}g}    |     ||j||||||ƒ¡||j|_td|ƒD]}
|     ||j||||ƒ¡q‚tj|    ŽS)Nr    F)rrr)r(r;rÚ
SequentialrrÚappendÚrange) r'rWr)Úblocksrr*r+r,r%rXÚir0r0r1rJ”s ÿý zResNet._make_layercs t ‡fdd„t|dƒDƒ¡|_t‡fdd„t|dƒDƒƒ|_t ‡fdd„t|dƒDƒ¡|_t‡fdd„t|dƒDƒƒ|_t ‡fdd„t|d    ƒDƒ¡|_t‡fd
d„t|d    ƒDƒƒ|_    t ‡fd d„t|d ƒDƒ¡|_
t‡fd d„t|d ƒDƒƒ|_ dS)Ncsg|]}tdˆƒ‘qS)rF©r©Ú.0Ú_©r*r0r1Ú
<listcomp>§sz*ResNet._build_nonlocal.<locals>.<listcomp>rcsg|]}ˆd|d‘qS)rr    r0©rbr_©rXr0r1re¨scsg|]}tdˆƒ‘qS)rGr`rardr0r1reªsr    csg|]}ˆd|d‘qS)r    r0rfrgr0r1re«scsg|]}tdˆƒ‘qS)ir`rardr0r1re­srDcsg|]}ˆd|d‘qS)rDr    r0rfrgr0r1re®scsg|]}tdˆƒ‘qS)ir`rardr0r1re°srcsg|]}ˆd|d‘qS)rr    r0rfrgr0r1re±s) rÚ
ModuleListr]ÚNL_1ÚsortedrQÚNL_2rRÚNL_3rSÚNL_4rT)r'rXrYr*r0)r*rXr1rP¥s ÿ ÿ ÿ ÿzResNet._build_nonlocalc Csð| |¡}| |¡}| |¡}| |¡}d}t|jƒdkrBdg|_tt|jƒƒD]D}|j||ƒ}||j|krP|j\}}}}|j    ||ƒ}|d7}qPd}t|j
ƒdkr°dg|_
tt|j ƒƒD]D}|j ||ƒ}||j
|kr¾|j\}}}}|j ||ƒ}|d7}q¾d}    t|j ƒdkr dg|_ tt|jƒƒD]H}|j||ƒ}||j |    kr.|j\}}}}|j|    |ƒ}|    d7}    q.d}
t|jƒdkr”dg|_tt|jƒƒD]H}|j||ƒ}||j|
kr¢|j\}}}}|j|
|ƒ}|
d7}
q¢|S)Nréÿÿÿÿr    )rrr"rIÚlenrQr]rKÚshaperirRrLrkrSrMrlrTrNrm) r'r3Z NL1_counterr_rcÚCÚHÚWZ NL2_counterZ NL3_counterZ NL4_counterr0r0r1r6³sR
 
 
 
 
 
  zResNet.forwardc    Cs‚| ¡D]t}t|tjƒrP|jd|jd|j}tj |jdt     
d|¡¡qt|tj ƒrtj  |jd¡tj  |j d¡qdS)Nrr    g@)ÚmodulesÚ
isinstancerrrÚ out_channelsÚinitÚnormal_ÚweightÚmathÚsqrtÚ BatchNorm2dÚ    constant_r)r'ÚmÚnr0r0r1rOãs   zResNet.random_init)r    rZFF)    r8r9r:rrJrPr6rOr<r0r0r.r1rA~s
 
0rAc
 
sòddl‰ddl}ddl}‡fdd„}|ƒ}ˆj |d¡}zˆ |¡Wn2tk
rx}z|j|jkrfn‚W5d}~XYnXt|     d¡d}ˆj ||¡}ˆj 
|¡sÂt   ¡rÂ|j t||dd    t  ¡t d
|›¡tj|t d ¡d }    |    S) z‡Initializes model with pretrained weights.
 
    Layers that don't match with pretrained layers in name or size are kept unchanged.
    rNc s6d}d}d}ˆj ˆ |ˆj ˆ ||¡d¡¡¡}|S)NÚ
TORCH_HOMEÚXDG_CACHE_HOMEz~/.cacheÚtorch)ÚpathÚ
expanduserÚgetenvÚjoin)ÚENV_TORCH_HOMEÚENV_XDG_CACHE_HOMEÚDEFAULT_CACHE_DIRÚ
torch_home©Úosr0r1Ú_get_torch_homeös
ÿþÿz0init_pretrained_weights.<locals>._get_torch_homeÚ checkpointsú/rnF)ÚquietúLoading pretrained model from Úcpu©Ú map_location)rŒÚerrnoÚgdownrƒr†ÚmakedirsÚOSErrorÚEEXISTÚ
model_urlsÚsplitÚexistsr Zis_main_processÚdownloadÚ synchronizeÚloggerÚinfor‚ÚloadÚdevice)
Úkeyr•r–rrŠÚ    model_dirÚeÚfilenameÚ cached_fileÚ
state_dictr0r‹r1Úinit_pretrained_weightsís*   r©c
Csæ|jjj}|jjj}|jjj}|jjj}|jjj}|jjj}|jjj}|jjj    }ddddgddddgddddgddddgdœ|}    ddddgddddgddddgddddgdœ|}
t
t
t t dœ|} t |||||| |    |
ƒ} |râ|r|z(t j|t  d    ¡d
} t d |›¡Wnhtk
rH}zt |›d ¡|‚W5d }~XYn2tk
rx}zt d¡|‚W5d }~XYnXn(|}|rŽd|}|rœd|}t|ƒ} | j| dd}|jrÊt t|jƒ¡|jrât t|jƒ¡| S)zh
    Create a ResNet instance from config.
    Returns:
        ResNet: a :class:`ResNet` instance.
    rDrr>éé)r r rrré    r’r“r‘z& is not found! Please check this path.Nz3State dict keys error! Please check the state dict.Zibn_Zse_F)Ústrict)ÚMODELÚBACKBONEÚPRETRAINZ PRETRAIN_PATHZ LAST_STRIDEZNORMZWITH_IBNZWITH_SEZWITH_NLZDEPTHrr=rAr‚r¡r¢rŸr ÚFileNotFoundErrorÚKeyErrorr©Úload_state_dictÚ missing_keysrÚunexpected_keysr)ÚcfgZpretrainZ pretrain_pathrUr*r+r,rVÚdepthZnum_blocks_per_stageZnl_layers_per_stagerWÚmodelr¨r¥r£Z incompatibler0r0r1Úbuild_resnet_backbone sx    
 
 
 
 
 
 
 
 
 
 
 
üû
 
 
 
üûüûÿ
ÿÿr¹)Ú__doc__Úloggingrzr‚rrXrrrrÚutils.checkpointrrÚbuildr
Úutilsr Ú    getLoggerr8rŸršÚModulerr=rAr©Úregisterr¹r0r0r0r1Ú<module>s2   
÷ (0o3