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
B
_# ã@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.pyrs0 
 zSplAtConv2d.__init__c    Cs| |¡}|jr| |¡}|jdkr.| |¡}| |¡}|jdd…\}}|jdkrttj    |||jdd}t
|ƒ}n|}t   |d¡}|  |¡}|jrž| |¡}| |¡}| |¡}| |¡ |ddd¡}|jdkrtj    |||jdd}t
dd„t||ƒDƒƒ}n||}| ¡S)Ngr r)ÚdiméÿÿÿÿcSsg|]\}}||‘qSr/r/)Ú.0ÚattÚsplitr/r/r0ú
<listcomp>Msz'SplAtConv2d.forward.<locals>.<listcomp>)rrrrZ    dropblockrÚshaperÚtorchr5ÚsumÚFÚadaptive_avg_pool2dr r!r"r$ÚviewÚzipÚ
contiguous)    r%ÚxÚbatchZrchannelZsplitedZgapZattenZattensÚoutr/r/r0Úforward3s.
 
 
 
 
 
 
 
 
 
 
 zSplAtConv2d.forward) r    r
r    rTr r FFNrr )Ú__name__Ú
__module__Ú __qualname__Ú__doc__rrBÚ __classcell__r/r/)r.r0rsrcs$eZdZ‡fdd„Zdd„Z‡ZS)r#cstƒ ¡||_||_dS)N)rrrr)r%rr)r.r/r0rTs
zrSoftMax.__init__cCsZ| d¡}|jdkrL| ||j|jd¡ dd¡}tj|dd}| |d¡}n
t     |¡}|S)Nrrr2r )r1)
Úsizerr<rÚ    transposer:ÚsoftmaxÚreshaper8Úsigmoid)r%r?r@r/r/r0rBYs
 
 
zrSoftMax.forward)rCrDrErrBrGr/r/)r.r0r#Ss r#)rFr8Útorch.nn.functionalrÚ
functionalr:Útorch.nnrrZtorch.nn.modules.utilsrÚ
batch_normrÚModulerr#r/r/r/r0Ú<module>s   D