QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 3046|回复: 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 Clustering2 b  H, o: Q9 Z! t) _
    & z; s: j" Y4 r/ c/ t' i5 @6 W
    骨架图算法
    5 K$ N4 F( f5 v( J9 f2 U+ y
    : `8 l) W! T8 J  V
    . b, y! C* f/ h/ y( b: S4 oGraph Embedded Pose Clustering for Anomaly Detection
    + G& W+ t/ `+ H1 X/ Y% Epaper        code4 A7 T3 g- i- L$ c
    https://arxiv.org/abs/1912.11850        https://github.com/amirmk89/gepc/ w3 e9 {; O! c
    我们提出了一种用于人类行为异常检测的新方法。我们的方法直接适用于可以从输入视频序列计算的人体姿势图。这使得分析独立于扰动参数,如视点或照明。我们将这些图映射到一个潜在空间并将它们聚类。然后,每个操作都由其对每个聚类的软赋值来表示。这为数据提供了一种“词袋”表示,其中每个动作都由其与一组基本动作词的相似性来表示。然后,我们使用基于狄利克雷过程的混合物,这对于处理比例数据(例如我们的软赋值向量)很有用,以确定一个动作是否正常。! A4 u# C: Z0 B, G1 [: `+ G

    3 T: H) Y. z7 b6 Y+ j! A% _首先,我们对输入数据使用人体姿态检测器。这抽象了问题,并防止下一步处理诸如视点或照明变化等有害参数。人的行为被表示为时空图,我们将其嵌入(第3.1、3.2小节)并聚类(第3.3小节)到一些潜在空间中。现在,每个动作都表示为一组基本动作的软分配向量。这抽象了动作的基本类型(即细粒度或粗粒度),从而进入学习其分布的最后阶段。我们用于学习软分配向量分布的工具是Dirichlet过程混合(第3.4小节),我们将模型拟合到数据中。然后使用该模型确定动作是否正常。
    " Z- y- ]% b9 C, y* l) E2 P: J. V: P0 d- X; L, p' p& o  \
    图的每个节点对应于一个关键点、一个身体关节,每个边表示两个节点之间的某种关系。 存在许多"关键点关系",如解剖学上定义的物理关系(例如,左手腕和肘部连接)和由运动定义的动作关系,这些运动往往在特定动作的上下文中高度相关(例如,跑步时左右膝盖倾向于朝相反方向移动)。图的方向来自于这样一个事实,即一些关系是在优化过程中学习的,并且不是对称的。这种表示的一个好处是紧凑,这对于高效的视频分析非常重要。
    " \; W2 I; I9 w1 A% w6 c( ?为了在时间上扩展,将从视频序列中提取的姿势关键点表示为姿势图的时间序列。 时间姿势图是人体关节位置的时间序列。时域邻接可以类似地通过连接连续帧中的关节来定义,允许我们利用姿势图序列的空间和时间维度执行图卷积运算
    7 S4 e6 R# X5 |* a( C3 G, V
    . @8 R# V0 A( P# B# ]+ w我们提出了一种基于深度时态图自动编码器的结构,用于嵌入时态姿态图。 基于图2所示ST-GCN的基本块设计,我们将基本GCN算子替换为新的空间注意力图卷积,如下所示。; c# _& m4 Q- a" m7 u5 |4 H" `( s
    1 p" a, u6 T; ]$ ^
    3.2. Spatial Attention Graph Convolution
      X  {6 y' j5 ~$ B6 i0 G- D我们提出了一个新的图算子,如图3所示,它使用三种类型的邻接矩阵:静态、全局学习和推断(基于注意力)。每个邻接类型使用单独的权重应用其自己的GCN。
    : c" u2 m6 |% C5 n  O8 R3 I% C4 u" h6 i4 F
    GCN的输出按通道维度堆叠。采用1×1卷积作为加权叠加输出的可学习缩减度量,并提供所需的输出信道数。
    8 o% `0 d% f8 ^+ C; T
    1 g/ r; R* E9 W; h三个邻接矩阵捕捉了模型的不同方面:
    # N+ i  U/ o0 N' T3 b; z(i)使用身体部位连通性作为优先于节点关系,使用静态邻接矩阵表示。
    " ^* [( h- E8 R(ii)由全局邻接矩阵捕获的数据集级关键点关系,以及/ l. Q/ M4 J3 B1 t7 O9 ]- `9 \
    (iii)由推断邻接矩阵获取的样本特定关系。最后,可学习约简度量对不同的输出进行加权
    # Z9 x) ^1 K8 _( K6 [" u5 o6 s) e) ?% m+ i1 W& g! S5 ~9 c1 h

    7 W8 E2 K+ @6 x- P8 o) i后续段落介绍了静态、全局学习和推断的邻接矩阵的设置方法,即图3中的A,B和C,在此略过。1 j' _" S7 W8 c
    3.3. Deep Embedded Clustering4 y: ]- `3 H/ m$ S
    为了构建我们的底层动作词典,我们采用训练集样本,并将它们联合嵌入和聚类到一些潜在空间中。然后,每个样本由其分配给每个底层聚类的概率表示。选择目标是为了提供不同的潜在集群,这些集群上存在动作。
    $ c& \1 p: t2 s& y- U$ t6 R) d9 t& Y, N; n
    我们采用了深嵌入聚类的概念[32],用我们的ST-GCAE架构对时间图进行聚类。所提出的聚类模型由编码器、解码器和软聚类层三部分组成。  a$ A8 N$ _" u, w
    5 E, G  c6 [% \- \/ b
    具体地说,我们的ST-GCAE模型保持了图的结构,但使用了较大的时间步长和不断增加的通道数来将输入序列压缩为潜在向量。解码器使用时间上采样层和额外的图卷积块,用于逐渐恢复原始信道计数和时间维度。# G, B! i! ~% F, s
    6 I9 [4 _1 ~& f' i' }. C$ ^
    ST-GCAE的嵌入是数据聚类的起点。在我们的聚类优化阶段,对基于重构的初始嵌入进行微调,以达到最终的聚类优化嵌入。
    ! E( u) }. A* D
    4 i8 n7 O" H7 ~: Q5 K  P符号        表示$ J! y4 H( P. Y* k- G0 H
    x i x_ix
    3 u! S0 Z/ @9 W/ v- \7 @. ?i0 O$ z$ `% A  }! f. O
      f, N& p, ^& v9 ]
            输入示例
    6 Z% z" [9 i6 |8 qz i z_iz
    $ g& {( i6 f, u1 w) R! g$ R9 Si
    1 n% r% f1 W/ y& W) p9 ]. }
    1 n: r& K1 z  ^. k         编码器的潜在嵌入) Y5 i! b" ?, Z* Y' a) W" Z
    y i y_iy   T8 R4 v8 [9 e1 b, Y8 J& m
    i
    $ ?: C, q/ ~- G/ f8 a1 ]
    . {/ H$ i" }: T- j, [) t& E7 ?         使用聚类层计算的软聚类分配
    * F2 x& ~  A' A. z' {Θ ΘΘ        聚类层的参数5 }! Q4 e9 ^8 w9 O9 Q
    p i k p_{ik}p
    3 J! v4 `6 w. v; Pik
    & i* b, Q: c3 x  S) m" O* T  _; J0 @0 g  R
            probability for the i-th sample to be assigned to the k-th cluster) X% }9 X, i; v
    ) i& ]7 O" l3 D1 x4 f, M
    $ Y0 c2 H- Z1 k- _2 e2 f
    我们采用[32]提出的聚类目标和优化算法。聚类目标是最小化当前模型概率聚类预测P和目标分布Q之间的KL散度:  I, z9 ^  x, Z5 w) ~/ @

    0 i5 b1 m2 ?6 o% t& M; f+ T: t- H" Q1 b# b6 c
    目标分布旨在通过标准化和将每个值推到更接近0或1的值来加强当前的群集分配。反复应用将P转换为Q的函数将最终导致硬分配向量。使用以下等式计算目标分布的每个成员:
    9 k& Q# Q" x+ N5 n/ l6 _3 |) q
    + d5 y2 k; r6 _3 }0 p& q, G
    9 ?1 d# t( K. b$ ^+ o2 B- A聚类层由为编码训练集计算的K均值质心初始化。优化以期望最大化(EM)的方式进行。
    5 v8 _" \8 |( G, x+ P9 Z) r, M在期望步骤期间,整个模型是固定的,并且目标分布Q被更新。在最大化阶段,优化模型以最小化聚类损失Lcluster。+ n- ~7 i( T' q6 I
    ; \5 T' w0 m# e3 M
    3.4. Normality Scoring
    + B$ G7 h/ m! N该模型支持两种类型的多模分布。一个是集群分配级别;另一个是在软分配向量级别。例如,一个动作可能被分配给多个集群(集群级分配),导致多模式软分配向量。
    2 K7 h& N4 ^: N. |6 `7 L6 F软分配向量本身(捕获动作)也可以通过多模态分布建模。
    + ~7 {! u+ ?" x  W
    8 p" R2 W2 I' M. K  k! d7 H$ SDirichlet过程混合模型(DPMM)是评估比例数据分布的一种有效方法。它满足我们所需的设置:(i)估计(拟合)阶段,在此阶段,一组分布参数为评估,和(ii)推理阶段,为每个嵌入样本使用拟合模型。彻底的Blei和Jordan[4]给出了该模型的概述。
    + @8 n  {2 H8 Z. x$ c# j3 e& Z3 Q4 t' ~( G: A1 e+ c9 [, Z3 `8 ^
    Dirichlet过程混合模型(DPMM)是评估比例数据分布的有效方法。它符合我们要求的设置:
    4 ?: v  P$ t0 Y. ~& m0 s# E(i) 估计(拟合)阶段,在此期间评估一组分布参数,以及) Z0 s6 w6 |* R7 k/ L9 u5 u4 k
    (ii)推理阶段,使用拟合模型为每个嵌入样本提供分数。Blei和Jordan[4]对模型进行了全面概述。: f( U) e6 q$ U- W
    - t& A$ E* H1 \! a* K
    DPMM是单峰Dirichlet分布的常见混合扩展,并使用Dirichllet过程,这DirichletDistribution的无限维扩展。该模型是多模态的,能够将每个模式捕获为混合成分。拟合模型具有多个模式,每个模式表示对应于一个正常行为的一组比例。在测试时,使用拟合模型通过其对数概率对每个样本进行评分。[4,8]中提供了关于DPMM使用的进一步解释和讨论。
    5 Y8 O9 R' R/ G5 w. Y* D0 T# |7 L5 j0 A' S7 k" b+ m# X  p* i
    3.5. Training1 e6 ~; }7 r( e, q8 @' C1 M
    该模型的训练阶段包括两个阶段,一个是自动编码器的预训练阶段,其中网络的聚类分支保持不变,另一个是微调阶段,其中嵌入和聚类都得到优化。具体而言:, P  w& ~6 n' G7 e1 f

      w0 Z) Q' M# S# z- }9 r- O$ ~Pre-Training: 该模型通过最小化重建损失(表示为Lrec)来学习编码和重建序列,Lrec是原始瞬时位姿图和ST-GCAE重建的位姿图之间的L2损失
    ; Q6 w" b1 _* k: i! t
    ; }, J6 ~/ @/ R- H3 {! x: _Fine-Tuning:& U8 m2 C: R% l) J3 z1 d9 i. h0 s
    该模型优化了由重建损失和聚类损失组成的组合损失函数。) r1 H# X# _2 f
    进行优化,使得聚类层优化为w.r.t.Lcluster,解码器优化为w.r.t.Lrec,编码器优化为w.r.t.两者。
    ) `; U4 }1 {% i集群层的初始化是通过Kmeans完成的。如[9]所示,当编码器针对这两种损失进行优化时,解码器保持不变,并充当正则化器,以保持编码器的嵌入质量。# U7 I1 \0 V9 y) a( d
    本阶段的综合损失为:: x4 t1 O$ E% x, N$ w' c) p
    ' Z8 E/ i$ H* O1 T3 j( l4 R, n
    7 u! j5 N- [# ^8 \$ y4 A- o4 c
    % L( x/ r* s# i$ p
    实现细节+ j7 s0 B& S5 G4 U% e3 y
    0 R) v; M* ?/ J# q8 ~
    : J: s  }' X! |; U/ H$ r

    & m# p& n% d/ I& Z6 {2 U8 K$ |2 F4 Idef calc_reg_loss(model, reg_type='l2', avg=True):
    , {2 y4 m6 ], y0 F. A% a    reg_loss = None
    ) ^& Z6 V1 Y: x" Q6 g3 d1 n; r" H- z    parameters = list(param for name, param in model.named_parameters() if 'bias' not in name)
    " i- D3 J; a0 s6 h! I, S% c    num_params = len(parameters)
    # d, d7 {. B, K$ L& P, S    if reg_type.lower() == 'l2':# p$ E/ H' c, g
            for param in parameters:
      D$ R8 m% Y7 t            if reg_loss is None:
    ; x) \2 g4 r2 y# ^$ j( d# I                reg_loss = 0.5 * torch.sum(param ** 2)
    + ^) }0 i  A% h/ m" b  D) b2 h            else:
    5 s# u3 f0 E; p, M& G% S* P                reg_loss = reg_loss + 0.5 * param.norm(2) ** 2
    * P* k  o+ y. ]; `; u
    " C" \* i. Q  [# c3 A/ w, b        if avg:
    5 x, Y* F( i% g6 a) K- t            reg_loss /= num_params; `5 t! S: g0 V) W, g
            return reg_loss
    ! y* M4 n4 r4 h# a    else:, i% w5 V+ F1 ~  t9 D: m" Z* v
            return torch.tensor(0.0, device=model.device)- Q3 u" v5 m6 k
    1, U0 K) ]2 C6 `- z# _+ d( E
    2
    6 B2 _9 {  F$ _; Y/ ^5 b' `3
    ! P9 e6 j7 o' i0 j# l, {4
    $ s- Z( t- G  q. G0 m7 D$ g! X+ q5& I6 p& T0 u4 V: e+ d
    6, e: A$ C5 ?0 g: E$ W) i
    7) b- |/ O# \2 q+ q5 u
    8
    3 `8 ^( p7 o# x( t: Z( ]+ t9: m( l3 k% p9 ]  \
    10
    9 z; d, B8 g" P" {+ e11
    9 k- K8 l) S7 m0 v0 Q* |% h9 T12
    0 D) G8 H  e3 J6 f13* ~- A5 ?% U2 s
    14
    & d+ P3 U$ a# p15
    - G; |4 \! F. d9 h160 J) I* C# ~" C& s6 m! Q) H$ k
    , D8 i/ _+ S' a9 X7 P- W) Z' _! k+ k  X

    2 z1 f1 ?2 ~, O+ D8 o* X, h% i* ~# M/ Y9 U( f7 A2 n- o7 |  X

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

    回顶部