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
U
_# ã@szdZddlZddlmmZddlmZddlmZmZddl    m
Z
ddl m Z Gdd    „d    ej ƒZGd
d „d ej ƒZdS) z4
@author:  xingyu liao
@contact: liaoxingyu5@jd.com
éN)Únn)ÚConv2dÚReLU)Ú_pairé)Úget_normc s*eZdZdZd‡fd d „    Zd d„Z‡ZS)Ú SplAtConv2dzSplit-Attention Conv2d
    ©rr©rrrTééFNçc sNtt|ƒ ¡t|ƒ}| o0|ddkp0|ddk|_| |_t||    |
dƒ}|    |_||_||_    ||_
|jr¤ddl m }||||    ||||f||    || dœ|—Ž|_ n*t|||    ||||f||    |dœ|—Ž|_ | dk    |_|jrðt| ||    |ƒ|_tdd|_t||d|jd    |_|jr&t| ||ƒ|_t|||    d|jd    |_t|    |ƒ|_dS)
Nrré )ÚRFConv2d)ÚgroupsÚbiasZ average_mode)rrT)Úinplace)r)ÚsuperrÚ__init__rÚrectifyÚ rectify_avgÚmaxÚradixÚ cardinalityÚchannelsÚdropblock_probZrfconvrÚconvrÚuse_bnrÚbn0rÚreluÚfc1Úbn1Úfc2ÚrSoftMaxÚrsoftmax)ÚselfÚ in_channelsrÚ kernel_sizeÚstrideÚpaddingÚdilationrrrZreduction_factorrrZ
norm_layerÚ
num_splitsrÚkwargsÚinter_channelsr©Ú    __class__©ú./layers/splat.pyrsB ÿÿ
ÿÿ
 zSplAtConv2d.__init__c    Cs| |¡}|jr| |¡}|jdkr.| |¡}| |¡}|jdd…\}}|jdkrttj    |||jdd}t
|ƒ}n|}t   |d¡}|  |¡}|jrž| |¡}| |¡}| |¡}| |¡ |ddd¡}|jdkrtj    |||jdd}t
dd„t||ƒDƒƒ}n||}| ¡S)Nr r r©ÚdiméÿÿÿÿcSsg|]\}}||‘qSr0r0)Ú.0ÚattÚsplitr0r0r1Ú
<listcomp>Msz'SplAtConv2d.forward.<locals>.<listcomp>)rrrrZ    dropblockrÚshaperÚtorchr7ÚsumÚFÚadaptive_avg_pool2dr r!r"r$ÚviewÚzipÚ
contiguous)    r%ÚxÚbatchZrchannelZsplitedZgapZattenZattensÚoutr0r0r1Úforward3s.
 
 
 
 
 
 
 
 
 
 
 zSplAtConv2d.forward) r    r
r    rTr r FFNrr )Ú__name__Ú
__module__Ú __qualname__Ú__doc__rrDÚ __classcell__r0r0r.r1rsü rcs$eZdZ‡fdd„Zdd„Z‡ZS)r#cstƒ ¡||_||_dS)N)rrrr)r%rrr.r0r1rTs
zrSoftMax.__init__cCsZ| d¡}|jdkrL| ||j|jd¡ dd¡}tj|dd}| |d¡}n
t     |¡}|S)Nrrr4r r2)
Úsizerr>rÚ    transposer<ÚsoftmaxÚreshaper:Úsigmoid)r%rArBr0r0r1rDYs
 
 
zrSoftMax.forward)rErFrGrrDrIr0r0r.r1r#Ss r#)rHr:Útorch.nn.functionalrÚ
functionalr<Útorch.nnrrZtorch.nn.modules.utilsrÚ
batch_normrÚModulerr#r0r0r0r1Ú<module>s   D