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
B
]Œ—_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 rrr#)r$ÚxÚidentityÚoutr,r,r-Úforward;s
 
 
 
 
 
 
 
zBasicBlock.forward)FFr    Nr)Ú__name__Ú
__module__Ú __qualname__Ú    expansionrr1Ú __classcell__r,r,)r+r-r&srcs*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)rrr)rrrrT)r)rr7rrrrrrrrrr5Úconv3Úbn3rr rr!r"r#r)    r$r%r&r'r(r)rr#r*)r+r,r-rQs     
zBottleneck.__init__cCsˆ|}| |¡}| |¡}| |¡}| |¡}| |¡}| |¡}| |¡}| |¡}| |¡}|jdk    rr| |¡}||7}| |¡}|S)N)    rrr rrr9r:r!r#)r$r.Zresidualr0r,r,r-r1fs
 
 
 
 
 
 
 
 
 
 
 
zBottleneck.forward)FFr    Nr)r2r3r4r5rr1r6r,r,)r+r-r7Nsr7cs>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ééF)rrrrT)rr    )rrrré€éi)r))r%rrrrrrrrr Ú    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_layers)r+r,r-rs
 
 zResNet.__init__r    ÚBNFc
Cs®d}|dks|j||jkrLt tj|j||jd|ddt|||jƒ¡}g}    |     ||j||||||ƒ¡||j|_x*td|ƒD]}
|     ||j||||ƒ¡q„Wtj|    ŽS)Nr    F)rrr)r%r5rÚ
SequentialrrÚappendÚrange) r$rPr&Úblocksrr'r(r)r#rQÚir,r,r-rC”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)r@)r)Ú.0Ú_)r'r,r-ú
<listcomp>§sz*ResNet._build_nonlocal.<locals>.<listcomp>rcsg|]}ˆd|d‘qS)rr    r,)rYrX)rQr,r-r[¨scsg|]}tdˆƒ‘qS)i)r)rYrZ)r'r,r-r[ªsr    csg|]}ˆd|d‘qS)r    r,)rYrX)rQr,r-r[«scsg|]}tdˆƒ‘qS)i)r)rYrZ)r'r,r-r[­sr>csg|]}ˆd|d‘qS)r>r    r,)rYrX)rQr,r-r[®scsg|]}tdˆƒ‘qS)i)r)rYrZ)r'r,r-r[°srcsg|]}ˆd|d‘qS)rr    r,)rYrX)rQr,r-r[±s) rÚ
ModuleListrVÚNL_1ÚsortedrJÚNL_2rKÚNL_3rLÚNL_4rM)r$rQrRr'r,)r'rQr-rI¥s   zResNet._build_nonlocalc Cs| |¡}| |¡}| |¡}| |¡}d}t|jƒdkrBdg|_xVtt|jƒƒD]D}|j||ƒ}||j|krR|j\}}}}|j    ||ƒ}|d7}qRWd}t|j
ƒdkr´dg|_
xVtt|j ƒƒD]D}|j ||ƒ}||j
|krÄ|j\}}}}|j ||ƒ}|d7}qÄWd}    t|j ƒdkr(dg|_ xZtt|jƒƒD]H}|j||ƒ}||j |    kr8|j\}}}}|j|    |ƒ}|    d7}    q8Wd}
t|jƒdkr dg|_xZtt|jƒƒD]H}|j||ƒ}||j|
kr°|j\}}}}|j|
|ƒ}|
d7}
q°W|S)Nréÿÿÿÿr    )rrr rBÚlenrJrVrDÚshaper]rKrEr_rLrFr`rMrGra) r$r.Z NL1_counterrXrZÚCÚHÚWZ NL2_counterZ NL3_counterZ NL4_counterr,r,r-r1³sR
 
 
 
  zResNet.forwardc    Cs†x€| ¡D]t}t|tjƒrR|jd|jd|j}tj |jdt     
d|¡¡q
t|tj ƒr
tj  |jd¡tj  |j d¡q
WdS)Nrr    g@)ÚmodulesÚ
isinstancerrrÚ out_channelsÚinitÚnormal_ÚweightÚmathÚsqrtÚ BatchNorm2dÚ    constant_r)r$ÚmÚnr,r,r-rHãs  zResNet.random_init)r    rSFF)    r2r3r4rrCrIr1rHr6r,r,)r+r-r;~s
 
0r;c
 
sòddl‰ddl}ddl}‡fdd„}|ƒ}ˆj |d¡}yˆ |¡Wn2tk
rx}z|j|jkrfn‚Wdd}~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)Úosr,r-Ú_get_torch_homeösz0init_pretrained_weights.<locals>._get_torch_homeÚ checkpointsú/rbF)ÚquietzLoading pretrained model from Úcpu)Ú map_location)rÚerrnoÚgdownrwrzÚmakedirsÚOSErrorÚEEXISTÚ
model_urlsÚsplitÚexistsr Zis_main_processÚdownloadÚ synchronizeÚloggerÚinforvÚloadÚdevice)
Úkeyr†r‡r€r~Ú    model_dirÚeÚfilenameÚ cached_fileÚ
state_dictr,)rr-Ú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|y(t j|t  d    ¡d
} t d |›¡Wnhtk
rH}zt |›d ¡|‚Wd d }~XYn2tk
rx}zt d¡|‚Wd d }~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.
    r>rr8éé)r r rrré    r„)r…zLoading pretrained model from 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_NLZDEPTHrr7r;rvr’r“rr‘ÚFileNotFoundErrorÚKeyErrorršÚload_state_dictÚ missing_keysrÚunexpected_keysr)ÚcfgZpretrainZ pretrain_pathrNr'r(r)rOÚdepthZnum_blocks_per_stageZnl_layers_per_stagerPÚmodelr™r–r”Z incompatibler,r,r-Úbuild_resnet_backbone sd    
 
 
 
 
 
 
 
 
 
 
 
 
 
 
  rª)Ú__doc__ÚloggingrnrvrrQrrrrÚutils.checkpointrrÚbuildr
Úutilsr Ú    getLoggerr2rr‹ÚModulerr7r;ršÚregisterrªr,r,r,r-Ú<module>s.   
(0o3