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