QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 3077|回复: 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
    * F* Y9 E5 s6 h$ C# Y/ W( \: a0 U6 t* |* ?; M
    骨架图算法" s7 L' f7 s& C7 P2 n
    ) e, u: ?* X. h, x/ p6 L

    2 ]. r2 l+ j: S- `  FGraph Embedded Pose Clustering for Anomaly Detection" \: Y: ~. c9 ^* t7 P; [- T7 x' f
    paper        code4 _+ ~* B0 ?9 C( e" t( U1 i* T7 Z
    https://arxiv.org/abs/1912.11850        https://github.com/amirmk89/gepc
    ' I/ P7 C1 l# L" h% P9 D我们提出了一种用于人类行为异常检测的新方法。我们的方法直接适用于可以从输入视频序列计算的人体姿势图。这使得分析独立于扰动参数,如视点或照明。我们将这些图映射到一个潜在空间并将它们聚类。然后,每个操作都由其对每个聚类的软赋值来表示。这为数据提供了一种“词袋”表示,其中每个动作都由其与一组基本动作词的相似性来表示。然后,我们使用基于狄利克雷过程的混合物,这对于处理比例数据(例如我们的软赋值向量)很有用,以确定一个动作是否正常。8 A# j) w* A  d0 {0 C

    ; o$ u* K1 J- }4 i1 Z1 k, o首先,我们对输入数据使用人体姿态检测器。这抽象了问题,并防止下一步处理诸如视点或照明变化等有害参数。人的行为被表示为时空图,我们将其嵌入(第3.1、3.2小节)并聚类(第3.3小节)到一些潜在空间中。现在,每个动作都表示为一组基本动作的软分配向量。这抽象了动作的基本类型(即细粒度或粗粒度),从而进入学习其分布的最后阶段。我们用于学习软分配向量分布的工具是Dirichlet过程混合(第3.4小节),我们将模型拟合到数据中。然后使用该模型确定动作是否正常。7 G; k5 w' Z$ C5 M! Z& k

    ; E# O+ @& q0 i图的每个节点对应于一个关键点、一个身体关节,每个边表示两个节点之间的某种关系。 存在许多"关键点关系",如解剖学上定义的物理关系(例如,左手腕和肘部连接)和由运动定义的动作关系,这些运动往往在特定动作的上下文中高度相关(例如,跑步时左右膝盖倾向于朝相反方向移动)。图的方向来自于这样一个事实,即一些关系是在优化过程中学习的,并且不是对称的。这种表示的一个好处是紧凑,这对于高效的视频分析非常重要。
    8 {0 @& J. C  [! b+ y为了在时间上扩展,将从视频序列中提取的姿势关键点表示为姿势图的时间序列。 时间姿势图是人体关节位置的时间序列。时域邻接可以类似地通过连接连续帧中的关节来定义,允许我们利用姿势图序列的空间和时间维度执行图卷积运算2 U9 p5 ^% J% M1 u  t% D7 D$ R2 E

    & W+ A' F+ |) S/ N( j我们提出了一种基于深度时态图自动编码器的结构,用于嵌入时态姿态图。 基于图2所示ST-GCN的基本块设计,我们将基本GCN算子替换为新的空间注意力图卷积,如下所示。
    3 z- V; Z2 P' e/ b: l) H+ [4 A' n, |) R* b" `8 Q! O' b& H* }3 A
    3.2. Spatial Attention Graph Convolution% f; E: T. W/ C9 N0 e* ^( L4 j
    我们提出了一个新的图算子,如图3所示,它使用三种类型的邻接矩阵:静态、全局学习和推断(基于注意力)。每个邻接类型使用单独的权重应用其自己的GCN。3 i0 F7 }0 T" y1 T# q' |3 j

    $ a  A: O# b5 p1 x5 e/ ]5 U; _( U$ v& \( bGCN的输出按通道维度堆叠。采用1×1卷积作为加权叠加输出的可学习缩减度量,并提供所需的输出信道数。, ?9 J' s9 P! O. x! D# z: K( H1 _+ {: q  g( O
    : ?' ]$ C2 N* ^' j$ Y. _
    三个邻接矩阵捕捉了模型的不同方面:& \3 F; r1 N8 N4 x# K( ~" W. r
    (i)使用身体部位连通性作为优先于节点关系,使用静态邻接矩阵表示。
    . J! h9 ]3 K$ X7 m6 s) R+ Q(ii)由全局邻接矩阵捕获的数据集级关键点关系,以及; r3 l- S' t3 x% n4 |  |
    (iii)由推断邻接矩阵获取的样本特定关系。最后,可学习约简度量对不同的输出进行加权$ `0 J, v0 {8 e# d5 Y
    ( t  x1 a% _- b

    5 i2 T& J8 x1 o2 H( Z% d) ]后续段落介绍了静态、全局学习和推断的邻接矩阵的设置方法,即图3中的A,B和C,在此略过。
    2 ?' {5 ]2 B! l3.3. Deep Embedded Clustering* t+ k" h3 F9 E8 o6 K
    为了构建我们的底层动作词典,我们采用训练集样本,并将它们联合嵌入和聚类到一些潜在空间中。然后,每个样本由其分配给每个底层聚类的概率表示。选择目标是为了提供不同的潜在集群,这些集群上存在动作。
    : H$ U& Q/ A* V3 T# }7 W. D4 }8 e: |$ a
    我们采用了深嵌入聚类的概念[32],用我们的ST-GCAE架构对时间图进行聚类。所提出的聚类模型由编码器、解码器和软聚类层三部分组成。2 e8 ~5 r! M/ k/ x
    7 C# v* T1 r( q1 ~/ S! z
    具体地说,我们的ST-GCAE模型保持了图的结构,但使用了较大的时间步长和不断增加的通道数来将输入序列压缩为潜在向量。解码器使用时间上采样层和额外的图卷积块,用于逐渐恢复原始信道计数和时间维度。
    # H; S/ @1 m5 z* p6 U
    & s  c0 X7 g2 A+ zST-GCAE的嵌入是数据聚类的起点。在我们的聚类优化阶段,对基于重构的初始嵌入进行微调,以达到最终的聚类优化嵌入。
    ) W  m1 U( E: g) B! @
    9 T: s, i) z- d* |3 P5 E: g符号        表示6 X5 Q/ [- ?) d! S+ K
    x i x_ix ( L# Z% E7 e! S0 e% N9 Y. L
    i4 h) w! w- [7 h' e# U

    / ~; w" x6 A) J, e  o1 K         输入示例, e! [% S( @) L0 @+ U
    z i z_iz $ H" e* @3 \# P7 z! |; F
    i7 l9 _7 z9 \5 }2 p7 j" B  Y
      [6 x9 g) t7 \5 A1 o
            编码器的潜在嵌入) H  M4 {; v6 S6 O. [1 G6 e
    y i y_iy
    ; }( _) Q5 y2 J$ X* Li
      L- F' _" E  u3 a6 ?! f  n% u" r) w
      G: d) u% g- t3 i. Y. \         使用聚类层计算的软聚类分配
    9 w4 p" q9 C1 W% e" b& QΘ ΘΘ        聚类层的参数
    " E2 e% I6 J5 z  q: A* O. ^$ fp i k p_{ik}p
    / r  O4 ?& l7 @ik
    % F+ N9 M% z* m8 t9 m, f
    3 U# V) `! y, U" F# k- ]( e         probability for the i-th sample to be assigned to the k-th cluster; @/ z4 P( [& |! d8 z. }
    9 ^: D! A& N: X/ F" ~0 ~* ^' W: f
    % x$ b$ i) p0 A9 N; ?- g
    我们采用[32]提出的聚类目标和优化算法。聚类目标是最小化当前模型概率聚类预测P和目标分布Q之间的KL散度:4 G8 H+ Y/ U$ ^1 T. d0 q

    3 ]( E+ W; k0 j3 ?3 g6 t9 {9 R. K  v5 @! L7 @
    目标分布旨在通过标准化和将每个值推到更接近0或1的值来加强当前的群集分配。反复应用将P转换为Q的函数将最终导致硬分配向量。使用以下等式计算目标分布的每个成员:
      \* z1 {2 c# d, k1 @
    ; ?$ N1 s$ i- X1 [9 i# g7 T+ y
    : x3 O. `' z! w聚类层由为编码训练集计算的K均值质心初始化。优化以期望最大化(EM)的方式进行。2 k6 E4 X& ?# M( y* A) c
    在期望步骤期间,整个模型是固定的,并且目标分布Q被更新。在最大化阶段,优化模型以最小化聚类损失Lcluster。3 U+ t9 f: w: r  d+ Q2 ^! k0 _

    ; ?3 L" Y: ]# `# ]/ W% @3.4. Normality Scoring5 A: v; R1 N1 j# F
    该模型支持两种类型的多模分布。一个是集群分配级别;另一个是在软分配向量级别。例如,一个动作可能被分配给多个集群(集群级分配),导致多模式软分配向量。/ w) ]' D' Z7 F, i
    软分配向量本身(捕获动作)也可以通过多模态分布建模。1 k8 M6 u4 ~9 ?9 T$ @$ g+ y
    ) j8 \( e0 A7 c* q6 y; v# w: {
    Dirichlet过程混合模型(DPMM)是评估比例数据分布的一种有效方法。它满足我们所需的设置:(i)估计(拟合)阶段,在此阶段,一组分布参数为评估,和(ii)推理阶段,为每个嵌入样本使用拟合模型。彻底的Blei和Jordan[4]给出了该模型的概述。8 b: f! m; y  U3 y0 e$ i
    + j. ]0 {! a2 Z% W) a# K& F
    Dirichlet过程混合模型(DPMM)是评估比例数据分布的有效方法。它符合我们要求的设置:
    ) @2 H% Q4 f& k( N3 r4 H(i) 估计(拟合)阶段,在此期间评估一组分布参数,以及6 Q3 C- F2 V+ u5 B4 {
    (ii)推理阶段,使用拟合模型为每个嵌入样本提供分数。Blei和Jordan[4]对模型进行了全面概述。8 G# n1 P' S6 [% S2 j. h
    ( V, @7 H; C7 z# |. @
    DPMM是单峰Dirichlet分布的常见混合扩展,并使用Dirichllet过程,这DirichletDistribution的无限维扩展。该模型是多模态的,能够将每个模式捕获为混合成分。拟合模型具有多个模式,每个模式表示对应于一个正常行为的一组比例。在测试时,使用拟合模型通过其对数概率对每个样本进行评分。[4,8]中提供了关于DPMM使用的进一步解释和讨论。0 v) d1 ]3 Y& `0 ?/ |2 p" w

    * W4 w! ^4 l$ m2 I6 M/ K$ a8 V3.5. Training
    " i3 s! Z' z. i. E" Q& Q3 M该模型的训练阶段包括两个阶段,一个是自动编码器的预训练阶段,其中网络的聚类分支保持不变,另一个是微调阶段,其中嵌入和聚类都得到优化。具体而言:
    / l' L% `6 p1 a1 c: X) i& `  ?
    # @9 L# x& s* e  M- E) bPre-Training: 该模型通过最小化重建损失(表示为Lrec)来学习编码和重建序列,Lrec是原始瞬时位姿图和ST-GCAE重建的位姿图之间的L2损失" `3 Z! W; X; n- Q5 S
    * J! D/ D) c2 c+ m, }+ _
    Fine-Tuning:$ V# i! [0 J& H* V
    该模型优化了由重建损失和聚类损失组成的组合损失函数。
    7 s7 K5 f9 y) _8 Y# K进行优化,使得聚类层优化为w.r.t.Lcluster,解码器优化为w.r.t.Lrec,编码器优化为w.r.t.两者。& L1 O. w! G6 I! |3 U
    集群层的初始化是通过Kmeans完成的。如[9]所示,当编码器针对这两种损失进行优化时,解码器保持不变,并充当正则化器,以保持编码器的嵌入质量。
    & `' J2 V% C, `# F- p0 L( |本阶段的综合损失为:7 ~% |# E  F+ r" F

    $ r7 d( I3 \9 J! T/ L& X( e- G
    * t' e" a2 R; ~: I! E7 f
    % v. C/ M: L- P+ U; U2 E实现细节
    7 H! y. F5 D/ r0 \8 p; z
    # C2 c: L( w+ I5 P' U% b
    : E$ J% K# j, w( [. e" d4 S* y( L7 k  ?9 Z
    def calc_reg_loss(model, reg_type='l2', avg=True):' A* g7 }: W6 C* ~7 c
        reg_loss = None& V  ?# |1 u/ ]/ {3 B% z+ f
        parameters = list(param for name, param in model.named_parameters() if 'bias' not in name)
    1 }' h* |5 Z5 V# F, @# H8 y. P    num_params = len(parameters)
    & U7 @$ `2 w( Y( @/ d# v, y    if reg_type.lower() == 'l2':
    3 l6 Q. f' Y5 F5 M5 h        for param in parameters:
    6 ~- c) l! @) T/ X            if reg_loss is None:  `6 |: t! e( |: \. y7 L; p
                    reg_loss = 0.5 * torch.sum(param ** 2)
      j6 U8 z" H0 m2 K            else:
    3 `6 u5 Z8 Q5 C: z) Q- m                reg_loss = reg_loss + 0.5 * param.norm(2) ** 2
    . `% v* D# o" x3 o3 T; j3 s" m
    ) _5 H# N6 [2 C; W        if avg:
    + b' m& H$ l- N/ I4 M1 C3 g            reg_loss /= num_params7 E! j4 K( ?3 g. ?* K6 I0 d0 U0 ?
            return reg_loss
    1 @% c* [: n8 o" X) Z5 h/ A. G    else:) W2 f7 b6 t' a2 ?9 W
            return torch.tensor(0.0, device=model.device)" }8 D7 M: ?8 \1 ?6 Y) T
    1  h- {& V- M/ h4 x; B
    2- Y& a$ D7 A& Z8 t( I; x9 q
    38 A; B$ Q7 B) i
    4, B; z9 O) l  G% \6 |3 ~
    5
    7 M& {8 E$ F; F2 a6
    3 P! Y6 o" n0 M7
    5 j- {0 e  w3 r- M9 @) p- i2 Q8
    $ Y9 s% b* H; j2 G+ p9
    " `+ Q& S* m2 h! M( ]4 R10! Y# D% |; f0 C. L/ w4 F- K8 v
    114 d$ H7 c9 S3 n0 z& n
    12' X  A; @4 K! T' d! b+ B2 }
    13
    & Y& q2 P8 H& S7 [6 z$ p) Z& F4 j+ ~14
    ' L% L: A' ]. e# Q1 G15- s, x2 O6 M* \* r7 L+ S  p
    16* \, t" f' [, ]4 }9 B
    ) G( O8 l0 {% r: w

    8 d" {1 S6 r% ?0 U, h9 z3 E) _: r" g  j

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

    / h. E* R# l9 e+ q
    : |2 J) z" }, X  i
    zan
    转播转播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-7-9 18:43 , Processed in 0.330511 second(s), 51 queries .

    回顶部