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