QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 2565|回复: 0
打印 上一主题 下一主题

[其他资源] 骨架图算法Graph Embedded Pose Clustering

[复制链接]
字体大小: 正常 放大
杨利霞        

5273

主题

82

听众

17万

积分

  • TA的每日心情
    开心
    2021-8-11 17:59
  • 签到天数: 17 天

    [LV.4]偶尔看看III

    网络挑战赛参赛者

    网络挑战赛参赛者

    自我介绍
    本人女,毕业于内蒙古科技大学,担任文职专业,毕业专业英语。

    群组2018美赛大象算法课程

    群组2018美赛护航培训课程

    群组2019年 数学中国站长建

    群组2019年数据分析师课程

    群组2018年大象老师国赛优

    跳转到指定楼层
    1#
    发表于 2022-9-5 15:49 |只看该作者 |倒序浏览
    |招呼Ta 关注Ta
    骨架图算法Graph Embedded Pose Clustering
    1 [6 q$ w7 ?( X& G$ M
    + `7 [& J+ \* b# R骨架图算法. p1 B$ w1 V6 x, ^6 ?% w# \
    1 T$ a9 K8 u, y1 e! I

    - t1 J) h& S% F* q7 ?- aGraph Embedded Pose Clustering for Anomaly Detection
    ! N$ Y* i7 n$ y" O+ J$ ?4 qpaper        code
    * {$ p4 p$ s+ [- ]https://arxiv.org/abs/1912.11850        https://github.com/amirmk89/gepc
    + r/ M& Y- z  j$ F我们提出了一种用于人类行为异常检测的新方法。我们的方法直接适用于可以从输入视频序列计算的人体姿势图。这使得分析独立于扰动参数,如视点或照明。我们将这些图映射到一个潜在空间并将它们聚类。然后,每个操作都由其对每个聚类的软赋值来表示。这为数据提供了一种“词袋”表示,其中每个动作都由其与一组基本动作词的相似性来表示。然后,我们使用基于狄利克雷过程的混合物,这对于处理比例数据(例如我们的软赋值向量)很有用,以确定一个动作是否正常。8 m8 q6 B  I& H( b
    . P2 j' i1 D5 v5 A
    首先,我们对输入数据使用人体姿态检测器。这抽象了问题,并防止下一步处理诸如视点或照明变化等有害参数。人的行为被表示为时空图,我们将其嵌入(第3.1、3.2小节)并聚类(第3.3小节)到一些潜在空间中。现在,每个动作都表示为一组基本动作的软分配向量。这抽象了动作的基本类型(即细粒度或粗粒度),从而进入学习其分布的最后阶段。我们用于学习软分配向量分布的工具是Dirichlet过程混合(第3.4小节),我们将模型拟合到数据中。然后使用该模型确定动作是否正常。9 E: q. N. V9 o: z
    + Y( a% J( N. \9 i" R* A
    图的每个节点对应于一个关键点、一个身体关节,每个边表示两个节点之间的某种关系。 存在许多"关键点关系",如解剖学上定义的物理关系(例如,左手腕和肘部连接)和由运动定义的动作关系,这些运动往往在特定动作的上下文中高度相关(例如,跑步时左右膝盖倾向于朝相反方向移动)。图的方向来自于这样一个事实,即一些关系是在优化过程中学习的,并且不是对称的。这种表示的一个好处是紧凑,这对于高效的视频分析非常重要。* c4 @4 q- K+ n. N: {
    为了在时间上扩展,将从视频序列中提取的姿势关键点表示为姿势图的时间序列。 时间姿势图是人体关节位置的时间序列。时域邻接可以类似地通过连接连续帧中的关节来定义,允许我们利用姿势图序列的空间和时间维度执行图卷积运算4 ^, ?. l; R# g( ~
    4 K# _" |6 e! Q) a) q( u
    我们提出了一种基于深度时态图自动编码器的结构,用于嵌入时态姿态图。 基于图2所示ST-GCN的基本块设计,我们将基本GCN算子替换为新的空间注意力图卷积,如下所示。, ?9 X  h9 r0 S6 U6 P: L1 A7 Q) c3 x
    / h# n8 z/ t: `$ ]0 G
    3.2. Spatial Attention Graph Convolution4 ^" S5 k: A% p2 s6 _  ^
    我们提出了一个新的图算子,如图3所示,它使用三种类型的邻接矩阵:静态、全局学习和推断(基于注意力)。每个邻接类型使用单独的权重应用其自己的GCN。9 b6 S# ~0 O) I& R
    + ?  }/ q" t* M- w( L
    GCN的输出按通道维度堆叠。采用1×1卷积作为加权叠加输出的可学习缩减度量,并提供所需的输出信道数。
    / D0 r, a6 ~! {/ }' g( K( G- c& K& ~% A: m
    三个邻接矩阵捕捉了模型的不同方面:4 k- _" k* M, X3 h! J% x, t3 ?
    (i)使用身体部位连通性作为优先于节点关系,使用静态邻接矩阵表示。
    / w' m- W! h  i" E$ ?(ii)由全局邻接矩阵捕获的数据集级关键点关系,以及
    % @- y" @" _# ^3 [, Z( C* ^(iii)由推断邻接矩阵获取的样本特定关系。最后,可学习约简度量对不同的输出进行加权' M: t5 L9 N" d& a' F+ p$ }' W
    + U" t3 a# G6 F5 b" D3 ^

    1 [5 f' j8 @- n0 I后续段落介绍了静态、全局学习和推断的邻接矩阵的设置方法,即图3中的A,B和C,在此略过。
    & N( f, n' |- Y. P4 W, A" o3.3. Deep Embedded Clustering
    6 r8 D3 B" C- R/ o为了构建我们的底层动作词典,我们采用训练集样本,并将它们联合嵌入和聚类到一些潜在空间中。然后,每个样本由其分配给每个底层聚类的概率表示。选择目标是为了提供不同的潜在集群,这些集群上存在动作。' s! Z- i: y% f/ U! @
    9 P* _1 X8 }, Z5 b& k
    我们采用了深嵌入聚类的概念[32],用我们的ST-GCAE架构对时间图进行聚类。所提出的聚类模型由编码器、解码器和软聚类层三部分组成。
    ! w- \* X6 j& y9 B1 d# o7 U7 z, S: w0 r$ h2 j
    具体地说,我们的ST-GCAE模型保持了图的结构,但使用了较大的时间步长和不断增加的通道数来将输入序列压缩为潜在向量。解码器使用时间上采样层和额外的图卷积块,用于逐渐恢复原始信道计数和时间维度。/ S& z* \" q7 f# `+ F

    . Q' J6 r: I# UST-GCAE的嵌入是数据聚类的起点。在我们的聚类优化阶段,对基于重构的初始嵌入进行微调,以达到最终的聚类优化嵌入。3 R# y1 n. j# W, E
    7 [7 s6 L3 X8 q0 A1 i1 B: X$ `9 s
    符号        表示
    3 `' {3 w  ~; L  Z: R4 ~6 u0 ax i x_ix
    8 g  Z, W# \8 c5 J9 L; t: L8 R3 G# Zi
    0 V, a: T/ g- v& w5 J
    - B8 C$ `0 c( G( t7 J5 [1 R' x         输入示例7 h, ^$ O# H; a' k4 V1 k7 y$ F$ K
    z i z_iz # d9 F0 n% N( g6 ?: }4 S
    i
    ; x! A5 m; c) M2 d* n
    % z$ F- D+ {+ R         编码器的潜在嵌入- k" l" d. z( V" ?
    y i y_iy # a. f/ \' ]1 q& `' `6 z% P+ i
    i: Q# C: E1 I4 ~; E' i! E* h
    9 w$ K, u3 k4 n) ~
            使用聚类层计算的软聚类分配, x! p) C+ s5 I" g
    Θ ΘΘ        聚类层的参数
    1 f2 z7 I: v9 r. c  O  {p i k p_{ik}p
    : q: ~. X3 f9 h! H. k- p( rik  N3 G) X! n: h! Z8 H: G) O; I

    . H4 X. i& P7 d# J: J         probability for the i-th sample to be assigned to the k-th cluster8 P1 j% ?$ S- d% X( j
    3 m6 t( H/ @/ ~$ Y2 |7 W
    0 w, S& O2 L0 {5 Q, T
    我们采用[32]提出的聚类目标和优化算法。聚类目标是最小化当前模型概率聚类预测P和目标分布Q之间的KL散度:
    - G# z- K) |  b3 o  N
    ; x" Q5 Y: h8 O$ d* O) U: a6 A: [6 z- J7 \* r
    目标分布旨在通过标准化和将每个值推到更接近0或1的值来加强当前的群集分配。反复应用将P转换为Q的函数将最终导致硬分配向量。使用以下等式计算目标分布的每个成员:
    6 ~  ]" q2 E* c3 Q3 P/ L! H' |+ R3 q% b6 S) g: F
    , C. b& V+ b3 y3 i( A
    聚类层由为编码训练集计算的K均值质心初始化。优化以期望最大化(EM)的方式进行。
    & s$ I  r+ t9 \8 O在期望步骤期间,整个模型是固定的,并且目标分布Q被更新。在最大化阶段,优化模型以最小化聚类损失Lcluster。7 `9 h0 V9 N- H! q' h# D( o/ f' a/ L. a
    - v3 K5 E0 `0 d! y
    3.4. Normality Scoring- d( }0 g1 B6 s. V! m9 }
    该模型支持两种类型的多模分布。一个是集群分配级别;另一个是在软分配向量级别。例如,一个动作可能被分配给多个集群(集群级分配),导致多模式软分配向量。! g$ d/ b. O: E* G2 W' i* Q& B6 P
    软分配向量本身(捕获动作)也可以通过多模态分布建模。  I* R. K$ G( ]/ i

    ! L8 |8 v4 u/ O' W7 XDirichlet过程混合模型(DPMM)是评估比例数据分布的一种有效方法。它满足我们所需的设置:(i)估计(拟合)阶段,在此阶段,一组分布参数为评估,和(ii)推理阶段,为每个嵌入样本使用拟合模型。彻底的Blei和Jordan[4]给出了该模型的概述。$ {7 a9 L: w: N, N8 E
    ' f& F) ?4 Q0 n5 c
    Dirichlet过程混合模型(DPMM)是评估比例数据分布的有效方法。它符合我们要求的设置:
    2 T9 \6 ?* \3 Q# {2 o  U9 I(i) 估计(拟合)阶段,在此期间评估一组分布参数,以及
    & e3 m" L9 z) s9 s. U(ii)推理阶段,使用拟合模型为每个嵌入样本提供分数。Blei和Jordan[4]对模型进行了全面概述。
    ) H8 C- Z/ ^4 y/ Z; y' P/ V  P/ j8 I) Z/ x9 ^
    DPMM是单峰Dirichlet分布的常见混合扩展,并使用Dirichllet过程,这DirichletDistribution的无限维扩展。该模型是多模态的,能够将每个模式捕获为混合成分。拟合模型具有多个模式,每个模式表示对应于一个正常行为的一组比例。在测试时,使用拟合模型通过其对数概率对每个样本进行评分。[4,8]中提供了关于DPMM使用的进一步解释和讨论。2 z. w8 @& F& M, ]

    8 t1 q0 x% Q; c6 G3.5. Training
    1 [" r; j+ b+ |+ C( ~( u该模型的训练阶段包括两个阶段,一个是自动编码器的预训练阶段,其中网络的聚类分支保持不变,另一个是微调阶段,其中嵌入和聚类都得到优化。具体而言:1 n$ E. v1 b- \" q. c$ Q8 _' Y

    ( ?6 ~$ s0 S& j7 w0 H5 J, d+ |Pre-Training: 该模型通过最小化重建损失(表示为Lrec)来学习编码和重建序列,Lrec是原始瞬时位姿图和ST-GCAE重建的位姿图之间的L2损失. t9 y! d$ p7 U' V$ ~
    6 J% @  c9 g( L% ^. O) W7 {  y8 _
    Fine-Tuning:
    3 p! E, ^, f5 D8 J8 L该模型优化了由重建损失和聚类损失组成的组合损失函数。
    ) K3 S, ^3 t' t1 n进行优化,使得聚类层优化为w.r.t.Lcluster,解码器优化为w.r.t.Lrec,编码器优化为w.r.t.两者。7 r9 |" n2 A( F1 c. I/ ^9 |9 l) `% X
    集群层的初始化是通过Kmeans完成的。如[9]所示,当编码器针对这两种损失进行优化时,解码器保持不变,并充当正则化器,以保持编码器的嵌入质量。
    % d* }0 q: j+ t0 S- d本阶段的综合损失为:+ q4 {4 v2 ?3 S1 B
    , B0 X* c  Z$ a3 E. i5 U. w
    ! H( |$ p% j, \

    $ b2 N7 [) x+ N/ F1 C实现细节3 T* N. F1 J; {3 ~

    0 u2 o. i7 O3 H5 l' {% I5 j
    7 L. }; o2 l: \* h- O" s9 `, x8 v
    3 G/ V: J7 E8 f7 o" |% fdef calc_reg_loss(model, reg_type='l2', avg=True):! U$ D2 I) `6 J( |, A* ?  _
        reg_loss = None
    0 a" B* u6 J" C: _, v% q! o    parameters = list(param for name, param in model.named_parameters() if 'bias' not in name)
    3 B  v) V' C6 X1 N" }( g5 Y7 o, Q    num_params = len(parameters)
    7 Y8 N" P9 }9 y  M- Y    if reg_type.lower() == 'l2':
    3 F) E( d  e8 V9 f% M        for param in parameters:
    8 }) @1 r; j2 X; O            if reg_loss is None:
    ' r$ K, M2 }; P# a% A                reg_loss = 0.5 * torch.sum(param ** 2), i2 `$ {5 v* e6 f3 v# \
                else:
    - Z* C+ n% d7 F; K3 f9 M3 K                reg_loss = reg_loss + 0.5 * param.norm(2) ** 2- \( o+ U1 ]4 e; R
    4 ]; C: h5 |. }" K& B6 l. C0 z. F0 E0 Q4 X
            if avg:
    9 f5 x- o1 R1 r7 p* a% t            reg_loss /= num_params
    , {& f$ |3 f% f% k% @# x1 x: a        return reg_loss" h  w, }5 Z! [3 p8 Z4 r1 k4 Z
        else:' `' Z: B) o% A; Z3 I9 H* n, G
            return torch.tensor(0.0, device=model.device)" G7 l7 E7 E# {) i  `
    1
    3 f# i: p) K: z. v8 K; R2  ~; u' j0 q# M2 i" `! J
    3
    ) C9 G8 L3 r: v% o, E% m4" Z5 |. ], _' h$ d/ E0 K
    5
    ) R9 x  ?  k7 `( {# }: S6! e2 A4 c0 e2 u! p/ S4 W
    7
    0 o- E8 l& J0 N0 N8. I: G9 a1 q" [) a) N' M# d* `
    91 ^, g( {3 W' j/ Q3 q
    101 E, E* b5 _& D9 _: x4 a" p
    11
    ! e! m" E+ U# |9 b) d12
    # J3 b/ g/ _2 }* s3 p4 ]1 b13; U) D3 g# Z% ^' Y, D7 p" K
    14) q" p: w1 G: E5 b; M0 X
    154 h( J( r# j+ x0 Y0 {
    162 ^9 |7 G$ |1 d

    " t& U1 q" \1 e0 w' X8 K* |) [) |, V  h# H4 k4 a3 b

    # ^) t- w1 F! F8 s4 j' z* P' K" S& q
    PatchModel(
    7 C: v; o# s6 i' Z. X6 i. W  (patch_fe): Identity()
    ( M. a- s. W7 Q& ]- e4 ~  (gcae): GCAE(
    1 U1 Z2 b" g: H/ A' w, t% t    (data_bn): BatchNorm1d(54, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True), S% Z8 C" u/ o: S2 S
        (act): ReLU(inplace=True)
      i% h; y# Y# `8 X    (st_gcn_enc): ModuleList(9 T* K. y- c8 v! y, U$ Z
          (0): ConvBlock(
    # G4 [9 \9 f" S/ Q1 H' O        (act): ReLU(inplace=True)
    : n' p: `) s% l7 S# U8 E        (gcn): PyGeoConv(
    0 Z) _" L9 d& d7 P          (g_conv): SAGC(
    % u$ G9 ?, C, ^. O0 L( l" P8 p  h            (conv_a): ModuleList(+ H7 w  F. X2 {  W3 b) i: {
                  (0): Conv2d(3, 8, kernel_size=(1, 1), stride=(1, 1))
    ) V3 x% ^7 E1 {              (1): Conv2d(3, 8, kernel_size=(1, 1), stride=(1, 1))' `( r/ N4 A2 u: h% S1 t
                  (2): Conv2d(3, 8, kernel_size=(1, 1), stride=(1, 1))
    - m# P! k) H4 v* X            )
    * i4 r; M! F" C; h            (conv_b): ModuleList(
    # O' z, K1 I; {$ }              (0): Conv2d(3, 8, kernel_size=(1, 1), stride=(1, 1))8 M' U( m; ?. D
                  (1): Conv2d(3, 8, kernel_size=(1, 1), stride=(1, 1))
    % p2 c  u; @1 @3 r% x              (2): Conv2d(3, 8, kernel_size=(1, 1), stride=(1, 1))
    8 s7 w& w( n( k; e            )# F* V2 U9 M! C7 Y0 I& y! L# ^1 ]
                (gconv): ModuleList(
    & h( y- h+ V+ k/ C              (0): GraphConvBR(/ X! T8 l) _/ M+ {% p# b6 {
                    (bn): BatchNorm2d(32, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
    3 `$ {- {1 w% l                (act): ReLU(inplace=True)& \0 D! [: F9 W
                  )$ ]  F( G" J6 z) d" q
                  (1): GraphConvBR(
    " a4 @6 W9 @3 {" Z6 I+ l                (bn): BatchNorm2d(32, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)# N0 w5 \7 V: n, ?5 F
                    (act): ReLU(inplace=True)
    2 Z9 C0 _; C; d; s, f+ D              )
    8 @( ]! N3 V$ ]' n2 c              (2): GraphConvBR(
    4 N+ I7 T* Q) o/ _                (bn): BatchNorm2d(32, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
    $ u& U' [5 [2 W- l* |0 c                (act): ReLU(inplace=True)! X( t; X$ o7 F- z6 l- T) Z: y. U7 f) ]
                  )& U$ ?& a+ |' F
                )
    + \$ S3 D: C# Q) ]- l1 ]  [            (down): Sequential(
    6 b( T+ b$ s1 u+ M- d              (0): Conv2d(3, 32, kernel_size=(1, 1), stride=(1, 1))0 J/ v: g+ h- i7 C4 ^+ f+ t& R
                  (1): BatchNorm2d(32, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)3 e* M5 @! G9 `' g$ g# \( _
                )2 I% R( G/ F6 s7 P0 O7 ^
                (bn): BatchNorm2d(32, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
    1 C# C$ o( \# ?) i            (soft): Softmax(dim=-2)
    * T9 E; a6 `. `) r) C            (relu): CELU(alpha=0.01)
    8 r& w* f; S( s$ G            (expanding_conv): Conv2d(3, 288, kernel_size=(1, 1), stride=(1, 1), bias=False)
    . J" h; J- h: [9 S" T            (reduction_conv): Conv2d(96, 32, kernel_size=(1, 1), stride=(1, 1), bias=False)+ @) `7 N" s4 h3 B* I
              )
    $ l+ I* T7 F* d: Z2 M. S( d        )6 p; _$ {: I* s" c, V
            (tcn): Sequential(: O( u' g5 |, I5 H
              (0): BatchNorm2d(32, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
    + U2 V9 X7 G( ^  m  h: c6 D" c! n0 X" b          (1): ReLU(inplace=True)
    % m, y5 M7 I+ \          (2): Conv2d(32, 32, kernel_size=(9, 1), stride=(1, 1), padding=(4, 0))
    ' |- Z3 D7 O. ?. p# g          (3): BatchNorm2d(32, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)1 w! `$ o4 X( @4 S4 X6 G) H0 E& a
              (4): Dropout(p=0.3, inplace=True)+ i: w$ h- p% C7 C
            )
    5 a* n9 e8 `$ Z" d; v; N& t      )
    0 [; @$ Q5 D3 P9 W7 w      (1): ConvBlock(0 v- z+ ], K) r$ x* A+ i
            (act): ReLU(inplace=True)
    / H9 o5 S3 u) T( ^9 c        (gcn): PyGeoConv(
    1 N0 }- S5 W; j2 o* C          (g_conv): SAGC(
    + S" j1 Y3 u' [+ E            (conv_a): ModuleList(" e  w2 N! g1 v! }! N2 v
                  (0): Conv2d(32, 8, kernel_size=(1, 1), stride=(1, 1))  t" d1 d2 Y: q
                  (1): Conv2d(32, 8, kernel_size=(1, 1), stride=(1, 1))
    9 S- j+ m* W/ N! M              (2): Conv2d(32, 8, kernel_size=(1, 1), stride=(1, 1))
    + `* E# Q/ O( A$ w            )
    3 A8 c1 V* e3 W. R            (conv_b): ModuleList(
    , Q$ {* \3 }5 F: B  \              (0): Conv2d(32, 8, kernel_size=(1, 1), stride=(1, 1))
    3 B( @# p1 K8 @  t              (1): Conv2d(32, 8, kernel_size=(1, 1), stride=(1, 1))/ B$ r6 P4 P, d
                  (2): Conv2d(32, 8, kernel_size=(1, 1), stride=(1, 1))5 Z9 [/ F3 X0 P9 C' \
                )6 {' z; {( J; r# V! x8 Z4 _9 t
                (gconv): ModuleList(
    ; N" {9 [5 a. d              (0): GraphConvBR(6 k/ c' O9 K8 f2 K9 E5 K. V
                    (bn): BatchNorm2d(32, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)  k/ ^( Z% [- g7 h# `
                    (act): ReLU(inplace=True). w2 ~: I/ ^( W: H5 j3 t( g* G: s8 A
                  )" L$ U. A, _' U0 h% F2 k( K$ q
                  (1): GraphConvBR(+ m& h& t# K: b! V' A% q# v' W
                    (bn): BatchNorm2d(32, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
    ! o! e4 F6 W, f8 b, M- ^                (act): ReLU(inplace=True)% A# i6 X3 l- }, u- t
                  )5 u! {8 J0 V6 {7 P
                  (2): GraphConvBR(* [5 s3 ^) C0 @$ f- D$ A
                    (bn): BatchNorm2d(32, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)/ n& U7 _# b3 i3 v3 k6 e  @2 d' G# A
                    (act): ReLU(inplace=True)
    4 `8 E! v3 Y6 N8 D              )
    2 _1 Y. |' m5 V; Z8 T; N8 _            )" z3 e8 q- g) `3 M' N: m+ N
                (bn): BatchNorm2d(32, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
    # ]# Z# W! O, B! r            (soft): Softmax(dim=-2)5 m  t7 U# `  S
                (relu): CELU(alpha=0.01)
    2 r/ \. P# w/ [+ r8 h. z1 ]- Q* S            (expanding_conv): Conv2d(32, 288, kernel_size=(1, 1), stride=(1, 1), bias=False)
    3 I! {. b2 p6 m9 s            (reduction_conv): Conv2d(96, 32, kernel_size=(1, 1), stride=(1, 1), bias=False)% r; I& T$ O$ L$ M4 B
              )
    : H) r' |  x9 I2 ]) j: i4 w! W        )
    ; z0 Y! k5 Y- U+ R, T        (tcn): Sequential(; [/ R+ F9 V5 b9 j$ M7 [
              (0): BatchNorm2d(32, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)" T9 }! Q6 S( ~' W: V
              (1): ReLU(inplace=True)$ o. [4 Z+ a: [$ f  T8 @; D
              (2): Conv2d(32, 32, kernel_size=(9, 1), stride=(1, 1), padding=(4, 0))
    7 H+ x; a% v! g* T3 F" [8 q          (3): BatchNorm2d(32, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
    , ?/ R6 v; w- r2 Q3 Q5 {4 U          (4): Dropout(p=0.3, inplace=True)8 M9 s( l  }' {: m
            )6 h7 ^4 f$ Y5 X# B8 w; f
          )
    % p3 O  z4 s, [8 D4 Z! q      (2): ConvBlock(% b! E2 ~6 M' y) A- @$ `
            (act): ReLU(inplace=True); y1 W) k$ @3 I7 {7 H
            (gcn): PyGeoConv(
    & ?/ o$ B0 Y% \) T/ h' f" D" x          (g_conv): SAGC(! ?* U4 |9 G1 _, V6 C
                (conv_a): ModuleList(' c) X- |1 S8 Q( J$ `, a9 F
                  (0): Conv2d(32, 8, kernel_size=(1, 1), stride=(1, 1))
    - Y9 n' O4 m0 P  l- y* N9 x              (1): Conv2d(32, 8, kernel_size=(1, 1), stride=(1, 1))
    5 m  T* G7 z7 e$ C/ X/ B6 y              (2): Conv2d(32, 8, kernel_size=(1, 1), stride=(1, 1))
    0 ^6 y. T6 [! y4 I& x& _            )
    8 o: m# i& X* }0 ?            (conv_b): ModuleList(
      H5 o7 v; p* h. @' `6 d2 H              (0): Conv2d(32, 8, kernel_size=(1, 1), stride=(1, 1))
    * H1 b$ N; d. H# o7 B              (1): Conv2d(32, 8, kernel_size=(1, 1), stride=(1, 1))! n  Z8 C4 E- X) m, E2 n
                  (2): Conv2d(32, 8, kernel_size=(1, 1), stride=(1, 1)), k6 X; V) }! E4 ^- P+ w8 F
                ): P+ ^& L  K, H4 |
                (gconv): ModuleList(5 b; \: `7 h/ Q& A  g
                  (0): GraphConvBR(- x. f& B$ o/ R$ l( X1 x# l' H/ {
                    (bn): BatchNorm2d(32, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)7 t/ D3 [$ {( L( e- n- a5 D. U" P
                    (act): ReLU(inplace=True)
    , G7 m: @% G* I9 x              )* e2 f: v/ Z$ o7 \
                  (1): GraphConvBR(
    - f1 q% |7 ?! h% C+ l7 N* c$ E                (bn): BatchNorm2d(32, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)5 G" O8 n% s! U5 `# \
                    (act): ReLU(inplace=True)7 ~, ~' z+ E' z3 r! E* |
                  )
    % V9 \2 C, v7 k! I              (2): GraphConvBR(! q: i0 ^2 G- R" Z
                    (bn): BatchNorm2d(32, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)+ P0 ]" L0 s* @& p1 @" P: |
                    (act): ReLU(inplace=True)
    * m5 ?: k4 }3 n/ Q              )
    2 K! a+ x8 A, a( U; _1 A/ x2 X            )1 N. b' [1 ~" p  N0 y' |" l# y
                (bn): BatchNorm2d(32, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
    ; G. I; V& \8 j3 Y, G% ]  P            (soft): Softmax(dim=-2); X- C  H8 K4 F7 i6 R. o& c
                (relu): CELU(alpha=0.01)/ m# @2 R' s4 ^& [* ~' A
                (expanding_conv): Conv2d(32, 288, kernel_size=(1, 1), stride=(1, 1), bias=False)7 O& }' b  o" S' W/ m  J) e3 J. q
                (reduction_conv): Conv2d(96, 32, kernel_size=(1, 1), stride=(1, 1), bias=False)
    - Q1 g& h4 M- l) Y. X4 l          )
    % k' n; }1 ]# k$ @& `- B        )
    2 t' z! @0 n/ }0 \8 V  b, x# D        (tcn): Sequential(" s# H9 @! Z) p% T) Q
              (0): BatchNorm2d(32, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)7 ~! _. F" R& Q" c
              (1): ReLU(inplace=True)
    4 I6 C# F: `+ a7 v          (2): Conv2d(32, 32, kernel_size=(9, 1), stride=(2, 1), padding=(4, 0))
    : y' b+ U7 C0 o; q/ ~2 R          (3): BatchNorm2d(32, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
    - Z" f9 k% J) }0 l7 X+ u+ z$ o7 _          (4): Dropout(p=0.3, inplace=True)4 L$ F2 m( \$ q5 p7 ?
            )# _/ r4 O. @) p; S
            (residual): Sequential(
    / w7 a5 v- |# w, n8 _0 C          (0): Conv2d(32, 32, kernel_size=(1, 1), stride=(2, 1))
    . ?2 z) J# A  _# G          (1): BatchNorm2d(32, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)0 Y7 P4 \( y" u4 ^  T* ^
            )2 i- o" b0 a) N
          )' B; _, w9 f  q( E6 Z/ V' l% t
          (3): ConvBlock() H+ [- _+ J8 k# g( g6 a8 ^
            (act): ReLU(inplace=True)
    . c, I. Y  u* j        (gcn): PyGeoConv(
    ( A; S' H: D. r          (g_conv): SAGC(
    5 w' w4 X" s' o  Q6 g            (conv_a): ModuleList(8 K1 V9 Q, |  S7 J- q6 ?7 z
                  (0): Conv2d(32, 12, kernel_size=(1, 1), stride=(1, 1))
    / H" c0 I: x5 Y/ _* {$ E              (1): Conv2d(32, 12, kernel_size=(1, 1), stride=(1, 1))
    1 @) n' U( y* F5 z, U- H) k              (2): Conv2d(32, 12, kernel_size=(1, 1), stride=(1, 1))
    0 ]4 q4 _3 c1 g$ N; |- d2 G- z! @            )' i$ h- Q0 X9 f2 L" _- H
                (conv_b): ModuleList(3 U; ^4 N* U9 I: Y2 w9 q0 N; ^
                  (0): Conv2d(32, 12, kernel_size=(1, 1), stride=(1, 1))
    - `; w* N8 Y7 \' b. S2 B+ h; a              (1): Conv2d(32, 12, kernel_size=(1, 1), stride=(1, 1))
    9 L' a5 v, Z, n! a2 Q8 y              (2): Conv2d(32, 12, kernel_size=(1, 1), stride=(1, 1))
    7 T; h: {0 K! L1 @" H: {0 t& F            )0 g1 L8 v& m  }: }0 K# o! c
                (gconv): ModuleList(% K) C: M0 C9 l
                  (0): GraphConvBR(
      F2 d  {% |" y4 @6 o, |                (bn): BatchNorm2d(48, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)) f/ ^/ L. d4 A9 V4 V
                    (act): ReLU(inplace=True)
    / R3 }, {' f( M5 o$ _) l/ Z, }% R8 f. l              )
    / `# x  U  x1 m/ M% o! q' ^              (1): GraphConvBR(
    , H0 X6 S$ o1 P6 _# n. x- Q                (bn): BatchNorm2d(48, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)- ~) s" |' |7 G: R5 }/ \
                    (act): ReLU(inplace=True)  X% p: B) L1 l3 U
                  )
    4 S: C- k9 V+ V: \6 s              (2): GraphConvBR(
    . l' V3 s9 ^  q$ j; s( i5 Y, ^- \                (bn): BatchNorm2d(48, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)/ h1 A6 _, y2 U' @7 k1 M3 H
                    (act): ReLU(inplace=True)
    # A" n% e* k# [1 C4 `              )1 C" V7 s, j' v2 e7 C
                )
    $ r/ R0 L8 }) P            (down): Sequential(
    - G1 @5 C$ N" v              (0): Conv2d(32, 48, kernel_size=(1, 1), stride=(1, 1))
    ' R: [: J' H/ g* }' o  J' y. }              (1): BatchNorm2d(48, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)( X) S/ |# r! v. m6 t8 G
                )& D- C+ H6 z0 ~) I" J5 Y
                (bn): BatchNorm2d(48, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
    & {* M" |, c7 r# W8 k( P( ]' i, C            (soft): Softmax(dim=-2)
    - d& d" ~' s3 d' q2 {            (relu): CELU(alpha=0.01)
    ! C2 }% D  s( q% b3 N! A            (expanding_conv): Conv2d(32, 432, kernel_size=(1, 1), stride=(1, 1), bias=False)
    , a$ _. R$ I$ ?9 ^7 M            (reduction_conv): Conv2d(144, 48, kernel_size=(1, 1), stride=(1, 1), bias=False)' U+ T$ [$ a$ |6 t4 t, `
              )
    , w4 ^" d4 ]5 u6 q        )0 |. n: D6 m; _" e. a+ I  C1 ]4 l4 b
            (tcn): Sequential(
    2 M3 B# O* T  A7 G" p          (0): BatchNorm2d(48, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
    / x" A# Q' m# @# J          (1): ReLU(inplace=True)
    2 J: ~) ]; M6 |) j          (2): Conv2d(48, 48, kernel_size=(9, 1), stride=(1, 1), padding=(4, 0))5 ?( y: h8 c8 b6 I1 i, n$ G
              (3): BatchNorm2d(48, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
    3 [# a& O: _4 T) A1 s          (4): Dropout(p=0.3, inplace=True)
    ) s$ a/ @* z, ]' n5 J0 U        )! @: a& B  J9 ?; g% k
            (residual): Sequential(* s$ X% q; d  @5 f
              (0): Conv2d(32, 48, kernel_size=(1, 1), stride=(1, 1))
    . E" Q6 R6 t- o8 W- U5 C7 H% K          (1): BatchNorm2d(48, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
    / G& B- q6 W1 W4 W3 v        )& B/ w, Z' x4 B1 L  S; U" @5 x7 O6 R  M
          )
    5 I: P2 Y2 j- i      (4): ConvBlock(
    , d4 T  ?! {7 s. _9 N        (act): ReLU(inplace=True)# a2 _/ Y- p  n5 J6 H
            (gcn): PyGeoConv(
    3 u4 M& J1 \/ F) ?          (g_conv): SAGC(9 }, \- k+ w2 ~% [% @2 Y
                (conv_a): ModuleList(
    ' u; \. c5 _: o  `              (0): Conv2d(48, 12, kernel_size=(1, 1), stride=(1, 1))5 E. E- h. d8 j
                  (1): Conv2d(48, 12, kernel_size=(1, 1), stride=(1, 1)). ?! Z9 X3 Z% R: S4 w8 p
                  (2): Conv2d(48, 12, kernel_size=(1, 1), stride=(1, 1))
    : Z* ]1 ^. y' g# Z            )
    / c! C, O6 r& @# J" k& z) a            (conv_b): ModuleList(; C6 M4 V, t8 {/ g, X/ V8 c
                  (0): Conv2d(48, 12, kernel_size=(1, 1), stride=(1, 1))- o- {8 u- }6 G5 t. h1 ~9 [
                  (1): Conv2d(48, 12, kernel_size=(1, 1), stride=(1, 1))
    6 s! [* F- f; D- X              (2): Conv2d(48, 12, kernel_size=(1, 1), stride=(1, 1))
    . V6 j5 ~! A5 s3 s& N            )
    / h7 n# k. t1 z            (gconv): ModuleList(
    & k8 t  i+ g" I              (0): GraphConvBR(
    % A* e) ^# j9 V                (bn): BatchNorm2d(48, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)( s5 d2 }: ^5 a  _8 X
                    (act): ReLU(inplace=True)' i: f& I2 \" F* v& z0 S& b
                  )
    % t6 B% [% y" ~: s$ W              (1): GraphConvBR(0 }( W" j3 D( z' e, x' r3 o
                    (bn): BatchNorm2d(48, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)1 Q5 }4 g; n2 e* \( q* g0 q
                    (act): ReLU(inplace=True)
    & w4 P- j! ~' s/ v# p1 o              )
    1 L( g  M) p9 f              (2): GraphConvBR(
    6 w% u, i0 ^3 @6 `: d                (bn): BatchNorm2d(48, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)/ z3 _+ U- C6 B( n
                    (act): ReLU(inplace=True)
    ! R6 c, K$ j" u, G- u0 b! B" p              )) d$ J6 s+ k8 [$ I9 }
                ); Y3 |1 a6 z5 j# t
                (bn): BatchNorm2d(48, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)8 I" P# u$ ^' p& D6 o& l
                (soft): Softmax(dim=-2)
    0 a# A/ n# Z  K0 f2 N            (relu): CELU(alpha=0.01)
    . I  H( [" [: U8 X  \7 N7 z            (expanding_conv): Conv2d(48, 432, kernel_size=(1, 1), stride=(1, 1), bias=False)
    8 C6 i0 E$ H2 p* r            (reduction_conv): Conv2d(144, 48, kernel_size=(1, 1), stride=(1, 1), bias=False)
    4 w6 {. @  r+ ]          )% S( c8 ?  N, [
            )7 p/ _0 D2 m8 }
            (tcn): Sequential(
    / J$ N9 T! l, B. P, `8 m$ J! h& Z, Y          (0): BatchNorm2d(48, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
    0 d4 N& D# |& m& X: i, N1 D  g          (1): ReLU(inplace=True)
    ( P; `% L+ T% ]9 h) r          (2): Conv2d(48, 48, kernel_size=(9, 1), stride=(1, 1), padding=(4, 0))" X6 M( s( I- \% J: [
              (3): BatchNorm2d(48, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)$ Z7 `$ ^) P7 V. |5 A, r( [! c' h
              (4): Dropout(p=0.3, inplace=True)4 d# f! c; ]8 A3 A$ u$ o
            )/ N' v; U. B% Y( \
          )7 R; ^2 e: c- j
          (5): ConvBlock(/ _  ^+ G' W  D- x2 X
            (act): ReLU(inplace=True)
    - S5 Q  C6 \) f, o. i% A        (gcn): PyGeoConv(/ n/ I- r2 k8 E2 S* `. d3 ?* q& x
              (g_conv): SAGC(7 _. j+ p- j+ L  j
                (conv_a): ModuleList(
    4 W" o$ g$ y. z# y6 q; i) b4 U! a              (0): Conv2d(48, 12, kernel_size=(1, 1), stride=(1, 1))& ^9 X4 [! z; e: N- k" {, a/ X
                  (1): Conv2d(48, 12, kernel_size=(1, 1), stride=(1, 1))
    2 U' J) h- [' n- y4 g              (2): Conv2d(48, 12, kernel_size=(1, 1), stride=(1, 1))
    6 U( d3 b( |8 P) B8 V- r2 E            )' F; J) F' D6 J# \' e. k
                (conv_b): ModuleList(6 a& Z+ Z0 U5 Z: o" ?. i+ ^
                  (0): Conv2d(48, 12, kernel_size=(1, 1), stride=(1, 1))
    9 c9 T3 o' e/ ^# @1 I) P              (1): Conv2d(48, 12, kernel_size=(1, 1), stride=(1, 1))
    3 X5 q% {6 A' }9 Y( {: j              (2): Conv2d(48, 12, kernel_size=(1, 1), stride=(1, 1))
    " x. p8 @$ ]" `) t: S            )3 ]2 a/ w+ ]1 {  W: X+ c
                (gconv): ModuleList(
    2 [& c" f! H7 ]) @. d4 ]% F              (0): GraphConvBR(
    ) n! e6 i& j" v$ ]; P0 E                (bn): BatchNorm2d(48, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)0 X6 N" Y3 _( B& z3 r3 `
                    (act): ReLU(inplace=True)6 t& f! ~& U- U, X* u( [4 M0 g
                  )
    " e3 j; d3 G& E) C* D              (1): GraphConvBR(( H( A7 D" d% ~/ b; W# l7 S/ i0 n# G/ P
                    (bn): BatchNorm2d(48, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)' Y& j# R/ ]7 C4 h8 F8 f
                    (act): ReLU(inplace=True)
    7 P6 z( v  {- K              )
    $ M) l0 R/ A2 h: v$ t& Z  A& ~              (2): GraphConvBR(' Y5 i/ t- B- C: k2 O. I
                    (bn): BatchNorm2d(48, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True), U8 k, l, w+ d3 W. w+ _
                    (act): ReLU(inplace=True)5 t7 w1 K) E3 I7 j: r& [
                  )
    " K0 U7 U* n/ V& i/ I- g4 K            )
    8 x$ q# J4 \2 n8 X5 U* A6 e- i; r            (bn): BatchNorm2d(48, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)3 r2 b) o. Z1 e- y# X4 W
                (soft): Softmax(dim=-2)
    ' M" \3 ^8 `7 r4 W8 \/ Y            (relu): CELU(alpha=0.01)
    . G' f: R% W0 `7 h, ?' X            (expanding_conv): Conv2d(48, 432, kernel_size=(1, 1), stride=(1, 1), bias=False)
    ! s! l2 v! M! H9 f$ {$ P/ E* ~            (reduction_conv): Conv2d(144, 48, kernel_size=(1, 1), stride=(1, 1), bias=False)
    3 |( O. ]- w6 {! G, j5 ?          )2 c' V* H; r8 }9 X7 M
            )
    $ o$ n* q+ I! \( }- X' x1 |9 W        (tcn): Sequential(
    2 _1 B9 t5 G% z1 ?          (0): BatchNorm2d(48, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)- p7 g; Y7 Q7 ]" V5 _' ~0 ~, l
              (1): ReLU(inplace=True)
    / |, d: O/ r3 Q& U          (2): Conv2d(48, 48, kernel_size=(9, 1), stride=(3, 1), padding=(4, 0)): T' ~5 I( j' P2 c
              (3): BatchNorm2d(48, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)8 V0 x. N5 h* d/ C$ t! O  }+ r
              (4): Dropout(p=0.3, inplace=True)" e3 c/ {9 k' T: b8 e* L
            )
    6 r( Q9 @9 i7 H7 W7 p& f( E        (residual): Sequential(- b% c& U0 @2 ~' i. f
              (0): Conv2d(48, 48, kernel_size=(1, 1), stride=(3, 1))* W& O1 w% ]1 ~8 b9 t
              (1): BatchNorm2d(48, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)$ k  C8 x2 ~. J2 }9 b
            ), o0 u6 Y2 i3 g) B3 \1 Z1 w+ U
          )
    : K0 G" P1 n+ }- {1 o+ H# \; t( L      (6): ConvBlock(' l" V/ s" q' D% P; |% \5 X
            (act): ReLU(inplace=True); x) Z; {) |) {4 n
            (gcn): PyGeoConv(
    , N7 _) u& i" e7 m4 d% a& {7 v          (g_conv): SAGC(. S- A: a3 J' P1 s
                (conv_a): ModuleList(/ T% ?# g$ `& B1 M" Q, A$ G
                  (0): Conv2d(48, 16, kernel_size=(1, 1), stride=(1, 1))
    . k/ U$ r+ y) @: a$ A! \2 i              (1): Conv2d(48, 16, kernel_size=(1, 1), stride=(1, 1))
    ; O( t$ @9 Z9 [3 n$ x              (2): Conv2d(48, 16, kernel_size=(1, 1), stride=(1, 1))
    & ~9 U% J% ?) A, X1 P& U/ H" S            )' f, ?  `3 c: g3 k
                (conv_b): ModuleList(
    5 L- w" \5 S1 ?" L! ?5 ^/ ^              (0): Conv2d(48, 16, kernel_size=(1, 1), stride=(1, 1))3 F3 v7 G1 P7 G) r: O9 l  P
                  (1): Conv2d(48, 16, kernel_size=(1, 1), stride=(1, 1))
    1 k  l+ g' q: L& Z: k              (2): Conv2d(48, 16, kernel_size=(1, 1), stride=(1, 1))
    4 G' P) w" C, {4 l& j# m, @( z. D            )
    3 [, M% Q# O% `7 }; Z            (gconv): ModuleList(
    ; [( q( n  k2 c8 J* J              (0): GraphConvBR(
    : s4 @7 D6 T# r8 J! {                (bn): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
    $ c  q- w) d- q. u0 W                (act): ReLU(inplace=True)1 L1 M% _% ]; J" C! W9 E) t
                  )
    1 K! G; P6 C& ~8 R4 l( Z              (1): GraphConvBR(
    3 @2 w$ R% O9 _& v& i                (bn): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
    # A& }7 R- N* o/ a7 d                (act): ReLU(inplace=True)
    $ q5 h* t  C: ?2 |5 d# N, C: z1 |              )* B  }0 Q' z, H# T; H
                  (2): GraphConvBR(
    4 U% s2 Z' H/ Z5 `; ~7 p                (bn): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
    : Z: B; c7 F7 A- c) ?                (act): ReLU(inplace=True)4 [9 o& s# S- ^5 j# i6 y
                  ); F8 {/ M, z  S5 ^$ f" @, D" |
                )
    & X8 a9 Y/ Z- l9 L+ M; o5 O            (down): Sequential(
    8 v$ q  q  N. `3 B5 d  f              (0): Conv2d(48, 64, kernel_size=(1, 1), stride=(1, 1))7 M1 Y4 F8 }* r
                  (1): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
    # b, Z* w, g! ]3 X            )$ L% o& @& `! `) U4 c: X4 G
                (bn): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)! N0 e. a" {% n% a8 T1 a2 X
                (soft): Softmax(dim=-2)8 P1 h. M1 r7 B/ }2 X& ~. j
                (relu): CELU(alpha=0.01)
    + j: n5 s& ^# z" R2 L            (expanding_conv): Conv2d(48, 576, kernel_size=(1, 1), stride=(1, 1), bias=False)( v" C. R3 I+ |
                (reduction_conv): Conv2d(192, 64, kernel_size=(1, 1), stride=(1, 1), bias=False)9 p7 W. y. z, {6 ?- k' N
              )
    0 x+ h2 f/ D" f- \        )$ W$ ~/ V* }% Z
            (tcn): Sequential(1 R7 d: U/ d5 D* c+ w
              (0): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)  S/ M% h  a7 j0 P* P; P: k
              (1): ReLU(inplace=True)) W5 Y. \5 X' S; D
              (2): Conv2d(64, 64, kernel_size=(9, 1), stride=(1, 1), padding=(4, 0))
    ) B7 `& ]/ I2 k3 }          (3): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)/ m, r) d. E2 Y+ Y' m
              (4): Dropout(p=0.3, inplace=True)
    0 N, x3 q& ?. K7 W0 U4 b        )
    ; k- H. e$ s2 U* \6 R- V  w        (residual): Sequential(4 J7 j' _/ w3 N& M8 k* ]
              (0): Conv2d(48, 64, kernel_size=(1, 1), stride=(1, 1)); T0 S3 q. I1 ~* ]
              (1): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
    $ ?* |' N+ c( Q3 P9 ?        )
    . y' O# m5 B, u4 A- _( r# L$ H      )
    5 L4 s+ Q$ C& F: ]. c2 K      (7): ConvBlock(! H& X2 \: V+ j  A
            (act): ReLU(inplace=True)6 r9 h3 ?! v6 P! E
            (gcn): PyGeoConv(
    7 L! y, k" n, B, J% n! ]5 s2 c          (g_conv): SAGC(+ N* m1 n9 b& c, C& x, u( B
                (conv_a): ModuleList(6 g+ A3 B( T. W) u& f8 X# y
                  (0): Conv2d(64, 16, kernel_size=(1, 1), stride=(1, 1))/ S2 Y! b; \6 n) w8 S7 x
                  (1): Conv2d(64, 16, kernel_size=(1, 1), stride=(1, 1))
    ( ?2 O; }, h7 K3 N+ S4 M( J- I. _              (2): Conv2d(64, 16, kernel_size=(1, 1), stride=(1, 1))* P( u, ?0 O+ _# {; x6 R; ]0 D) I
                )
    0 C0 F) F3 y; s5 j; @1 s            (conv_b): ModuleList(
    4 H: p7 Q, C6 q6 p              (0): Conv2d(64, 16, kernel_size=(1, 1), stride=(1, 1))0 J( v3 d* x, T& R: W  S
                  (1): Conv2d(64, 16, kernel_size=(1, 1), stride=(1, 1))9 k, p2 H5 }' s( B1 n5 }, V2 _+ _  p
                  (2): Conv2d(64, 16, kernel_size=(1, 1), stride=(1, 1))$ G% E$ P7 R! o% k. J3 ]& U
                )
    , i- l  x2 U- m' ~$ z1 a            (gconv): ModuleList(" M- X9 Z. T- E6 x( S# C- M
                  (0): GraphConvBR($ N  k5 J9 e! F6 P5 G+ L6 x
                    (bn): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)8 T' ?# w! X* N/ k
                    (act): ReLU(inplace=True)% i' e: `! Q- O# b  O4 h3 r
                  )
      X$ X- T% U  H              (1): GraphConvBR(
    ; Y' a2 n" f7 _9 Y                (bn): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)! _; ]+ W" k6 n- x' Y: W
                    (act): ReLU(inplace=True)
    % F# d  U7 y% ]              )4 i$ C7 R8 e+ f% L1 y$ V7 s1 G
                  (2): GraphConvBR(4 Y/ z% F" }; s
                    (bn): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
    1 I" g' ]9 X; U7 @5 x4 j( i                (act): ReLU(inplace=True)" h  z6 K" K" v8 Y' j9 D
                  )
    ' y7 o+ s8 F3 `4 Q. Q            )
    - H4 r  I7 h* z, H! P' |            (bn): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)$ _1 a9 U4 I& A8 H+ d
                (soft): Softmax(dim=-2): w' Z# j* E8 B
                (relu): CELU(alpha=0.01)7 Q' f, F) H3 h- ?
                (expanding_conv): Conv2d(64, 576, kernel_size=(1, 1), stride=(1, 1), bias=False)
      m& J; C, [$ [# C            (reduction_conv): Conv2d(192, 64, kernel_size=(1, 1), stride=(1, 1), bias=False)
    ' v! w+ J% s3 d: H/ O  J! i- Q          )( S- ]2 n+ w5 o" [( m2 g$ {
            )+ q$ X9 l; G7 Q6 y
            (tcn): Sequential(( G8 V) u4 I5 A% F5 [
              (0): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)1 @5 q* _8 v2 U4 Q4 l! v
              (1): ReLU(inplace=True)$ b# V3 F4 a- z; y; v3 `
              (2): Conv2d(64, 64, kernel_size=(9, 1), stride=(1, 1), padding=(4, 0))7 B& R1 R0 T1 B+ `- _) c
              (3): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)* |1 X3 [1 B0 B" |& c
              (4): Dropout(p=0.3, inplace=True)
    8 i: t# f( T8 I5 N        )
    " @# \+ |" s! [; R# l" R! b' ^      )
    5 w# L/ j6 h$ a* ?  Y, s0 O9 R      (8): ConvBlock(3 T' X6 R) ]4 T* O- J
            (act): ReLU(inplace=True), Y& o9 F7 @) x/ P$ o& H  [# {2 e
            (gcn): PyGeoConv(2 m/ V9 n+ k8 e4 N) l
              (g_conv): SAGC(( V. F9 P0 }6 p% m* I8 X9 W2 k$ X/ E9 \
                (conv_a): ModuleList(# l' |+ r+ ^6 ]& ^6 t8 O
                  (0): Conv2d(64, 8, kernel_size=(1, 1), stride=(1, 1))
    ! @3 i/ {1 E! A& p! D              (1): Conv2d(64, 8, kernel_size=(1, 1), stride=(1, 1)); u+ G$ ]' v; l! Z& v. W* J
                  (2): Conv2d(64, 8, kernel_size=(1, 1), stride=(1, 1))
    8 A( A+ y# `# |' {. P% y            )9 ], s9 R0 h& R7 a. u9 A. H
                (conv_b): ModuleList(% E( V2 ^- Q& I% D* K
                  (0): Conv2d(64, 8, kernel_size=(1, 1), stride=(1, 1))8 N# ?$ g) f- V
                  (1): Conv2d(64, 8, kernel_size=(1, 1), stride=(1, 1))1 D+ W/ v7 I* n2 O
                  (2): Conv2d(64, 8, kernel_size=(1, 1), stride=(1, 1))5 ]2 O& n, f* D* t6 G) v6 ^
                )
    6 k  D' c6 V; a  B  |8 j            (gconv): ModuleList(! o8 f  t5 }7 K' l
                  (0): GraphConvBR(
    % B  i* }- z  z. F                (bn): BatchNorm2d(32, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)+ S, F9 s8 i" T7 H
                    (act): ReLU(inplace=True)# _4 Y3 w! z6 c4 Q2 O
                  )
    7 _* P' f: H, ]2 y' [! b              (1): GraphConvBR(: N$ {/ L' d4 x: \
                    (bn): BatchNorm2d(32, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
    ) B, e" I) g. x; w  i# I, F; q( ~5 n, D                (act): ReLU(inplace=True)
    * ~, ~; L. S! y/ ]; g6 ]- Z              )
    % {# E) {2 @4 ]4 ?              (2): GraphConvBR(4 G+ h( S& l* g: l7 A8 i) b
                    (bn): BatchNorm2d(32, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
    ! s8 v( x* L, x5 y8 F0 A                (act): ReLU(inplace=True)8 e8 G3 S3 d7 k5 N3 o
                  )
    ) q6 V8 x. w: W# A% u            )
    % k" d* m. [0 H/ f            (down): Sequential(8 r5 B" R' l4 w: D9 K
                  (0): Conv2d(64, 32, kernel_size=(1, 1), stride=(1, 1))2 a; l, y* P+ E' o
                  (1): BatchNorm2d(32, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
    % [- T- \6 S; y% O( D            )" o' {# [  B0 @+ F4 {1 E" f, h
                (bn): BatchNorm2d(32, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
    " X. s/ k$ _. d. G            (soft): Softmax(dim=-2)  `, H  c3 c3 C; {: K) }  a( A5 t$ t
                (relu): CELU(alpha=0.01)) h, T5 }5 i+ d/ O0 S
                (expanding_conv): Conv2d(64, 288, kernel_size=(1, 1), stride=(1, 1), bias=False)
    # ~* [7 R& N; s' t            (reduction_conv): Conv2d(96, 32, kernel_size=(1, 1), stride=(1, 1), bias=False)
    + W  t; L  M. M2 ^8 t) ~          )
    9 n+ B0 |0 g8 f6 y        ), |- b$ u: S) m6 U- Z
            (tcn): Sequential(1 v* D, p' M0 i1 }9 o
              (0): BatchNorm2d(32, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
    : J" \+ B3 g2 d          (1): ReLU(inplace=True)
    . k' g* J0 [' [( K% c          (2): Conv2d(32, 32, kernel_size=(9, 1), stride=(1, 1), padding=(4, 0))2 Q; L. E0 W* d: q
              (3): BatchNorm2d(32, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
    $ J1 H' F) X) M9 e" D          (4): Dropout(p=0.3, inplace=True)) ^9 I2 g% a/ \
            )
    & L6 i9 f2 v4 ]5 m; v        (residual): Sequential(
    " I# A8 g, _% M          (0): Conv2d(64, 32, kernel_size=(1, 1), stride=(1, 1)), s$ i1 N+ g! E# J
              (1): BatchNorm2d(32, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
    # |, g6 ]. ?- a. Q; m        )
    + i( ~  \1 c$ M) A$ ~      )  l4 |3 U& \' _) w- w% H
        )6 a! J# \: t# V( m! g( b
        (dec_final_gcn): ConvBlock(/ p7 p* v7 r* a0 b/ w
          (act): ReLU(inplace=True)
    * W$ k8 N# ]. Z% r0 f      (gcn): PyGeoConv(6 f4 F7 ]1 D+ p2 C0 }, U
            (g_conv): ConvTemporalGraphical(1 r( I+ R9 V$ I
              (conv): Conv2d(48, 9, kernel_size=(1, 1), stride=(1, 1))
    : N1 G' \( n8 z# v$ s6 {        )
    ! H/ D# m" t7 E      )
    : l, a! W+ J6 X1 {( v4 i; D/ h. g      (tcn): Sequential(0 d2 J4 b/ `6 s5 z$ k
            (0): BatchNorm2d(3, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
    4 {# J3 R8 k5 `; i' H- N        (1): ReLU(inplace=True)/ p! r7 O7 Q4 Y* q
            (2): Conv2d(3, 3, kernel_size=(9, 1), stride=(1, 1), padding=(4, 0))
    & D" p3 a/ c4 D% `        (3): Identity()
    6 m0 I( J9 I2 ^. g2 d7 T        (4): Dropout(p=0.3, inplace=True)' G) F, U" m5 e/ @/ x" j, d
          )
    7 T& C' D! _: B# W& I1 G    )8 p  _/ K' P6 X  U  S
        (st_gcn_dec): ModuleList(
    6 d; T1 B9 V6 M8 K! c  k2 i      (0): Upsample(scale_factor=(3.0, 1.0), mode=bilinear)
    ) ~4 I, V9 u/ D& C+ ?3 F      (1): ConvBlock(
    3 \3 P  r! k# U- f7 ?2 O1 W& A        (act): ReLU(inplace=True)4 z6 n. x* L; v. {
            (gcn): PyGeoConv(
    0 t" a) W" q4 Y9 Y+ b- f          (g_conv): SAGC(
    * {% [5 k! }. D            (conv_a): ModuleList(# m' [" A& _7 ^9 q% v
                  (0): Conv2d(32, 16, kernel_size=(1, 1), stride=(1, 1))
    & G$ P' ?) w" E9 b: T3 d6 D              (1): Conv2d(32, 16, kernel_size=(1, 1), stride=(1, 1)): [& h. o% c" D+ r% j& B) L
                  (2): Conv2d(32, 16, kernel_size=(1, 1), stride=(1, 1))
    8 g1 x2 \$ b0 a& S8 e            )) O! X' h+ `3 v2 B
                (conv_b): ModuleList(5 f# l: |. m9 A5 r& P5 g* j
                  (0): Conv2d(32, 16, kernel_size=(1, 1), stride=(1, 1))) j  L; b: u9 _. `/ u- x3 N$ ]% ?
                  (1): Conv2d(32, 16, kernel_size=(1, 1), stride=(1, 1))* I' A( g2 c/ b+ e% q% A) Z
                  (2): Conv2d(32, 16, kernel_size=(1, 1), stride=(1, 1))+ p, i; B- J) l5 T3 d
                )
      g# U4 F2 g# i            (gconv): ModuleList(
    # k; f9 ^: P# H3 Y; c; x              (0): GraphConvBR(
    : r3 [7 W+ @- c& @6 U" ?- ]                (bn): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True): [5 y; m( _8 i/ ?
                    (act): ReLU(inplace=True)$ D' @" _9 J: j; h
                  )
    + @, D8 }6 @8 z7 A7 f/ O              (1): GraphConvBR(
    # Z! {* @9 Z  v/ J                (bn): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
    * f, A$ z4 C( `" d3 F1 N                (act): ReLU(inplace=True)4 g% E( N8 I& a* S
                  )
    % ?. W, W4 Y9 i! C8 v              (2): GraphConvBR(
    $ E) ^: m1 [7 \; u                (bn): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)- _/ h( @& G! @; n5 ~3 l" i
                    (act): ReLU(inplace=True)0 Y+ M  h+ |/ u2 f" [8 P4 i
                  )
    : K5 x4 w& i: F; \5 h1 x            ), U0 `! F' p- [9 k* A
                (down): Sequential(
    / U5 d8 g$ @2 S; K              (0): Conv2d(32, 64, kernel_size=(1, 1), stride=(1, 1))
    ! D8 E. h3 a/ Q) q& q              (1): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)1 n) n7 X  U8 \8 r1 `
                )8 q) v3 s; o! A0 N" s4 x* T
                (bn): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)( q$ n* n; S( C/ j0 {7 ~( E
                (soft): Softmax(dim=-2)
    2 ^  k+ p1 @: N5 [% O. A  @6 m) q            (relu): CELU(alpha=0.01)$ z  i. m0 c9 ~5 _; W* }+ k
                (expanding_conv): Conv2d(32, 576, kernel_size=(1, 1), stride=(1, 1), bias=False)
    - t) e" Y1 O* o1 E' ?3 `            (reduction_conv): Conv2d(192, 64, kernel_size=(1, 1), stride=(1, 1), bias=False)
    ' }7 g/ A# y5 K( M& a          )2 C7 V4 i- L) H2 a
            )
    / F  S( W5 p0 B# P1 o0 O$ k, S        (tcn): Sequential($ m2 i3 K2 Y; Z
              (0): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)3 I2 H' b" o' A; `
              (1): ReLU(inplace=True)1 u. _: g1 W2 V, _
              (2): Conv2d(64, 64, kernel_size=(9, 1), stride=(1, 1), padding=(4, 0))
    8 D. C" L0 l! O  u* [4 I          (3): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
    7 f4 V3 R5 t6 N" P9 X( v          (4): Dropout(p=0, inplace=True)
    $ K! Q1 i  v- B0 s5 I" j" }+ A        )/ B; g/ s8 a. ?  B' Y( J: }$ Z- e, b
            (residual): Sequential(
    * M! o# A/ @% ?' Z1 l          (0): Conv2d(32, 64, kernel_size=(1, 1), stride=(1, 1))
    ' Q9 v8 W# r" n' P; t  u8 ~          (1): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)6 D) K& i& G6 `
            )
    8 T( i% x+ {6 v! k4 C3 W      ): P" G) f4 q" f" i/ Y
          (2): ConvBlock(
    6 x( R' _% R* N& c! D        (act): ReLU(inplace=True)3 P0 ]! M: L" B3 r
            (gcn): PyGeoConv(
    7 q4 b# r9 b2 N' L          (g_conv): SAGC(
    ! J7 ^& S( c% t" d$ {            (conv_a): ModuleList(
    - N/ s  |3 P6 T" o; X2 P6 Z              (0): Conv2d(64, 16, kernel_size=(1, 1), stride=(1, 1))& I$ X; d9 _4 D! e9 z' X; @
                  (1): Conv2d(64, 16, kernel_size=(1, 1), stride=(1, 1))
    6 e: T8 j5 b7 l% p2 J, r              (2): Conv2d(64, 16, kernel_size=(1, 1), stride=(1, 1))7 V  x1 M, c2 {5 b
                )
    % p% t  T( c! W3 C            (conv_b): ModuleList(1 H% H7 b/ c1 ?) b5 @& u: J
                  (0): Conv2d(64, 16, kernel_size=(1, 1), stride=(1, 1))+ Q' _; C- [& r8 l, i1 X4 C" e
                  (1): Conv2d(64, 16, kernel_size=(1, 1), stride=(1, 1))5 X# Q. ^% f" j6 c, X5 ^
                  (2): Conv2d(64, 16, kernel_size=(1, 1), stride=(1, 1))
    , G7 S. f. Y  [/ w            )
    ) A# F- e8 `2 ^3 g. |0 ~            (gconv): ModuleList(
    4 Z6 ]/ r' v# E0 e              (0): GraphConvBR(
    , `! H1 ^  {% A( q4 j6 m3 f7 _. ^                (bn): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
    0 E8 u4 t# x" v                (act): ReLU(inplace=True): D. C, a; Q  ]9 H0 J& E( x
                  )$ U7 [5 \+ ?6 S' W1 }( G/ k5 t
                  (1): GraphConvBR(5 c) |, [5 n& F/ [+ k
                    (bn): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
    $ s' m4 y/ X- _) V$ C                (act): ReLU(inplace=True); G/ s' S1 t% y  I& Q( ~
                  )$ r' T& o! f* @6 x5 C+ g
                  (2): GraphConvBR(
    ; Y" t! {% C) ]5 h                (bn): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)( Q$ m0 S+ G" C8 ?$ e
                    (act): ReLU(inplace=True). _- v! p; Z' K
                  )" ^8 Z* X  G4 }, u
                )) L7 e6 C; D$ e
                (bn): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
    : f- L" e3 x5 Y! H1 V            (soft): Softmax(dim=-2)
    5 f  c9 i& r) H! x            (relu): CELU(alpha=0.01)( O5 j8 a7 F7 r% l' u# g
                (expanding_conv): Conv2d(64, 576, kernel_size=(1, 1), stride=(1, 1), bias=False)# I% {! W9 T5 j4 p% `
                (reduction_conv): Conv2d(192, 64, kernel_size=(1, 1), stride=(1, 1), bias=False)2 r! L9 a" B4 ^, s
              )+ A$ }" W  v$ l
            )
    ( ?; a6 T. T4 A+ R4 Q' v        (tcn): Sequential(
      I5 M; d. x+ f5 p$ n2 g          (0): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
    ! x/ ^$ h' V' t% Z: b% V          (1): ReLU(inplace=True)
    ( u8 C& J( v' W# u          (2): Conv2d(64, 64, kernel_size=(9, 1), stride=(1, 1), padding=(4, 0))
    - @8 ]( }0 l1 F# M: B8 y6 K          (3): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)% r2 s  Y( ?. ^. }
              (4): Dropout(p=0, inplace=True)
    - K& t" x4 `+ R  z* R4 h        )3 C* m0 A+ M! j" Y
          )
    * d' d, z/ d/ [( ^      (3): ConvBlock(
    , I$ E2 E' d( h$ C2 M/ X) [5 A        (act): ReLU(inplace=True)" t8 ^9 f$ d% G5 f  K3 }
            (gcn): PyGeoConv(
    & v: Z9 O8 f0 Z& m9 J          (g_conv): SAGC($ d' o$ n( p3 V" B
                (conv_a): ModuleList(, m9 D9 C& g0 j8 F, {
                  (0): Conv2d(64, 12, kernel_size=(1, 1), stride=(1, 1))' @1 t( p) E  b8 S5 {; H7 L9 f+ U
                  (1): Conv2d(64, 12, kernel_size=(1, 1), stride=(1, 1))6 l; ~% u$ Y2 u, a  k- l) o% {
                  (2): Conv2d(64, 12, kernel_size=(1, 1), stride=(1, 1))7 N! |; o& Z# u" Z& l% Y& d
                )/ x$ l1 o, g5 G. @! u: u2 n3 w2 E
                (conv_b): ModuleList(5 z: g- {% |' v) {4 I
                  (0): Conv2d(64, 12, kernel_size=(1, 1), stride=(1, 1))
    ( K2 e& Q1 x* @' l              (1): Conv2d(64, 12, kernel_size=(1, 1), stride=(1, 1))
    , I/ s% `4 S$ O              (2): Conv2d(64, 12, kernel_size=(1, 1), stride=(1, 1))
    ) g. j- V/ h3 m, c* t' f            ); {5 X$ ~7 a3 P4 H
                (gconv): ModuleList(- d3 ]9 U$ s- A/ F: `
                  (0): GraphConvBR(
    # \% j9 L8 l1 q                (bn): BatchNorm2d(48, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)/ i, F$ r# v4 J0 X# s
                    (act): ReLU(inplace=True)+ F7 C; z1 N2 f$ B: p# W, b9 k5 W' C
                  )
    7 B/ B8 _2 f) v( Y+ p              (1): GraphConvBR(1 [0 Y' u% C; l) R% H& h# z5 s$ M
                    (bn): BatchNorm2d(48, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
    " M: m" z6 T* ^, X$ I: ^                (act): ReLU(inplace=True)! z# {2 \5 ?3 l" r9 z) m" }
                  )
    & B" C: l+ O" S( ]              (2): GraphConvBR(
    + P' p; D! i8 ?' n                (bn): BatchNorm2d(48, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)" R0 ?3 k9 U1 a, q& i  k
                    (act): ReLU(inplace=True)2 G. |5 E0 n2 e  g2 z- r) x
                  )* a9 s- ]/ M4 s
                )
    / S" h: A0 O' A' M- H$ @            (down): Sequential(
    5 n8 N6 o/ m$ n& g5 P              (0): Conv2d(64, 48, kernel_size=(1, 1), stride=(1, 1))( ^0 A+ _7 }2 m8 {
                  (1): BatchNorm2d(48, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)# T: p% l: u0 Z- k5 Z" k
                )
    . `7 E: h* c6 [5 X% A8 O( j4 W+ x' W            (bn): BatchNorm2d(48, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)- o0 W& L& l9 [, Z0 v1 ^$ }
                (soft): Softmax(dim=-2)
    % f8 H* z5 A% y0 a$ f            (relu): CELU(alpha=0.01)
    9 v8 _' l* L. D0 K( n            (expanding_conv): Conv2d(64, 432, kernel_size=(1, 1), stride=(1, 1), bias=False)
      Q' x* X+ @$ t            (reduction_conv): Conv2d(144, 48, kernel_size=(1, 1), stride=(1, 1), bias=False)
    / t. }) S- Q: _% z% U          )
    * x4 Z" A! |# h" _+ y. A- E& g+ v% Y) b        )
    6 |. M0 @; O6 e$ N        (tcn): Sequential(/ `% [" N. k# m1 M' l
              (0): BatchNorm2d(48, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
    2 x) O( s! B& G          (1): ReLU(inplace=True)  Y, G2 ^3 M. L7 X2 P* h/ h
              (2): Conv2d(48, 48, kernel_size=(9, 1), stride=(1, 1), padding=(4, 0)): V6 b# C2 i: `- N& }/ h' V
              (3): BatchNorm2d(48, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
    8 D/ P/ a3 V- F  H3 [9 b! m          (4): Dropout(p=0, inplace=True)4 q8 m- d5 |3 f  T/ [8 g
            )( x0 T6 ~% h, s
            (residual): Sequential(
    4 o0 y, h' y( H. U+ j6 J: f          (0): Conv2d(64, 48, kernel_size=(1, 1), stride=(1, 1))4 I! C9 l/ z* a
              (1): BatchNorm2d(48, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
    - b6 I# t& {2 L+ X/ {        )* B' B$ u2 k/ a% f
          )& E1 `9 A- N  ~* Q
          (4): Upsample(scale_factor=(2.0, 1.0), mode=bilinear)" l: A0 m. ?% }- P/ f( b
          (5): ConvBlock(, @; C. ~& |4 v; n
            (act): ReLU(inplace=True)% k% E" P. m- H7 C. G
            (gcn): PyGeoConv(
    $ Q0 s2 V) D, u: ?          (g_conv): SAGC(
    0 }& ]6 A& f6 s& k/ @6 [            (conv_a): ModuleList($ J7 E2 e( ?# X% b9 b9 K
                  (0): Conv2d(48, 12, kernel_size=(1, 1), stride=(1, 1))9 z& P. U2 A6 V8 h0 D
                  (1): Conv2d(48, 12, kernel_size=(1, 1), stride=(1, 1))
    * K/ I+ ?: i2 ~9 t8 G              (2): Conv2d(48, 12, kernel_size=(1, 1), stride=(1, 1))7 J: o8 x& v* U) H5 @6 E( U% {
                )
    3 G3 h6 r$ F1 i            (conv_b): ModuleList(
    7 H: F2 g+ [' Q- K) I0 |& f              (0): Conv2d(48, 12, kernel_size=(1, 1), stride=(1, 1))- F# X) _5 M7 G/ e0 |; j+ i
                  (1): Conv2d(48, 12, kernel_size=(1, 1), stride=(1, 1))
    1 Q1 G9 D2 c3 e, O! i              (2): Conv2d(48, 12, kernel_size=(1, 1), stride=(1, 1))+ l+ b1 X0 h, |/ G5 s) P6 }/ Y
                )' f0 i$ G+ X( E- D+ |: k& @7 @5 m
                (gconv): ModuleList(
    ! `+ J! p4 \! M5 v) E              (0): GraphConvBR(
    ( z# V* E0 |/ z( Z3 q; T# m& \                (bn): BatchNorm2d(48, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
    6 a/ U+ y. Z0 A- i' g                (act): ReLU(inplace=True)
    - q% [& t8 {; ^! I% `. F5 }              )
    2 E- O1 I" Y% `7 o$ [( C              (1): GraphConvBR(
    * g, y* ^2 o$ j* S( c" N                (bn): BatchNorm2d(48, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
    2 |! N- M0 V: A! L! j: [5 k                (act): ReLU(inplace=True)5 A6 C& S# x# Y0 {! [% F
                  )# a: K3 y4 R1 K( K8 z
                  (2): GraphConvBR(. |; J! }/ Q* R( ?$ D
                    (bn): BatchNorm2d(48, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
    2 w9 [3 b. H" l2 v- V                (act): ReLU(inplace=True)& K8 F  T3 a0 F( |' M! J* M- K
                  )- y5 b' u7 ^! E4 S4 i8 Y
                )
    5 i4 _8 s/ |2 y. _' p5 O% D4 T8 h. W            (bn): BatchNorm2d(48, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)" D4 F- E' M/ X3 \
                (soft): Softmax(dim=-2)) v( S2 I/ |8 Q' _! `3 I" Y& H9 _
                (relu): CELU(alpha=0.01)
    ; ^( `6 y: N7 _- f            (expanding_conv): Conv2d(48, 432, kernel_size=(1, 1), stride=(1, 1), bias=False)
    3 w9 d) O" a/ L, U4 e6 z! a& a            (reduction_conv): Conv2d(144, 48, kernel_size=(1, 1), stride=(1, 1), bias=False)* f  e& R4 `% ?0 k) w/ q" V
              )
    ' W6 X  F4 l& x- ]        )( u& G) ~/ R9 B1 d( t( ?" `% u
            (tcn): Sequential(5 q, m6 c1 e4 Y. A/ v8 S7 H
              (0): BatchNorm2d(48, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)3 H4 ~7 X, g  p% v
              (1): ReLU(inplace=True)
    ; A; P9 J; ~' O& ~' }          (2): Conv2d(48, 48, kernel_size=(9, 1), stride=(1, 1), padding=(4, 0))# Y& ^) c- u$ h
              (3): BatchNorm2d(48, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
    / T9 \6 `# F$ M( X# G4 G          (4): Dropout(p=0, inplace=True)- D/ P+ B5 e) a3 ^
            )& j9 Q; k! P" X, e9 r3 M0 c4 H
          )& [% [9 c) H! x2 H
          (6): ConvBlock(; C+ |' l$ ~; T4 r# }6 ]
            (act): ReLU(inplace=True)
    - N% a/ I/ l9 Y' V: z        (gcn): PyGeoConv($ r# _# B& Q: d/ S
              (g_conv): SAGC(
    ) ~% h5 X: H2 F' [            (conv_a): ModuleList(
    + x  ^9 v7 q- \4 L( c# }5 B# l              (0): Conv2d(48, 12, kernel_size=(1, 1), stride=(1, 1))0 T5 D' W  y; z5 L1 p- f
                  (1): Conv2d(48, 12, kernel_size=(1, 1), stride=(1, 1))
    + ^' w7 g) M% s- `% }& Y9 {              (2): Conv2d(48, 12, kernel_size=(1, 1), stride=(1, 1)), A' M$ }! p! f5 ]. c- I  C
                )
    2 w1 y( o- m+ Z( |% d8 n8 E% K            (conv_b): ModuleList(5 c8 v$ C) C7 `1 C2 O: {
                  (0): Conv2d(48, 12, kernel_size=(1, 1), stride=(1, 1))
    % {; M. A- }( M$ s5 _  J              (1): Conv2d(48, 12, kernel_size=(1, 1), stride=(1, 1))
    4 K9 A: p5 E9 P- N# S! P; B              (2): Conv2d(48, 12, kernel_size=(1, 1), stride=(1, 1))( f, m3 Y3 O" J: ^
                )( V; e- }% t' o" d, t( k3 d
                (gconv): ModuleList(% ^+ n8 Y; u7 Z, n7 r/ _) J# p$ x
                  (0): GraphConvBR(0 S* J* Q" i# D) I; u2 ?- F9 _3 S
                    (bn): BatchNorm2d(48, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
    % X; p5 d' D( Y6 {                (act): ReLU(inplace=True)
    % m, d. {. a* V' l& K0 X1 v              )
    ) t0 t3 }& [' a- O( q5 N              (1): GraphConvBR(: ~8 ?* p% i6 g2 W* O
                    (bn): BatchNorm2d(48, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
    , z' `7 h: r+ J$ Y% |9 a                (act): ReLU(inplace=True)
    3 N+ z, k9 ]9 P9 O  f3 S2 }              )0 F% q+ W/ K8 @3 i
                  (2): GraphConvBR(. I; L* V9 `4 i+ D0 W
                    (bn): BatchNorm2d(48, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
    * U5 L5 q8 u  [; ~                (act): ReLU(inplace=True)
    ' L* Z& E6 g  A& X% ^$ _              )' k4 P6 Y' J3 o/ ?6 v% W7 b
                )
    * `2 I- w+ M3 F5 |            (bn): BatchNorm2d(48, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True): V3 O+ v7 L& a, K2 `
                (soft): Softmax(dim=-2)
    5 M. Z6 [; P/ {- O            (relu): CELU(alpha=0.01)
    4 q# V; V7 O8 w            (expanding_conv): Conv2d(48, 432, kernel_size=(1, 1), stride=(1, 1), bias=False)
    2 ?# g' }$ }& w, W            (reduction_conv): Conv2d(144, 48, kernel_size=(1, 1), stride=(1, 1), bias=False)
    * A& H2 u" W# r% I' h8 e          )
    - {, ^% N' E5 G3 z# E6 v# q        )
    ( d3 o: w! o$ |% [        (tcn): Sequential(9 N' D* V7 U/ U5 L
              (0): BatchNorm2d(48, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True), \$ D$ k+ }& j" Q4 B) A
              (1): ReLU(inplace=True)) i& \1 {& @, I  P% B8 r( d
              (2): Conv2d(48, 48, kernel_size=(9, 1), stride=(1, 1), padding=(4, 0))  b9 ]7 m& b3 k. j9 E  W
              (3): BatchNorm2d(48, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)8 p/ F9 M: C9 h" m
              (4): Dropout(p=0, inplace=True)
    0 y( b5 }. W0 c        )
    : }. V* ~- A& F      )& i) o, D$ {$ p
        )3 a5 `$ {" h! ^9 }) `8 I
      )7 q+ t0 A$ q% }4 o; a  T" h. C
    )
    , y4 _! T, T; F0 n————————————————. j" i6 ?9 b7 G6 B; J! m
    版权声明:本文为CSDN博主「FakeOccupational」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
    : r: i% J! G! G& `; J9 Q原文链接:https://blog.csdn.net/ResumeProject/article/details/126678496
    0 ]! k0 G/ V9 k
    ' J5 @4 H; |' |( `" X: N4 @
    - g- b' P9 r6 j$ k6 o
    zan
    转播转播0 分享淘帖0 分享分享0 收藏收藏0 支持支持0 反对反对0 微信微信
    您需要登录后才可以回帖 登录 | 注册地址

    qq
    收缩
    • 电话咨询

    • 04714969085
    fastpost

    关于我们| 联系我们| 诚征英才| 对外合作| 产品服务| QQ

    手机版|Archiver| |繁體中文 手机客户端  

    蒙公网安备 15010502000194号

    Powered by Discuz! X2.5   © 2001-2013 数学建模网-数学中国 ( 蒙ICP备14002410号-3 蒙BBS备-0002号 )     论坛法律顾问:王兆丰

    GMT+8, 2025-8-18 17:50 , Processed in 0.455893 second(s), 51 queries .

    回顶部