在线时间 1630 小时 最后登录 2024-1-29 注册时间 2017-5-16 听众数 82 收听数 1 能力 120 分 体力 554684 点 威望 12 点 阅读权限 255 积分 171778 相册 1 日志 0 记录 0 帖子 5313 主题 5273 精华 18 分享 0 好友 163
TA的每日心情 开心 2021-8-11 17:59
签到天数: 17 天
[LV.4]偶尔看看III
网络挑战赛参赛者
网络挑战赛参赛者
自我介绍 本人女,毕业于内蒙古科技大学,担任文职专业,毕业专业英语。
群组 : 2018美赛大象算法课程
群组 : 2018美赛护航培训课程
群组 : 2019年 数学中国站长建
群组 : 2019年数据分析师课程
群组 : 2018年大象老师国赛优
骨架图算法Graph Embedded Pose Clustering
/ P) o$ V! ?7 D( C
" h! C" Q2 f1 Z7 I; s1 f/ r3 [ 骨架图算法
% ?* D5 S# H I/ L+ X 8 Z$ o& H3 P3 q' q
N V* P3 _3 I0 O' o4 b" d Graph Embedded Pose Clustering for Anomaly Detection
, I8 j6 a" f) l3 R paper code& e1 n' `& ]% b& `
https://arxiv.org/abs/1912.11850 https://github.com/amirmk89/gepc; B9 D: {: X6 F/ o% u3 x
我们提出了一种用于人类行为异常检测的新方法。我们的方法直接适用于可以从输入视频序列计算的人体姿势图。这使得分析独立于扰动参数,如视点或照明。我们将这些图映射到一个潜在空间并将它们聚类。然后,每个操作都由其对每个聚类的软赋值来表示。这为数据提供了一种“词袋”表示,其中每个动作都由其与一组基本动作词的相似性来表示。然后,我们使用基于狄利克雷过程的混合物,这对于处理比例数据(例如我们的软赋值向量)很有用,以确定一个动作是否正常。9 w; [4 G1 U0 j9 o3 f
% ~% r" ?* U1 f' w+ m
首先,我们对输入数据使用人体姿态检测器。这抽象了问题,并防止下一步处理诸如视点或照明变化等有害参数。人的行为被表示为时空图,我们将其嵌入(第3.1、3.2小节)并聚类(第3.3小节)到一些潜在空间中。现在,每个动作都表示为一组基本动作的软分配向量。这抽象了动作的基本类型(即细粒度或粗粒度),从而进入学习其分布的最后阶段。我们用于学习软分配向量分布的工具是Dirichlet过程混合(第3.4小节),我们将模型拟合到数据中。然后使用该模型确定动作是否正常。3 P4 Z# ~9 V6 F0 h9 ^# [0 o
3 j& K1 ^/ b+ I3 k! l: e1 A$ ~
图的每个节点对应于一个关键点、一个身体关节,每个边表示两个节点之间的某种关系。 存在许多"关键点关系",如解剖学上定义的物理关系(例如,左手腕和肘部连接)和由运动定义的动作关系,这些运动往往在特定动作的上下文中高度相关(例如,跑步时左右膝盖倾向于朝相反方向移动)。图的方向来自于这样一个事实,即一些关系是在优化过程中学习的,并且不是对称的。这种表示的一个好处是紧凑,这对于高效的视频分析非常重要。; ]" M6 w2 }' T h
为了在时间上扩展,将从视频序列中提取的姿势关键点表示为姿势图的时间序列。 时间姿势图是人体关节位置的时间序列。时域邻接可以类似地通过连接连续帧中的关节来定义,允许我们利用姿势图序列的空间和时间维度执行图卷积运算8 j8 h% U! d" O9 d
0 @; M! Y4 R, U2 r7 T- z6 K 我们提出了一种基于深度时态图自动编码器的结构,用于嵌入时态姿态图。 基于图2所示ST-GCN的基本块设计,我们将基本GCN算子替换为新的空间注意力图卷积,如下所示。
( x8 M' n0 M4 o$ N, _% u% m4 _. v
. S* K& g$ R4 C3 `6 v# _ 3.2. Spatial Attention Graph Convolution; g0 a. l$ ], O, B0 t* q
我们提出了一个新的图算子,如图3所示,它使用三种类型的邻接矩阵:静态、全局学习和推断(基于注意力)。每个邻接类型使用单独的权重应用其自己的GCN。3 |0 J }" k0 l8 d" v a/ Q" R
# f8 \( i) c+ P- d, { GCN的输出按通道维度堆叠。采用1×1卷积作为加权叠加输出的可学习缩减度量,并提供所需的输出信道数。
4 _- ~" C/ }" H4 c2 v ( t% v/ a# h' G7 x5 B; S
三个邻接矩阵捕捉了模型的不同方面:% S3 s4 f/ `' }" A1 {5 v
(i)使用身体部位连通性作为优先于节点关系,使用静态邻接矩阵表示。
% {, m ^+ M" c P% h; @ (ii)由全局邻接矩阵捕获的数据集级关键点关系,以及2 A' D+ L% Z8 }1 K- o
(iii)由推断邻接矩阵获取的样本特定关系。最后,可学习约简度量对不同的输出进行加权
# a1 d: b3 U( a # l2 J& z! k! J+ V
2 D, \! e1 N4 o! S- K 后续段落介绍了静态、全局学习和推断的邻接矩阵的设置方法,即图3中的A,B和C,在此略过。
3 f# Z0 o2 K9 X7 q7 Y 3.3. Deep Embedded Clustering9 q8 M1 n1 M0 y; |0 R
为了构建我们的底层动作词典,我们采用训练集样本,并将它们联合嵌入和聚类到一些潜在空间中。然后,每个样本由其分配给每个底层聚类的概率表示。选择目标是为了提供不同的潜在集群,这些集群上存在动作。' ?( f4 y) t& I# ~, O
, ^2 _- f4 g: c
我们采用了深嵌入聚类的概念[32],用我们的ST-GCAE架构对时间图进行聚类。所提出的聚类模型由编码器、解码器和软聚类层三部分组成。- ?* m; o. v$ w ^- W$ f9 n; p
% O- |' Z' _7 H8 s
具体地说,我们的ST-GCAE模型保持了图的结构,但使用了较大的时间步长和不断增加的通道数来将输入序列压缩为潜在向量。解码器使用时间上采样层和额外的图卷积块,用于逐渐恢复原始信道计数和时间维度。
. ], g0 {; r7 R. _1 a% K0 e k4 f; m
% J8 C- R1 B! F3 O$ D1 M ST-GCAE的嵌入是数据聚类的起点。在我们的聚类优化阶段,对基于重构的初始嵌入进行微调,以达到最终的聚类优化嵌入。& e8 k! B7 i# w$ M8 g' _
' P* K2 `2 i/ v' n1 N+ `' E0 I 符号 表示
5 s2 j; D, K4 j! L; `- M: f# y- P x i x_ix
0 O7 d: `# B# x9 g3 w i, z* w: {* I- t
! e' r; V M' h! k( ~+ ]) p) L 输入示例
6 T9 a s: }- u4 p% Y$ E z i z_iz & Y" v8 A) n# }; ~# U9 V* R
i
4 B- O. F" @9 B, u
! r6 d" N2 ]) u$ S5 V 编码器的潜在嵌入9 z8 Y5 k. i9 n2 B: k& i$ w
y i y_iy 3 e# m/ T7 q m D& B
i; l. A& |4 X' M1 _
: k, U: O; a2 f( t6 F' X 使用聚类层计算的软聚类分配2 I! V% `+ X& h
Θ ΘΘ 聚类层的参数
! `9 {, N, d% p; J" c. e/ d' \' k$ r p i k p_{ik}p 9 F' K/ x2 @8 C" S" C4 o& g$ D
ik* P# y! N. h1 m; T) p- \
: m. x- Z* T4 U! @% [! X; ?/ R! t
probability for the i-th sample to be assigned to the k-th cluster% A5 R0 i; i& n! v* e! v+ t
* _2 r+ {1 e5 d; P 8 f8 Y" x2 x2 ?9 v$ H7 t& j4 L
我们采用[32]提出的聚类目标和优化算法。聚类目标是最小化当前模型概率聚类预测P和目标分布Q之间的KL散度: B' Z, ]3 [" O
' s! r Z& H3 F6 x8 k- {* m- T
& L2 _5 C' x6 b! q: b! y5 ^9 b
目标分布旨在通过标准化和将每个值推到更接近0或1的值来加强当前的群集分配。反复应用将P转换为Q的函数将最终导致硬分配向量。使用以下等式计算目标分布的每个成员:/ S4 R* Y6 ]* l
2 i2 [0 g% j8 `
3 ?( L6 ?7 F3 } 聚类层由为编码训练集计算的K均值质心初始化。优化以期望最大化(EM)的方式进行。
3 T: j+ @9 W+ h8 `" J8 w 在期望步骤期间,整个模型是固定的,并且目标分布Q被更新。在最大化阶段,优化模型以最小化聚类损失Lcluster。1 j8 y0 }- T6 f
% J4 O) \' W; C% o
3.4. Normality Scoring) g2 W+ s8 f8 N
该模型支持两种类型的多模分布。一个是集群分配级别;另一个是在软分配向量级别。例如,一个动作可能被分配给多个集群(集群级分配),导致多模式软分配向量。# w4 c8 p9 J# D, r8 _3 ?
软分配向量本身(捕获动作)也可以通过多模态分布建模。1 o3 v6 J0 U+ M( m
: R7 U7 d+ X$ ~
Dirichlet过程混合模型(DPMM)是评估比例数据分布的一种有效方法。它满足我们所需的设置:(i)估计(拟合)阶段,在此阶段,一组分布参数为评估,和(ii)推理阶段,为每个嵌入样本使用拟合模型。彻底的Blei和Jordan[4]给出了该模型的概述。
' v$ e; Y$ M& I5 E & C& F/ [. [. j9 ]; _3 B
Dirichlet过程混合模型(DPMM)是评估比例数据分布的有效方法。它符合我们要求的设置:- N) R7 ~7 k7 v! T
(i) 估计(拟合)阶段,在此期间评估一组分布参数,以及
5 l. V0 F$ u, V4 D: V' R y* o. E6 Z (ii)推理阶段,使用拟合模型为每个嵌入样本提供分数。Blei和Jordan[4]对模型进行了全面概述。
' N+ X+ i- `6 ]/ q: a7 Z5 D6 o : `* i1 a1 R* B8 Q
DPMM是单峰Dirichlet分布的常见混合扩展,并使用Dirichllet过程,这DirichletDistribution的无限维扩展。该模型是多模态的,能够将每个模式捕获为混合成分。拟合模型具有多个模式,每个模式表示对应于一个正常行为的一组比例。在测试时,使用拟合模型通过其对数概率对每个样本进行评分。[4,8]中提供了关于DPMM使用的进一步解释和讨论。& n. g! D* p5 P2 f: q3 h
/ ?, F) b1 M# o- c+ a6 l: F3 [ 3.5. Training1 W) t- }! W& S: j; ?7 Z! D8 K
该模型的训练阶段包括两个阶段,一个是自动编码器的预训练阶段,其中网络的聚类分支保持不变,另一个是微调阶段,其中嵌入和聚类都得到优化。具体而言:- P' G) n) _* A# {1 i
' h, [8 C1 r1 h+ D
Pre-Training: 该模型通过最小化重建损失(表示为Lrec)来学习编码和重建序列,Lrec是原始瞬时位姿图和ST-GCAE重建的位姿图之间的L2损失! F# _* i$ }* m* |& c3 t/ @' H
3 C A/ ]( Y3 m1 T1 O Fine-Tuning:
3 @2 A* D7 N) f" E1 c 该模型优化了由重建损失和聚类损失组成的组合损失函数。
- T! A/ c1 @3 g7 V( {' [ 进行优化,使得聚类层优化为w.r.t.Lcluster,解码器优化为w.r.t.Lrec,编码器优化为w.r.t.两者。1 a( z. x" M" V5 ~3 @0 f a
集群层的初始化是通过Kmeans完成的。如[9]所示,当编码器针对这两种损失进行优化时,解码器保持不变,并充当正则化器,以保持编码器的嵌入质量。
# o2 q2 ]$ m1 Q- D5 C$ r 本阶段的综合损失为:
- v' h, C3 E2 l" I 3 o! n1 @2 q D+ E: @. ]! Q' l
+ G+ Z) j( C/ {$ K+ |/ t
0 u& E: Z P% M* Y4 n4 L* s Z6 d) i 实现细节7 P3 B9 m+ {. n8 D3 ^
8 M6 r, M- B2 E2 h, l3 T' X) H0 Q
. I! |: e0 Z5 k: S 8 _7 B# j3 B, t; _- t+ U
def calc_reg_loss(model, reg_type='l2', avg=True):
* J; ^# ]) I% G- w9 P reg_loss = None
& R6 O# Z2 U/ v3 s3 k parameters = list(param for name, param in model.named_parameters() if 'bias' not in name)9 w; U* o6 E/ s+ B& a4 ^1 R
num_params = len(parameters)2 y$ g) G( E8 p# Y3 F! t3 V
if reg_type.lower() == 'l2':
: ?5 U6 k: J+ R8 j$ _9 F for param in parameters:
/ B* V q* M1 V1 }5 D5 ]' ` if reg_loss is None:
% {1 {/ \ M) M- L1 V reg_loss = 0.5 * torch.sum(param ** 2)9 V$ H- V$ r) G8 b8 R( I
else:# ~1 W( n- F& m/ U
reg_loss = reg_loss + 0.5 * param.norm(2) ** 2
) j" S. _- i3 q- R4 I4 K. d
) n( V- d9 V" P( ]9 p: y" ]+ O if avg:
/ s1 _2 I2 Z* H0 O8 f0 W5 M reg_loss /= num_params! l8 f* p+ [' \* G$ C
return reg_loss( K3 h3 d" v! r# E- ^; u# F/ j5 H
else:2 S+ O3 @+ |2 U6 I6 b/ r
return torch.tensor(0.0, device=model.device)! z5 R5 G" U. W" y( i a
17 x2 Q, q/ k5 H" l; s% y
20 j( z. C$ a7 G" c8 p' K8 J
34 y" X; c% T/ T8 ^
4/ U$ c8 F: ]/ p2 N
5
* L2 z( @ U9 G+ O 6. |+ w) Q1 {. Q! ~& p9 l5 @
7
0 _, f* i+ |. i7 j 8
& D! v' [$ u" ~( l 9% }" Z) |9 w6 I: Y1 _2 B& T3 o% }# k
100 C5 _6 P; S, G; n- `
11
% D- F/ f5 c9 `3 a4 U3 b 12
$ z8 Z" |2 p+ ?$ f( U6 t 13$ L- B6 W7 w; {* Y- x5 m F+ n, d: _
14
- X. I" u/ ]( F5 I% j1 c% x x 15
7 O. \7 ^/ }- a 167 u# a. ^) T( x6 ^
. U, q* ?2 m) N' q
% P( w) G( O2 y ' b+ R/ q# b7 e
: x& G* Z& `" M4 G3 N PatchModel(
* F. K- T2 S0 z$ r! k# V (patch_fe): Identity()8 y9 y- l8 t2 M8 t8 U, Q( y
(gcae): GCAE(
$ q4 k# A7 x$ `# w% I$ Y (data_bn): BatchNorm1d(54, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)' L& j- V0 o8 Y
(act): ReLU(inplace=True)( E$ Y. a% b8 x5 L( H
(st_gcn_enc): ModuleList(
! {$ | i* ^3 ~% }: P7 w% B3 X4 e (0): ConvBlock(- e' K& w9 R5 h; `
(act): ReLU(inplace=True)
; h4 [$ [ f* U/ j; K' c (gcn): PyGeoConv(
( M# z, l7 r: V# T (g_conv): SAGC(
* r( W% C' n$ Z& P s" c0 @2 r, J (conv_a): ModuleList(5 @: ^- x( U$ a9 N; j- b; p8 x
(0): Conv2d(3, 8, kernel_size=(1, 1), stride=(1, 1))
8 c: W. K/ [' N+ S3 \ (1): Conv2d(3, 8, kernel_size=(1, 1), stride=(1, 1)). p( a2 C" z6 X% `% H
(2): Conv2d(3, 8, kernel_size=(1, 1), stride=(1, 1))6 @' k) d' _+ |( t! U
)
1 K, V( J% |! T, t1 T% t+ s# ? (conv_b): ModuleList(5 e3 T: z/ G& T1 W6 P+ c
(0): Conv2d(3, 8, kernel_size=(1, 1), stride=(1, 1))
" H2 `$ ]' Y( o3 b* O4 O (1): Conv2d(3, 8, kernel_size=(1, 1), stride=(1, 1))! _ ]5 `+ o% f0 m% K
(2): Conv2d(3, 8, kernel_size=(1, 1), stride=(1, 1)) a; X2 N1 O6 M( N" |
)! l) p/ Y: a" N8 {
(gconv): ModuleList(0 j7 e3 h8 ^. l: f
(0): GraphConvBR(' g- w; C ~% ~6 y" k: p
(bn): BatchNorm2d(32, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)% N5 H1 `* n# [" j+ W4 K
(act): ReLU(inplace=True)
% R9 C6 H) [# R+ ~. K )
+ {" h1 I' t3 F& u (1): GraphConvBR(
e9 Q3 I6 |) j8 R% w; e( \ (bn): BatchNorm2d(32, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)7 W( u% `3 x: h
(act): ReLU(inplace=True)
+ O e: l; C0 c/ O) j: F )' M- ]- W0 p; H5 ]
(2): GraphConvBR(0 Y* o9 v: m5 i. n$ a* E; M x
(bn): BatchNorm2d(32, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)( j1 a$ L( U& F5 |* M
(act): ReLU(inplace=True)
% o. Q% p' g: }; L )
8 f- N5 @- P5 ?. o6 ^ )
0 b- z3 o8 S8 B6 }2 z' x (down): Sequential(
. `- P- e5 V8 N1 l (0): Conv2d(3, 32, kernel_size=(1, 1), stride=(1, 1))
& q% p! U# G4 H1 E8 ]4 _, i (1): BatchNorm2d(32, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
7 F3 X# E8 Z) T! s: {7 H7 Q$ E4 A; k ). Y1 |7 Y# f4 |% M2 J+ G5 P
(bn): BatchNorm2d(32, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True). n0 ?- F7 i1 C* j4 F0 c7 ]6 j* Z
(soft): Softmax(dim=-2)/ ?5 v/ w& y4 F
(relu): CELU(alpha=0.01)) w6 u q5 c. ]' s9 x: I
(expanding_conv): Conv2d(3, 288, kernel_size=(1, 1), stride=(1, 1), bias=False)
& _" P$ P. X1 \# Y ?% Y (reduction_conv): Conv2d(96, 32, kernel_size=(1, 1), stride=(1, 1), bias=False). y: V Z1 ^, i2 ~, w/ V
)# ^% Z, j0 x0 Y7 U! _ w
)1 K% g5 m O- @$ v: C$ a0 A
(tcn): Sequential(
7 H) N- w* j) I$ \8 H (0): BatchNorm2d(32, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
: S' O- r/ R) M (1): ReLU(inplace=True)
/ d; i# l% i4 c, z4 B% x (2): Conv2d(32, 32, kernel_size=(9, 1), stride=(1, 1), padding=(4, 0))
! t/ W2 `& l K* U (3): BatchNorm2d(32, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)0 o9 v0 h# o- h; `3 E
(4): Dropout(p=0.3, inplace=True)
: h) E1 M! p. N8 S8 h )
% p* Z' t/ y! ^: Z* H: Y )# O N: b; w* m* y8 n: e, u
(1): ConvBlock(. H" {% f+ g% N& o
(act): ReLU(inplace=True)9 g4 r" E3 v# R& J; c
(gcn): PyGeoConv(
: [0 v4 d) ]0 O) n (g_conv): SAGC(
* ]& `% p V$ ^, M) [& s (conv_a): ModuleList(
/ O. o3 Z8 n8 _6 ~ (0): Conv2d(32, 8, kernel_size=(1, 1), stride=(1, 1))
, A& E, M3 E: k! h6 ?) { (1): Conv2d(32, 8, kernel_size=(1, 1), stride=(1, 1)), Q a* T2 N$ i
(2): Conv2d(32, 8, kernel_size=(1, 1), stride=(1, 1))
3 T# }% a7 E3 o4 [) A, W$ i- h )
# U6 `7 @5 h: {* n' d (conv_b): ModuleList(: w" y! P; E [
(0): Conv2d(32, 8, kernel_size=(1, 1), stride=(1, 1))
7 G, Q9 _ s& A# ?5 D1 Z (1): Conv2d(32, 8, kernel_size=(1, 1), stride=(1, 1))
1 ]$ n' R- G5 l (2): Conv2d(32, 8, kernel_size=(1, 1), stride=(1, 1))0 d% i5 r# L; w" g/ ]( ? \3 y
)
" y* x( e" R: K" p (gconv): ModuleList(& ^, n2 }* N8 D4 N8 p
(0): GraphConvBR(/ N( W2 t% h# A3 k1 R+ @
(bn): BatchNorm2d(32, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)4 Y7 r) e& N7 n% y
(act): ReLU(inplace=True)/ y0 d" ~# J7 d8 I0 h6 f
)
3 S) |* |& Z: c1 W; t (1): GraphConvBR(
+ g; A; Y. d+ A$ Q% T7 O1 y5 B: A (bn): BatchNorm2d(32, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
/ u1 w# K, m2 V% {. l (act): ReLU(inplace=True)
$ ]# }/ Y% s: P5 ~+ z )
6 [" ]9 W: N2 f l# K; t6 I (2): GraphConvBR(: G! x4 I) K/ ]7 q: @) Y) L# U, v
(bn): BatchNorm2d(32, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)9 J7 N( x; D: _- a/ N! \6 J! A
(act): ReLU(inplace=True)
5 Q3 F) y" ^; f8 ^ n )
* _0 f2 _# z2 V7 g )* [) a& h+ G, t+ {
(bn): BatchNorm2d(32, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
" o" O* t; {, X$ t) |) D7 H (soft): Softmax(dim=-2)
0 O2 m# C1 a5 ~* X7 ? (relu): CELU(alpha=0.01)- ?! G; t* E4 v1 m0 f
(expanding_conv): Conv2d(32, 288, kernel_size=(1, 1), stride=(1, 1), bias=False)7 J4 T F) w" |/ z
(reduction_conv): Conv2d(96, 32, kernel_size=(1, 1), stride=(1, 1), bias=False)- n7 U9 S b3 L& A8 S
)
@9 e7 c- U8 h" z ) F" A4 B. x, [8 V3 c8 a6 C
(tcn): Sequential(2 `/ E( ?+ \, |
(0): BatchNorm2d(32, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
) U z4 P, e% K2 N. b* M# a6 T' t: a (1): ReLU(inplace=True)/ g, E2 l- w/ ~
(2): Conv2d(32, 32, kernel_size=(9, 1), stride=(1, 1), padding=(4, 0))9 ?; ~$ p& C2 x' t8 q5 G, Q
(3): BatchNorm2d(32, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)) P1 ~$ r P6 |4 ` W6 R6 M+ e
(4): Dropout(p=0.3, inplace=True). A# N( G- l' r* v( |
)
& q0 U/ r7 Z6 ^- U3 q8 N* v2 ~! u )
% E) D7 N1 t+ G+ u (2): ConvBlock(6 D: l' p' l, E/ H+ h E
(act): ReLU(inplace=True)3 t4 J5 E) w7 v
(gcn): PyGeoConv(
6 F) S0 a) a3 o0 J# O (g_conv): SAGC(
2 [ e0 U8 i4 u0 ] (conv_a): ModuleList(
+ i5 [4 D/ B" b" }/ w (0): Conv2d(32, 8, kernel_size=(1, 1), stride=(1, 1))# l) R" w7 p( F0 z4 Q! W8 A% k
(1): Conv2d(32, 8, kernel_size=(1, 1), stride=(1, 1))
4 Z% e7 q* `" v8 q/ y. \( \ (2): Conv2d(32, 8, kernel_size=(1, 1), stride=(1, 1))/ y3 _( `+ o. k3 H: O8 b
)
, e8 b: A$ d* G& V (conv_b): ModuleList(
# a& r: Q/ O) A# c+ E4 @9 [ (0): Conv2d(32, 8, kernel_size=(1, 1), stride=(1, 1))/ ]3 \" A( A( |5 ]
(1): Conv2d(32, 8, kernel_size=(1, 1), stride=(1, 1)). h- u5 _8 ?) d! O
(2): Conv2d(32, 8, kernel_size=(1, 1), stride=(1, 1))
% A: f% } w; k% v )
$ z0 X8 G9 n# A1 C' F9 h (gconv): ModuleList(5 {% p( Y" h& l
(0): GraphConvBR(
2 t4 e1 Z5 k" E1 F( o (bn): BatchNorm2d(32, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
6 R5 D+ F6 G6 o/ m7 D% t5 E* F (act): ReLU(inplace=True)
4 m1 |5 s) {( Y: u" Q )
. A$ g0 e& I) c& ]. e6 U (1): GraphConvBR(
/ y9 n* N2 l# V* r7 T* b (bn): BatchNorm2d(32, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
# f; S: Y. H8 f0 }; A* H (act): ReLU(inplace=True); v8 f1 |" u, ~* r! a h
)
: }! X8 @% I9 ` (2): GraphConvBR(. K: r* B6 g: D4 C, Q" m
(bn): BatchNorm2d(32, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)2 r% L" d; `! E1 x% x0 v
(act): ReLU(inplace=True)- k4 s8 O( b7 g' r: Q# X+ i
)
# ~9 w% M* D* [, U8 | )
# n) {; O- d1 \ (bn): BatchNorm2d(32, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
8 v2 ^( @ {) |9 S: F: c (soft): Softmax(dim=-2)
2 a% w; C2 E+ T2 g (relu): CELU(alpha=0.01)
9 @+ Q/ n0 y1 c6 S (expanding_conv): Conv2d(32, 288, kernel_size=(1, 1), stride=(1, 1), bias=False)
2 c- R/ q# V: Q$ b3 n6 p (reduction_conv): Conv2d(96, 32, kernel_size=(1, 1), stride=(1, 1), bias=False)
8 u% n- A( |9 a B% s1 k )
2 H' r/ L/ V- b% |" C )
; c$ z& f3 E" q1 _/ x1 s (tcn): Sequential(* p3 _" v! S5 O+ O+ o4 L
(0): BatchNorm2d(32, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)9 `# @9 a* p) \% j$ s
(1): ReLU(inplace=True)
+ I; `$ e( b, t (2): Conv2d(32, 32, kernel_size=(9, 1), stride=(2, 1), padding=(4, 0)). Q0 k5 X7 l8 v+ I& q! I% R
(3): BatchNorm2d(32, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)1 L" O% S$ a% Q7 z, v" r9 A
(4): Dropout(p=0.3, inplace=True)& S! C! s; o5 q, T5 H4 m9 e
)
) F9 G0 O# p" D% S. W (residual): Sequential(( C, n* o2 P+ v
(0): Conv2d(32, 32, kernel_size=(1, 1), stride=(2, 1))
: f; Y7 X& L9 d" q (1): BatchNorm2d(32, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
* K1 x2 ~% ^0 Q: [$ J B )
8 C5 w# ?& Q6 h )) b: K/ q! m* q- V
(3): ConvBlock(: Y" Y& `- B- n" `# }% o4 v: R0 ~, u
(act): ReLU(inplace=True); L" q) n4 C7 h( w& j3 _
(gcn): PyGeoConv(% X( i1 g4 c4 A# f8 {
(g_conv): SAGC(5 l T6 a; ?. s) u* T \; u7 p. ?
(conv_a): ModuleList(
4 }% d: g3 p* T- J2 {+ N (0): Conv2d(32, 12, kernel_size=(1, 1), stride=(1, 1))
& k, h4 P8 \4 h0 F4 S$ F) T$ E (1): Conv2d(32, 12, kernel_size=(1, 1), stride=(1, 1))- F6 ~1 x6 o6 N- d8 g" ]
(2): Conv2d(32, 12, kernel_size=(1, 1), stride=(1, 1))2 l0 s: Y( j2 l' ]+ a
)0 H% R" \) }. E' e
(conv_b): ModuleList(% J3 u* ], i+ c
(0): Conv2d(32, 12, kernel_size=(1, 1), stride=(1, 1))& V% |- p) W9 X6 }2 n" J9 `
(1): Conv2d(32, 12, kernel_size=(1, 1), stride=(1, 1)), K& Z1 v5 x* C* A; A, t' N6 G
(2): Conv2d(32, 12, kernel_size=(1, 1), stride=(1, 1))
6 B+ V! B( e$ S )- \5 }( F7 ]& o/ o1 r3 U* b1 X* H
(gconv): ModuleList(
7 F+ ^4 ?4 P. v. z$ M [ (0): GraphConvBR(! z {$ C* [9 @2 ?* P
(bn): BatchNorm2d(48, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)5 }6 H/ X+ ^& L% Q# J
(act): ReLU(inplace=True)
# ` R4 @, O9 `5 `, X, o )
3 A" ?3 L4 n' ~ (1): GraphConvBR(% M3 v3 L7 z: N
(bn): BatchNorm2d(48, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)1 U. F5 }. D0 H" u& h+ h7 }
(act): ReLU(inplace=True)& v+ U( L! e# ]( r8 S
), I& l4 F( C) R, b. f. S
(2): GraphConvBR(
$ o" O; W" w$ i, { (bn): BatchNorm2d(48, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
' N0 Y% Q: Y; }9 g2 K- h! A (act): ReLU(inplace=True); g3 ]# \9 F- r/ a1 `
)4 n5 V0 W9 Z; a ^7 k1 { |
)
0 n# z2 X; m/ Z: \( {/ I, b (down): Sequential(' y" @- V5 ^' b0 A
(0): Conv2d(32, 48, kernel_size=(1, 1), stride=(1, 1))1 D/ n } i0 f3 X7 P
(1): BatchNorm2d(48, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True). F( H: ]" }. E" q9 i$ d
)
6 Y0 ]8 `( B* W$ t- u& G$ N (bn): BatchNorm2d(48, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
: x2 g% ~ |9 i6 k& E6 y (soft): Softmax(dim=-2)
: O1 d- C- ~7 E2 q (relu): CELU(alpha=0.01)
0 Q2 g' S5 y" H1 q: l' R, e# z1 O ~. X, } (expanding_conv): Conv2d(32, 432, kernel_size=(1, 1), stride=(1, 1), bias=False)
( C& S8 u' }% s/ u# Y1 \: X (reduction_conv): Conv2d(144, 48, kernel_size=(1, 1), stride=(1, 1), bias=False)0 x+ a4 Z3 [) Q6 O& W
). ]9 f- M, R7 g3 ~$ i+ L
)
1 `% M q, S$ U# C# o) ^' ] (tcn): Sequential(, D+ I. ?: ?% b" E2 O& f5 S
(0): BatchNorm2d(48, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)! l' C0 [& a. x$ H
(1): ReLU(inplace=True)% X1 ~$ f8 V" B. L
(2): Conv2d(48, 48, kernel_size=(9, 1), stride=(1, 1), padding=(4, 0))
1 b4 L0 {6 f9 J! @4 c (3): BatchNorm2d(48, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
7 k# B. X$ a5 d: C: l9 j (4): Dropout(p=0.3, inplace=True)
) d# P% x& K) s# s( n) j9 P- G )
3 t( {7 [3 R- Z% K! T& K (residual): Sequential(
3 V p2 X) O! R9 {7 \ (0): Conv2d(32, 48, kernel_size=(1, 1), stride=(1, 1))
, R4 Z n+ u9 S) ~$ L3 v' }9 D (1): BatchNorm2d(48, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)9 m( R5 o1 C6 W r5 v8 l
)
e1 y [1 e. V1 s5 R5 {1 N! ~* M )
" |( J7 A$ S' f# Q2 k/ a( c (4): ConvBlock(
2 {4 B" s% s1 Q/ X \/ T (act): ReLU(inplace=True)
" Y' R8 T, b2 s. J6 O (gcn): PyGeoConv(; E: A( z: \- A5 T( K& w
(g_conv): SAGC(
- [! E- j% ]5 y/ y& } (conv_a): ModuleList(
, W7 [) y5 u' h (0): Conv2d(48, 12, kernel_size=(1, 1), stride=(1, 1))1 f5 ~) L" R0 M7 {2 N
(1): Conv2d(48, 12, kernel_size=(1, 1), stride=(1, 1))" e9 f: [1 @$ j4 s5 Q' t! O) G
(2): Conv2d(48, 12, kernel_size=(1, 1), stride=(1, 1))
" r: e: \' ?9 ?% T& n/ f )
0 S9 |& ~8 J% L5 B: \3 _/ v' n (conv_b): ModuleList(
+ ?* v- K1 C* L4 Q" I1 K2 v (0): Conv2d(48, 12, kernel_size=(1, 1), stride=(1, 1))
6 d \' C8 g0 e& p( { (1): Conv2d(48, 12, kernel_size=(1, 1), stride=(1, 1))- T$ |0 ?) o- M, f
(2): Conv2d(48, 12, kernel_size=(1, 1), stride=(1, 1))+ ?7 b2 O% y6 I7 `
)
. Q J* I5 v0 z8 n' h (gconv): ModuleList(9 I! `) S" p0 h* c5 X
(0): GraphConvBR(: c6 E. H1 v, E: @
(bn): BatchNorm2d(48, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)& K: s( E5 ^' k( m) N5 |
(act): ReLU(inplace=True) L; A- r) q) n( k
)
% w; W% [2 h9 q6 T' W) T8 ]) F( A, g (1): GraphConvBR(, o) A! B0 l6 c* ?
(bn): BatchNorm2d(48, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
9 d( d1 \7 j! C/ d4 J2 { (act): ReLU(inplace=True)/ f4 @: z% u- `
)5 H5 F/ F; D( B5 z5 ^( ~
(2): GraphConvBR(
/ t" k. b: M2 \/ S5 b$ K4 F (bn): BatchNorm2d(48, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)' I5 @2 K+ X* b
(act): ReLU(inplace=True)
, I* m: ~7 U, \- \4 }' O )
9 d; u+ C) Y0 O4 t )
p) h4 d' J2 N4 L0 _1 R/ ~. W (bn): BatchNorm2d(48, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)- d/ w: |% y3 ?' r5 y5 l6 m
(soft): Softmax(dim=-2)# P% [; Z, n% @
(relu): CELU(alpha=0.01)! w$ O$ o' o2 E5 J* Q
(expanding_conv): Conv2d(48, 432, kernel_size=(1, 1), stride=(1, 1), bias=False)
t" I$ s) X2 v( w+ f* k (reduction_conv): Conv2d(144, 48, kernel_size=(1, 1), stride=(1, 1), bias=False)
7 M' V1 @7 X6 g3 b8 Z )$ j! c6 b% X. w+ H" @! S. p
)
( ~- e2 `( d% M+ q% E( {2 w (tcn): Sequential(
9 n' g* ]6 O. h (0): BatchNorm2d(48, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
( h# o: @1 \" z' V (1): ReLU(inplace=True)! {0 R7 b8 l8 G+ ^6 {$ g- Q& ^
(2): Conv2d(48, 48, kernel_size=(9, 1), stride=(1, 1), padding=(4, 0))
7 T' x% B2 }, ]+ e, { (3): BatchNorm2d(48, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
# e6 ^0 e$ r/ W* F+ I. _0 T$ \ (4): Dropout(p=0.3, inplace=True)1 j. ]8 S- S, K' c( z: j
)
) G) r5 r3 b& M' x9 c% o )1 {$ e4 }/ e6 e& B! _7 ]* W
(5): ConvBlock(
5 s( [8 Z8 E: ~% t2 D (act): ReLU(inplace=True)
+ T% g* o, @8 a: [5 m& ~ (gcn): PyGeoConv(# e# g) O: y6 i% t
(g_conv): SAGC(
7 Q. Y9 L0 u0 _1 l5 u (conv_a): ModuleList(1 X; r0 x M" O! l( U8 h; T$ U' Q
(0): Conv2d(48, 12, kernel_size=(1, 1), stride=(1, 1)), J5 V* _# l: }) Y: d
(1): Conv2d(48, 12, kernel_size=(1, 1), stride=(1, 1))
. k- \- C; C3 @ (2): Conv2d(48, 12, kernel_size=(1, 1), stride=(1, 1))
2 n8 t; D% W0 J5 M, L )
. Z& t8 c# t; R" i* E2 N5 t9 r (conv_b): ModuleList(
. e! B2 L+ U2 n" w6 ?+ S (0): Conv2d(48, 12, kernel_size=(1, 1), stride=(1, 1))" c; Y, q% Z/ ~9 S0 ^) T( s" U
(1): Conv2d(48, 12, kernel_size=(1, 1), stride=(1, 1))
% N3 `) b( N& i6 k k (2): Conv2d(48, 12, kernel_size=(1, 1), stride=(1, 1))
8 r4 E6 Q4 F9 C: V7 n( F )& k' H+ Q8 `' B( z2 `- j& c
(gconv): ModuleList(5 O" K5 o8 F- `5 U% u8 a
(0): GraphConvBR(( A( `9 a: d. L) K* G
(bn): BatchNorm2d(48, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
3 ?1 j6 D( y" H* T (act): ReLU(inplace=True)- J `( ~7 o; u# h& ]& \0 G
)
. g0 o( d- z6 A/ b (1): GraphConvBR(+ s- V: I8 V$ O7 v( R
(bn): BatchNorm2d(48, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)5 T/ P {4 h% s1 x( G' s2 R
(act): ReLU(inplace=True)+ m9 r4 y1 Y' U& v& ]* S& s
)
3 H2 k! |4 I g0 b5 w (2): GraphConvBR(
1 S$ ~/ S7 h/ M! d6 a5 k (bn): BatchNorm2d(48, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
8 Q% p# G8 q( Z (act): ReLU(inplace=True)0 \+ n. R2 Q: W% `
)/ m/ ~, J2 w9 G, L4 v0 J
)! u$ a, g" W. W5 `9 g" ~; Z. R) I
(bn): BatchNorm2d(48, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)) p4 i6 i! T0 ]* h4 E
(soft): Softmax(dim=-2)& Z( _8 y3 x! `5 a* S
(relu): CELU(alpha=0.01). Z" a0 B; Y$ x3 Q( H- @
(expanding_conv): Conv2d(48, 432, kernel_size=(1, 1), stride=(1, 1), bias=False)( `: d% v" q F+ M
(reduction_conv): Conv2d(144, 48, kernel_size=(1, 1), stride=(1, 1), bias=False); N9 ]8 W- K, ~( W
)- _5 r; z" `3 r; Q
)
# e+ X a3 s: a# c' c (tcn): Sequential(
+ l% n: a1 }6 K# g* N$ n7 X (0): BatchNorm2d(48, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
1 c. e% I# c5 F/ w (1): ReLU(inplace=True)- m# g" p$ ?5 h- w. D
(2): Conv2d(48, 48, kernel_size=(9, 1), stride=(3, 1), padding=(4, 0))3 R/ ]5 P- Y- i( A. z# T
(3): BatchNorm2d(48, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
% D0 B" ?+ h$ k) x9 f9 j (4): Dropout(p=0.3, inplace=True)
- B/ Z3 |& v7 Y# ]! W )4 G. [, f& j. p6 L
(residual): Sequential(7 A5 O% O a6 S) m6 K
(0): Conv2d(48, 48, kernel_size=(1, 1), stride=(3, 1))* {# n ` H6 {' v2 J/ r5 _& n
(1): BatchNorm2d(48, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True), J3 A* A6 x! b
)
: p& w3 x% M9 Y+ I% D ` )
0 C' n5 ?8 \0 h1 _( T (6): ConvBlock(# N; s: o. I9 R9 W
(act): ReLU(inplace=True)& A, n4 T# V& c$ p
(gcn): PyGeoConv(8 M; ~! A$ f) ]& V _- g
(g_conv): SAGC(
( z* | _1 M+ I) ]. N (conv_a): ModuleList(" w" P+ K9 P8 o
(0): Conv2d(48, 16, kernel_size=(1, 1), stride=(1, 1))9 F; o5 M2 A5 Z+ r% S, _) P; S
(1): Conv2d(48, 16, kernel_size=(1, 1), stride=(1, 1))
* T' t' b5 w6 v9 m+ }( V (2): Conv2d(48, 16, kernel_size=(1, 1), stride=(1, 1))$ ?' F( X8 D5 y! d1 T
)
: ]. ~$ z4 k* ~2 B4 B (conv_b): ModuleList(, B, V) h3 y7 a7 H/ k
(0): Conv2d(48, 16, kernel_size=(1, 1), stride=(1, 1))
- j$ h O& f# c* C (1): Conv2d(48, 16, kernel_size=(1, 1), stride=(1, 1))- X; [" l* }( _/ I9 S& t
(2): Conv2d(48, 16, kernel_size=(1, 1), stride=(1, 1))
3 M; G% D- P, y )
0 a7 D9 g$ ]' d% ~8 | (gconv): ModuleList(
; \1 J+ j! ^9 i (0): GraphConvBR(
w8 @ K/ r7 } p% t- R (bn): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
# b. g2 _9 ]. ?! H$ i0 ^9 F (act): ReLU(inplace=True)
8 l5 U0 y/ x. F: n7 E8 f R )" Z% [6 q0 i) D( R, d# n; Z+ i
(1): GraphConvBR(
2 D7 U* {+ O4 w' b (bn): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
, U) s/ }! V% X2 K3 V (act): ReLU(inplace=True)
4 S3 Q6 V& ~6 E. |# T0 W )
0 S7 B) K8 ~6 r4 Z2 \8 i8 a (2): GraphConvBR(
* V3 r* b7 p9 O: Z# y9 x5 Y (bn): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
( X; |. Z9 z9 ?4 D (act): ReLU(inplace=True)
( n. B V8 c8 U b& h0 b5 o+ q; ~ )% e" f! L: ?5 {
)
6 |/ P& g0 \: {! p% j0 J (down): Sequential(
' h0 P5 u- \8 j+ i8 c8 t (0): Conv2d(48, 64, kernel_size=(1, 1), stride=(1, 1))
+ w7 E2 d3 d+ z2 Q7 |8 B (1): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)8 e" `' K. q, d" g9 I0 A* T& B
)
$ o" ?5 z9 Y0 c; O' y& ~ (bn): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True), G3 T* t# S' t# u0 x$ u' S
(soft): Softmax(dim=-2)
5 V# }4 A0 u4 W9 x8 }3 }3 N/ K (relu): CELU(alpha=0.01)
. |/ H9 s9 i& u, L; k" ]4 a (expanding_conv): Conv2d(48, 576, kernel_size=(1, 1), stride=(1, 1), bias=False)7 r ^- A* }0 G T
(reduction_conv): Conv2d(192, 64, kernel_size=(1, 1), stride=(1, 1), bias=False)
0 s+ K& w# `2 g )
6 k4 S8 I$ n2 {1 G: g. ? )% I7 Y% i& U7 g0 p
(tcn): Sequential(
3 Q: E, G' o% `. K* W5 p# C8 l/ ] (0): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)- a/ L' Q2 Z" [4 z, k1 J( _
(1): ReLU(inplace=True)
" m- l$ q5 O0 v4 p (2): Conv2d(64, 64, kernel_size=(9, 1), stride=(1, 1), padding=(4, 0))
* p$ Z L9 \5 E, A9 v8 c) Z (3): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)) }) t; E Q8 y* u
(4): Dropout(p=0.3, inplace=True)
/ z; h; M9 o( d )# s3 I6 L/ D% L. \+ @ y S1 T
(residual): Sequential(
2 r4 [' t. y- `6 ~ (0): Conv2d(48, 64, kernel_size=(1, 1), stride=(1, 1))/ F" s8 `8 z7 _" d, g" Q T
(1): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)' {. Z) {* x4 [( ^* ^8 Q. R
)
. d4 q: Q9 p. H+ ] )/ i2 A7 h3 }+ G' n' O
(7): ConvBlock(: Y1 T) L! @* D" I: Y2 V( z
(act): ReLU(inplace=True)
/ P& s3 _/ t' Q (gcn): PyGeoConv(
; w2 v4 ~) D% B+ W) D (g_conv): SAGC(# O g, z: h! R' r# n
(conv_a): ModuleList(, a1 q+ g9 R( J6 s
(0): Conv2d(64, 16, kernel_size=(1, 1), stride=(1, 1))" ]' S& S/ U$ }2 N& T2 s8 l7 O
(1): Conv2d(64, 16, kernel_size=(1, 1), stride=(1, 1))
& `8 \& a# n$ \6 W2 A- q) _7 O (2): Conv2d(64, 16, kernel_size=(1, 1), stride=(1, 1))
0 y* e2 w3 h( U9 ~ }" q& w0 W( p3 O )1 v/ P& Q0 a2 r) B: m# ^
(conv_b): ModuleList(! [( P6 {7 x& W0 E" X
(0): Conv2d(64, 16, kernel_size=(1, 1), stride=(1, 1))' u0 ^% }8 B3 v6 c/ V
(1): Conv2d(64, 16, kernel_size=(1, 1), stride=(1, 1))
4 w2 i( O- q% {9 \" Z; @! f (2): Conv2d(64, 16, kernel_size=(1, 1), stride=(1, 1))
6 g: ], c. B9 V: y3 j6 G8 @1 I )3 C- S% m" Q1 a) D. ?3 |9 K4 h
(gconv): ModuleList(# L4 c4 z$ f$ F! R0 x! M, P0 n
(0): GraphConvBR(1 z# |2 t* E i6 O
(bn): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
+ V9 w0 o, ^( Q. s (act): ReLU(inplace=True)
5 E* x! M7 j1 P) F0 P8 J5 g )
4 @# C2 m$ x+ ^+ `: Q& `; |8 D (1): GraphConvBR(- N, p% u# E, ?2 i6 H. I' }
(bn): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
1 a# |6 N2 d! P1 q- |. Y3 Z- l2 i (act): ReLU(inplace=True)
' g: H/ m& ^( z4 h' s )% t$ C8 Q$ w2 G$ h$ X" g- `
(2): GraphConvBR(
3 ]; a: L9 [8 c8 | (bn): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)0 s( N- V! K% B/ Z
(act): ReLU(inplace=True)
9 f G2 ^9 f$ U% ^& D )
! p; w$ j" h0 c* |& N. j9 W' [( g( b )
! x& @* n; y4 y5 G1 g (bn): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
8 ?+ Q- z, K1 p: X. E+ a1 j (soft): Softmax(dim=-2)
* b: |( M3 w& W- ]; N (relu): CELU(alpha=0.01)
H& R$ Z) ~7 I% m4 I) K) i% e (expanding_conv): Conv2d(64, 576, kernel_size=(1, 1), stride=(1, 1), bias=False), s/ b7 M' M! ?3 I" @0 w( _3 R
(reduction_conv): Conv2d(192, 64, kernel_size=(1, 1), stride=(1, 1), bias=False); y E+ h2 H" f5 y& x7 ]5 p
)( N( V+ s. u: \# Y4 j) Y( T, v8 {
)& u7 C, K5 S3 ?+ G; x3 {% d8 D
(tcn): Sequential(" e% T5 ?' {0 v3 G6 a
(0): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)7 n, ?, Y% p, [" N: U' j; p
(1): ReLU(inplace=True)- P& s8 P! W5 Z5 y) `3 h; b
(2): Conv2d(64, 64, kernel_size=(9, 1), stride=(1, 1), padding=(4, 0))3 T6 F' q! n) T' i
(3): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
) P& g# i) _. I0 c) Y (4): Dropout(p=0.3, inplace=True)
: d' O5 M. M/ t )% P1 Z( W# S% e( p2 r. Q% Y# C7 m
)
( i4 R- n/ P- d# h1 S6 t (8): ConvBlock(* k9 y8 V& V( ~8 i/ g1 r- p
(act): ReLU(inplace=True)+ H2 [& A) H/ f2 }9 U& Y
(gcn): PyGeoConv(
6 A% b! v9 z, }- w; V (g_conv): SAGC(9 V. b, S8 _, c' {
(conv_a): ModuleList(
8 {& \. _' P( u, k3 | (0): Conv2d(64, 8, kernel_size=(1, 1), stride=(1, 1))
, O$ g4 Z. _! I7 G7 S: s (1): Conv2d(64, 8, kernel_size=(1, 1), stride=(1, 1))
# v7 e, L3 G" z) b6 t/ H3 q (2): Conv2d(64, 8, kernel_size=(1, 1), stride=(1, 1))
- o3 o, v' \" j& C; M' a )7 ]$ O9 S* Q' o
(conv_b): ModuleList(; x0 M) g( g8 e, Q
(0): Conv2d(64, 8, kernel_size=(1, 1), stride=(1, 1))
3 M8 m. [* Z" j9 F/ [ (1): Conv2d(64, 8, kernel_size=(1, 1), stride=(1, 1))
6 D: Q$ g7 b( x* _0 Z" P# N (2): Conv2d(64, 8, kernel_size=(1, 1), stride=(1, 1)), {. n- u9 n5 |5 x
); r$ i8 D% v' ~, y4 E( h
(gconv): ModuleList( m* {: O7 u7 s, l
(0): GraphConvBR(4 U0 l9 b n" B1 G' a/ o
(bn): BatchNorm2d(32, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
! G+ ], C' ^7 y) R6 p$ J; l: r (act): ReLU(inplace=True) @, |/ u) k, ~: f+ `7 i! G
)
$ j; n U& l1 X4 D; s* v (1): GraphConvBR(
0 F6 M( D* M$ K; t (bn): BatchNorm2d(32, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)/ A9 o' b n" Q" C: j: o% ?
(act): ReLU(inplace=True)
' r. E; e6 @5 T0 r7 y, _8 F2 D T )
9 R: j2 h" r! L, L1 C (2): GraphConvBR(
- N& T& O0 i' b% v (bn): BatchNorm2d(32, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
( {* `$ ]# C' n; S& c* p3 B (act): ReLU(inplace=True). z5 g0 O# _ s; v' f, r
)
" O4 S! k, |% x: Z* E )
7 H* W# t( b5 I5 J. J: k (down): Sequential(
; S3 f# [: M( G' p2 m (0): Conv2d(64, 32, kernel_size=(1, 1), stride=(1, 1))( K$ t* L* I% q7 ^6 E
(1): BatchNorm2d(32, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True) A9 s# M5 ~& N) ]0 z7 F5 B
)" O4 |3 S- {$ _9 T1 U- x6 C
(bn): BatchNorm2d(32, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)7 T1 N6 Z7 ~1 z: e' D
(soft): Softmax(dim=-2)
# K% i, ?7 Z/ M+ H$ F: ?* o+ m (relu): CELU(alpha=0.01)
4 D' Y A! I8 y) V7 l (expanding_conv): Conv2d(64, 288, kernel_size=(1, 1), stride=(1, 1), bias=False)
: d" k( h$ P( y' T+ U9 g! J (reduction_conv): Conv2d(96, 32, kernel_size=(1, 1), stride=(1, 1), bias=False)
$ l U" F C. j/ Q5 p) L; g )& _; `6 f" I9 w* ?/ u! e- R
)! l5 {6 Q+ ?9 [4 _
(tcn): Sequential(; [2 P0 @8 f/ e6 h
(0): BatchNorm2d(32, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
4 n& j, Y0 X# G- s! P! p/ b: C (1): ReLU(inplace=True)
$ q* u, N- G" ]$ w% d (2): Conv2d(32, 32, kernel_size=(9, 1), stride=(1, 1), padding=(4, 0))
" \3 ~% ^+ w$ n8 [9 f! p! w (3): BatchNorm2d(32, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)9 ]' S3 W. V4 A% B; H+ R) I, `
(4): Dropout(p=0.3, inplace=True)' s3 ^; y& W, d
)
8 g0 z; h1 Z0 S9 i. x5 q& { (residual): Sequential(9 e/ o$ E( j- f: h
(0): Conv2d(64, 32, kernel_size=(1, 1), stride=(1, 1))' S* Q5 v3 O% S U7 t, _% ^
(1): BatchNorm2d(32, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)8 W, x1 `( V7 J0 u
)
" a% i) q+ C/ J )
* P( d/ I7 ~; n )* r2 T$ w* _' w5 f) [
(dec_final_gcn): ConvBlock(
) t7 x" |5 [+ m (act): ReLU(inplace=True)) ?0 A1 W. ~: w3 [& d& D
(gcn): PyGeoConv(/ {1 X/ Q, W7 e' g$ }
(g_conv): ConvTemporalGraphical(
2 D" [9 p. T6 Z/ l (conv): Conv2d(48, 9, kernel_size=(1, 1), stride=(1, 1))6 u/ j `4 K3 ]; g
)
: S8 Y2 B9 Q6 l% Q, P$ d )4 c' S8 y: Q& p' e
(tcn): Sequential(" a* y" g* S9 V; p) Q# h1 P
(0): BatchNorm2d(3, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)# Q/ _3 F1 Z: m, c7 |
(1): ReLU(inplace=True); a: `1 w: ]4 B# d: ^7 J' n6 h0 U
(2): Conv2d(3, 3, kernel_size=(9, 1), stride=(1, 1), padding=(4, 0))
5 _, U! k( i! e3 O0 }& d1 R! F3 v; z) P (3): Identity()& k7 o0 g7 a8 t; n4 I6 o
(4): Dropout(p=0.3, inplace=True)! ^1 O" c' I2 a7 W( N
)0 g5 D9 b" V. [# R# m0 `
)
2 @4 i1 _( T: k0 P6 |8 D; C" Z5 g (st_gcn_dec): ModuleList(
8 ~8 u1 K! @6 v' r9 A2 b8 m5 V (0): Upsample(scale_factor=(3.0, 1.0), mode=bilinear)
" @% q1 u, O, m# ? (1): ConvBlock(' |4 w$ }( {) b3 i- C; V$ a4 O
(act): ReLU(inplace=True)& I1 d7 W' _! Q6 |
(gcn): PyGeoConv(
) p, |+ r8 M( R: c* B0 B (g_conv): SAGC(
# z; U3 L' P" L8 g5 N% B, ^8 Z9 L (conv_a): ModuleList(
, y- I: _: T; {+ A6 N4 ]; c (0): Conv2d(32, 16, kernel_size=(1, 1), stride=(1, 1))
, n9 H; q6 Q$ t (1): Conv2d(32, 16, kernel_size=(1, 1), stride=(1, 1))
$ N# g- K1 g6 n% S* q$ d, t (2): Conv2d(32, 16, kernel_size=(1, 1), stride=(1, 1))* l! x" b4 {* _: P
)
( U" D5 H8 e1 P (conv_b): ModuleList(
3 e& L4 L7 h- a- Z6 W. J8 H (0): Conv2d(32, 16, kernel_size=(1, 1), stride=(1, 1))
: M$ m: |* |9 m, P0 c (1): Conv2d(32, 16, kernel_size=(1, 1), stride=(1, 1))
1 Z- h6 v/ C: q( d! E# b5 j (2): Conv2d(32, 16, kernel_size=(1, 1), stride=(1, 1))
! g7 Z+ ]' S8 `3 i )
! ]. W# p1 e& o2 f (gconv): ModuleList(3 L2 b# h( b1 W
(0): GraphConvBR(
7 {( z$ O% {; P/ A4 X (bn): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)* D" C) k* T5 P; c
(act): ReLU(inplace=True), Z( T8 j) v" Z$ R8 f
)- j% \4 |+ v, @7 }; H/ B
(1): GraphConvBR(
% e I9 d+ Q# ^% t c. u, g+ r (bn): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)/ o3 ?# W0 T& A. I
(act): ReLU(inplace=True)
% J2 L0 D; r9 K6 ^5 M! L8 }* r )
1 a7 Y9 [& w% q5 D) Z, D (2): GraphConvBR($ s$ i8 g7 O' W' u3 H3 m
(bn): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)/ |8 d# ]% e! o& k# R4 [
(act): ReLU(inplace=True)8 z9 S- D* M5 ]$ b8 f. t
)
, \) K% {+ _ G; }* m )
1 \5 n" T% v" {8 p (down): Sequential(
# q# B2 J, x1 A \5 a (0): Conv2d(32, 64, kernel_size=(1, 1), stride=(1, 1))
8 ]# Q( P$ N6 Y8 }! u! ]1 [ (1): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)1 l4 t, X; {1 E& H0 s5 S
)
) v' q/ _1 N, y, B, v" E8 N (bn): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)3 Z8 t9 @+ [0 m. U7 Z% b
(soft): Softmax(dim=-2)1 H: D) X5 S: `6 S/ t' r
(relu): CELU(alpha=0.01)
; q5 W! \, x1 a& q9 p5 F0 C% V9 N (expanding_conv): Conv2d(32, 576, kernel_size=(1, 1), stride=(1, 1), bias=False)
: T) {0 m8 N& @& E! m, N. i (reduction_conv): Conv2d(192, 64, kernel_size=(1, 1), stride=(1, 1), bias=False)' o ^ x% q: d0 F) F$ V6 \7 w
)
8 m. U5 y2 v$ Z6 g; `0 N% W )
; _2 N+ \ |+ X" s& l (tcn): Sequential(( y* y P2 G8 r5 B4 C9 {" t, m# J
(0): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
+ L" h. g% L3 [) M& ~8 } (1): ReLU(inplace=True)9 C) u7 {; i6 ?# e0 c
(2): Conv2d(64, 64, kernel_size=(9, 1), stride=(1, 1), padding=(4, 0))
# }! v( g5 K% a/ R# @ (3): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)5 \& e/ n, ?3 M0 A) D
(4): Dropout(p=0, inplace=True); u* ^' z1 i2 o* G, w$ F N. i
): L* V b/ q* k1 c3 w2 i/ S
(residual): Sequential(
0 E- r& e& x7 z/ j. A$ O (0): Conv2d(32, 64, kernel_size=(1, 1), stride=(1, 1))
0 O; ?4 Y/ C( }$ i0 H (1): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)1 f/ c$ M7 ~1 F+ P
)
$ ^% _+ R l0 }& h$ H )9 O6 w7 j9 e x# w
(2): ConvBlock(% k O- I$ d* F9 i2 f
(act): ReLU(inplace=True), ]' r$ z! M1 c+ @' W Z/ U% d9 o
(gcn): PyGeoConv(
v* h/ O# L w9 [ (g_conv): SAGC(- R7 ]7 Z9 a. P% q. @7 P
(conv_a): ModuleList(
9 O& h3 m! V; F. | (0): Conv2d(64, 16, kernel_size=(1, 1), stride=(1, 1))
( X" T' i5 q' r1 \3 W7 ]* s (1): Conv2d(64, 16, kernel_size=(1, 1), stride=(1, 1))
1 m2 H6 x g. Z$ ] (2): Conv2d(64, 16, kernel_size=(1, 1), stride=(1, 1))2 o1 E5 x2 o3 S* \) ?
)8 Y, b+ O* d- X$ a, k9 v$ t
(conv_b): ModuleList(
; B: \2 ?, f H (0): Conv2d(64, 16, kernel_size=(1, 1), stride=(1, 1))
: Y* ^& I# x/ l) l* o! _ (1): Conv2d(64, 16, kernel_size=(1, 1), stride=(1, 1))" d6 @0 c9 R1 Q& n, l2 _
(2): Conv2d(64, 16, kernel_size=(1, 1), stride=(1, 1))
4 e' L7 \' x9 s! F4 Z& x8 } )* D/ X; r3 w H% o3 r
(gconv): ModuleList(
# e% N2 d5 m3 V6 b6 c0 e (0): GraphConvBR($ W, g9 C0 B8 m9 |/ M
(bn): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
0 S2 `, U9 r- j- o. V (act): ReLU(inplace=True)3 N- k f4 m: k8 Z
)
: x5 B0 ` Y% p. |" ?3 V9 u9 T% H (1): GraphConvBR(
& D, a+ ?9 I: \% j (bn): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
6 {1 L9 o# B8 @) r (act): ReLU(inplace=True)
! X n1 P2 f5 O$ t: G$ _ )
" D6 Y# ]0 ~6 U+ l- m, J# k (2): GraphConvBR(/ F1 z( D0 h h3 X I4 }
(bn): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
5 C5 o5 P4 W' ]* l# N- J (act): ReLU(inplace=True)
9 S2 Z- `* E$ y: {! m )
3 F, G8 M' x2 K8 @ )
6 O* r; s& M3 r (bn): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
9 L9 o$ Z+ ]- c. N6 y (soft): Softmax(dim=-2)
; K+ [! O- a& I6 q& o (relu): CELU(alpha=0.01)
( ?4 A- H, [7 @# ~) k (expanding_conv): Conv2d(64, 576, kernel_size=(1, 1), stride=(1, 1), bias=False)
" b6 }# O& r- J8 F) e" Q/ `7 f$ q (reduction_conv): Conv2d(192, 64, kernel_size=(1, 1), stride=(1, 1), bias=False)5 x+ u$ B# a/ U( J m k: ]
)
3 ]! t' V! D& b. q) c0 h5 k' m )
' q6 O; d' J3 T5 `; `8 j% I (tcn): Sequential(" C2 A# N2 k' d. }' S/ F# D+ Y9 k
(0): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
0 I) h+ I3 B; u$ ^1 J (1): ReLU(inplace=True)$ T' d: }# I6 O# u
(2): Conv2d(64, 64, kernel_size=(9, 1), stride=(1, 1), padding=(4, 0))
9 a9 g, C4 Y, e5 ~- x; y1 l( | (3): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)( r- r. M9 N$ V" l, H
(4): Dropout(p=0, inplace=True)8 B% c3 p' x2 V, `1 L2 C: f
)& U& b& M$ A+ }; \
)- B. E: [+ W+ \. u
(3): ConvBlock(
3 h* i! T" P% E- Z$ m! ~ (act): ReLU(inplace=True)
. M) b- y6 X$ f9 N. M/ ]8 a6 b; O (gcn): PyGeoConv(1 D: U+ n0 _# r4 Y9 D! `) x
(g_conv): SAGC(
7 l# N: H) P/ o. S' ~6 b" s (conv_a): ModuleList(
# K5 q% L' c4 j: H, c: { (0): Conv2d(64, 12, kernel_size=(1, 1), stride=(1, 1))6 \% \( u" H D6 S
(1): Conv2d(64, 12, kernel_size=(1, 1), stride=(1, 1)); G9 Z7 ^! Q6 ^
(2): Conv2d(64, 12, kernel_size=(1, 1), stride=(1, 1))$ D" m2 t' i8 i6 B
)
/ G3 E9 j, G, L4 _$ c0 I2 W ? (conv_b): ModuleList(
" K y/ G' [( r. g0 \$ g" v9 R (0): Conv2d(64, 12, kernel_size=(1, 1), stride=(1, 1)); z. U- v9 _' I. Z7 q. j
(1): Conv2d(64, 12, kernel_size=(1, 1), stride=(1, 1)). s; r4 w6 T/ e: u# j% d8 g
(2): Conv2d(64, 12, kernel_size=(1, 1), stride=(1, 1)). |$ K8 \/ ~0 R, _8 d! R7 V" n
): F4 \$ O8 ]' |% Z& N b" [
(gconv): ModuleList(0 Z- @& a% s- K4 ?5 ]
(0): GraphConvBR(/ L+ m- P% H* W
(bn): BatchNorm2d(48, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
3 L( G' M- ]. ]6 }6 v (act): ReLU(inplace=True)9 e1 U4 `# b. Y' b R
)
, b+ e0 f4 ~ }* R3 c- l (1): GraphConvBR(
/ `8 ?) V$ K; l" }9 T (bn): BatchNorm2d(48, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)2 F$ M9 ?! O Z9 K H( M6 E8 u) C
(act): ReLU(inplace=True)
) E/ I$ Y" A s )
* m3 \, G) K, W) ]# E: ^5 _* r" e (2): GraphConvBR(
1 ?( o; |2 |) [7 t (bn): BatchNorm2d(48, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
( O( m' m1 D+ U9 k; c" i: w (act): ReLU(inplace=True)
; @4 N# i1 P" |5 U )
2 {0 P2 ]9 t! @ )/ @/ h2 Q- I; Y) C! r6 O
(down): Sequential(
7 U7 e, D0 h0 t# ]. ~4 M7 y! q+ j (0): Conv2d(64, 48, kernel_size=(1, 1), stride=(1, 1)); U! O3 D5 B: D4 X0 d- }0 q
(1): BatchNorm2d(48, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
7 U3 [9 A; E7 _. l: `; K5 ^ )
; c$ Z. i! m* V& \8 E! | (bn): BatchNorm2d(48, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)/ a3 r4 s: I: _3 r
(soft): Softmax(dim=-2)1 _% G8 H; g* {& N
(relu): CELU(alpha=0.01)- O" X, Y/ q7 ~% Z5 O
(expanding_conv): Conv2d(64, 432, kernel_size=(1, 1), stride=(1, 1), bias=False)
; e/ [% H# o U# K' i5 P5 ^; t( l# r; b (reduction_conv): Conv2d(144, 48, kernel_size=(1, 1), stride=(1, 1), bias=False)" i7 J4 n: j: ^
)3 U% h. U! h' X% ]% G. E! A
)
' \2 [) r) u( B$ Y5 ? (tcn): Sequential(8 S; `, o" X' t) X3 k3 f0 c
(0): BatchNorm2d(48, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
$ M! E. I# ^& s, U# g$ U) | (1): ReLU(inplace=True)
% {8 D; X6 m) P: E (2): Conv2d(48, 48, kernel_size=(9, 1), stride=(1, 1), padding=(4, 0))
% V1 M3 S$ W* ~: R# w+ C) [ (3): BatchNorm2d(48, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)+ i+ Q; ?- }' }( i" j3 h
(4): Dropout(p=0, inplace=True)
% e; P" T) n% N( z0 s; g* c )" }& ~' S# Q9 H) F2 ?& s# I( B
(residual): Sequential(* t; s2 s6 I" e, O* f$ I8 ^
(0): Conv2d(64, 48, kernel_size=(1, 1), stride=(1, 1))
; F9 X7 q0 V) @7 e. G (1): BatchNorm2d(48, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
3 ?' f; j$ b* w& i' ?" H )
. R3 I$ `7 J t4 |* L ) O& b: k, k$ ?' \3 Z$ Z: C
(4): Upsample(scale_factor=(2.0, 1.0), mode=bilinear)) F* f J8 K( f- Q) _0 s
(5): ConvBlock(
/ M% ?& H; a, m8 o$ b, [. C& }! a" @ (act): ReLU(inplace=True)/ O1 p h: C" P8 L4 t. K
(gcn): PyGeoConv(- p- L7 R! `9 j: n: M; H* D/ h
(g_conv): SAGC(
7 w) O3 Y6 m: T& O: a (conv_a): ModuleList(
; P0 R( X$ ^/ `* A (0): Conv2d(48, 12, kernel_size=(1, 1), stride=(1, 1))3 T' Z' ?6 p1 U" a
(1): Conv2d(48, 12, kernel_size=(1, 1), stride=(1, 1))% d" O+ M8 t1 n% m( C/ @
(2): Conv2d(48, 12, kernel_size=(1, 1), stride=(1, 1))
9 v- e- f, T/ q8 E$ | )
2 C1 Y q" P5 e (conv_b): ModuleList(
( `5 K' Q! D4 |% J6 \2 _) J2 R/ D" O (0): Conv2d(48, 12, kernel_size=(1, 1), stride=(1, 1))( G7 J i& Q7 H# H9 X5 l7 y$ Q
(1): Conv2d(48, 12, kernel_size=(1, 1), stride=(1, 1))
* F$ m3 |- D$ C( q! r (2): Conv2d(48, 12, kernel_size=(1, 1), stride=(1, 1))
5 r; K+ U! z: D! r" l4 ?+ e! F$ N )
5 ]2 X# P1 s j* I3 [ (gconv): ModuleList(" C+ Q* p7 z$ M) U2 u4 l1 h! r
(0): GraphConvBR(
7 o" E* s. A" T6 L, @' g, t (bn): BatchNorm2d(48, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)7 n& H7 k4 Q H" v' z9 c" ^/ p! g
(act): ReLU(inplace=True)* |+ E, L0 A6 Y' N1 @
)
, W4 H( r4 T- ^! h: ^5 `* N (1): GraphConvBR(, x# t0 u6 F0 Q3 j9 i, @
(bn): BatchNorm2d(48, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)5 Z( U; w8 p$ Y" K+ b) e4 J3 c6 N
(act): ReLU(inplace=True)1 n8 w0 T+ S9 ?* n; ]2 G
)
' K9 \* d7 i3 T" f6 T% y (2): GraphConvBR(
( ~$ }5 O. t, \ (bn): BatchNorm2d(48, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
& S, |# x2 K) b9 k0 g$ h2 D3 f (act): ReLU(inplace=True)* p1 n) q; t$ p% p
)
9 I, D: W* f8 K" D- N3 _7 D )
6 L& ?3 p2 F1 y' ^2 J. _ (bn): BatchNorm2d(48, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
5 n" T8 f' _0 z: m7 [; [ (soft): Softmax(dim=-2). i$ a; i$ b; S& w
(relu): CELU(alpha=0.01)
% l& \+ u4 V( h( z6 |- I) q (expanding_conv): Conv2d(48, 432, kernel_size=(1, 1), stride=(1, 1), bias=False)# F: q2 m/ [2 w& O5 ~
(reduction_conv): Conv2d(144, 48, kernel_size=(1, 1), stride=(1, 1), bias=False)
" V" g- N9 u+ Z )
6 Y9 R: f8 N) H3 x3 J; j8 X( C )- z7 V& f# }1 X# f) D
(tcn): Sequential(
0 G, n2 M! r' l4 [, J( P+ r' k (0): BatchNorm2d(48, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
- h3 U$ v8 G* @8 F (1): ReLU(inplace=True)1 ?) l* s! E3 R% f) l
(2): Conv2d(48, 48, kernel_size=(9, 1), stride=(1, 1), padding=(4, 0))9 v- T8 P. H5 n# U6 z2 [; w
(3): BatchNorm2d(48, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)4 v7 T- Y2 P0 d; D2 G4 M7 \
(4): Dropout(p=0, inplace=True)
/ t) t, ^" v+ q; B( s y. H/ N )+ ]. A( R. ^- ]7 B n) X" |" R- k
)
$ u. l8 H. d) k) l- f (6): ConvBlock(
, t, w( Q- t' U8 @ (act): ReLU(inplace=True)# f/ k/ m$ g! h8 l& v+ V2 T
(gcn): PyGeoConv(
0 R$ [9 H' I! x- ?- `3 {" K$ [) ^( i (g_conv): SAGC(
" x! b8 ?- _ q (conv_a): ModuleList(+ o- r' a" @% M
(0): Conv2d(48, 12, kernel_size=(1, 1), stride=(1, 1))' z8 {( q( b* `* o% b+ n- F
(1): Conv2d(48, 12, kernel_size=(1, 1), stride=(1, 1))" g% R6 }; S' O) w {: d* w* l
(2): Conv2d(48, 12, kernel_size=(1, 1), stride=(1, 1)), {; b7 y. v$ c2 q
). o( u3 X1 I& i
(conv_b): ModuleList(
3 D* }+ w5 n. K$ i) G4 i- y (0): Conv2d(48, 12, kernel_size=(1, 1), stride=(1, 1))3 i5 f4 W( q4 s" x* d* S0 H
(1): Conv2d(48, 12, kernel_size=(1, 1), stride=(1, 1))9 K, Q7 G3 l7 n0 ?5 Y! l8 _
(2): Conv2d(48, 12, kernel_size=(1, 1), stride=(1, 1))% v2 Y8 V$ U6 n/ S- E
)
5 t$ k; L' Q9 n0 n3 @ (gconv): ModuleList(2 w8 h5 ?' ]6 h/ D I1 J) y2 L
(0): GraphConvBR(
* ?7 c* A2 D' C6 I" Z! O" E (bn): BatchNorm2d(48, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
- _. _* D# R6 ?* q1 D6 _8 _5 [# d- ? (act): ReLU(inplace=True)
: V& F7 J O) w- P )
( N( j: k4 I4 n5 }6 @* l (1): GraphConvBR(
" u( d0 f" |5 R" M5 X' y f (bn): BatchNorm2d(48, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)0 X/ W- z, k* \& `8 O
(act): ReLU(inplace=True)
7 P! m9 Y) D7 b% q )1 ~+ B4 L3 Q" G
(2): GraphConvBR(
' U1 C7 w& c. A& l2 P (bn): BatchNorm2d(48, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)9 B3 X; l* c+ o0 T8 J ^+ u
(act): ReLU(inplace=True): J% E4 j T% F: b! Y" t
)
2 `7 g7 ^: i% l8 Y5 s6 ?' v )
" _ d% A- S* i" C' c& M (bn): BatchNorm2d(48, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)( ?9 J- S3 k) C F1 V# k
(soft): Softmax(dim=-2)# {' w1 H& H( m0 k5 J( y0 u: _+ a
(relu): CELU(alpha=0.01)* K) \% n3 y+ ^5 z( U( M. s
(expanding_conv): Conv2d(48, 432, kernel_size=(1, 1), stride=(1, 1), bias=False)! i( ]" N$ O. Y+ y
(reduction_conv): Conv2d(144, 48, kernel_size=(1, 1), stride=(1, 1), bias=False)
W" `- d1 P1 i )
. d5 d# b+ Z- b7 [- G6 ?' V )$ d1 ~) }$ } P6 q' H5 B. x3 ?+ H
(tcn): Sequential(
) d5 S; B0 i. k" t (0): BatchNorm2d(48, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
( |2 ]. b% g% S& f8 T) e) q0 ~ (1): ReLU(inplace=True)
0 D! U& X, K0 X5 n0 d4 R: q (2): Conv2d(48, 48, kernel_size=(9, 1), stride=(1, 1), padding=(4, 0))
$ L; V% b! L% g, r* P# I (3): BatchNorm2d(48, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)* ?, ~% F8 w: j, y3 G& Z; o
(4): Dropout(p=0, inplace=True)7 B% S" p$ X1 E, Z& y+ I: U2 k
)
! _+ r$ b% }- Y% p, x ) {; r* r' v/ x" V, v; I
)
+ L6 x6 _* `) Z2 V: p; ~( E1 _ )
$ o. O9 l$ q# L$ s1 i )& W; k/ v9 K1 g" C
————————————————) \7 t% g1 s& z/ G3 P
版权声明:本文为CSDN博主「FakeOccupational」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
( ]6 k- v, [; T* ?7 s* n% T6 @ 原文链接:https://blog.csdn.net/ResumeProject/article/details/1266784965 m' |9 G* R& R B
& v2 N$ Z& }5 m/ s& }! K! Z 2 j+ ?" q/ H" F ]5 d, L4 V
zan