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
U
_”ã@s8ddlZddlmZdgZdd„ZGdd„dejƒZdS)éN)ÚnnÚ ContextBlockcCsŽt|tjƒrTtjj|djddt|ddƒrŠ|djdk    rŠtj |djd¡n6tjj|jddt|dƒrŠ|jdk    rŠtj |jd¡dS)Néÿÿÿÿr)ÚvalÚbias)Ú
isinstancerÚ
SequentialÚinitÚ    constant_ÚweightÚhasattrr)Úm©rú./layers/context_block.pyÚlast_zero_init    s rcs6eZdZd ‡fdd„    Zdd„Zdd„Zd    d
„Z‡ZS) rÚatt©Ú channel_addc
s~tt|ƒ ¡|dkst‚t|ttfƒs,t‚ddg‰t‡fdd„|DƒƒsNt‚t|ƒdksbtdƒ‚||_    ||_
t ||ƒ|_ ||_ ||_|dkr²tj|d    d    d
|_tjd d |_n t d    ¡|_d|krt tj|j    |j d    d
t |j d    d    g¡tjd dtj|j |j    d    d
¡|_nd|_d|krlt tj|j    |j d    d
t |j d    d    g¡tjd dtj|j |j    d    d
¡|_nd|_| ¡dS)N)ÚavgrrZ channel_mulcsg|] }|ˆk‘qSrr)Ú.0Úf©Zvalid_fusion_typesrrÚ
<listcomp>sz)ContextBlock.__init__.<locals>.<listcomp>rz"at least one fusion should be usedré)Ú kernel_sizeé)ÚdimT)Úinplace)ÚsuperrÚ__init__ÚAssertionErrorrÚlistÚtupleÚallÚlenÚinplanesÚratioÚintÚplanesÚ pooling_typeÚ fusion_typesrÚConv2dÚ    conv_maskÚSoftmaxÚsoftmaxÚAdaptiveAvgPool2dÚavg_poolrÚ    LayerNormÚReLUÚchannel_add_convÚchannel_mul_convÚreset_parameters)Úselfr%r&r)r*©Ú    __class__rrrs@  
 
ü
 
üzContextBlock.__init__cCs€|jdkrTtjj|jjddddt|jdƒrL|jjdk    rLtj |jjd¡d|j_    |j
dk    rht |j
ƒ|j dk    r|t |j ƒdS)NrrÚfan_inÚrelu)ÚaÚmodeÚ nonlinearityrT) r)rr    Úkaiming_normal_r,r r rr
Zinitedr3rr4)r6rrrr5=s
 
 
 
zContextBlock.reset_parametersc    Cs–| ¡\}}}}|jdkrˆ|}| ||||¡}| d¡}| |¡}| |d||¡}| |¡}| d¡}t ||¡}| ||dd¡}n
| |¡}|S)Nrrr)    Úsizer)ÚviewÚ    unsqueezer,r.ÚtorchÚmatmulr0)    r6ÚxÚbatchÚchannelÚheightÚwidthZinput_xZ context_maskÚcontextrrrÚ spatial_poolIs
 
 
 
 
 
zContextBlock.spatial_poolcCsP| |¡}|}|jdk    r0t | |¡¡}||}|jdk    rL| |¡}||}|S)N)rJr4rBÚsigmoidr3)r6rDrIÚoutZchannel_mul_termZchannel_add_termrrrÚforwardcs
 
 
 
zContextBlock.forward)rr)Ú__name__Ú
__module__Ú __qualname__rr5rJrMÚ __classcell__rrr7rrs ü' )rBrÚ__all__rÚModulerrrrrÚ<module>s