QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 2556|回复: 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/ w# c, U1 v- ^" J. D3 o( u
    " u: B& Y4 B2 F5 V* D
    骨架图算法
    3 H' z6 C* x( X$ Z# M& |7 q$ u0 R8 O

    ' {: ~+ i: a) a" r- |  QGraph Embedded Pose Clustering for Anomaly Detection
    4 Q, ~: m9 a& ]paper        code
    $ n' |" Z) V% Z# lhttps://arxiv.org/abs/1912.11850        https://github.com/amirmk89/gepc7 L) g' V0 S+ j& m
    我们提出了一种用于人类行为异常检测的新方法。我们的方法直接适用于可以从输入视频序列计算的人体姿势图。这使得分析独立于扰动参数,如视点或照明。我们将这些图映射到一个潜在空间并将它们聚类。然后,每个操作都由其对每个聚类的软赋值来表示。这为数据提供了一种“词袋”表示,其中每个动作都由其与一组基本动作词的相似性来表示。然后,我们使用基于狄利克雷过程的混合物,这对于处理比例数据(例如我们的软赋值向量)很有用,以确定一个动作是否正常。& g" h+ B/ h' {7 s+ g

    0 ?! s( L% O* ]" F" D首先,我们对输入数据使用人体姿态检测器。这抽象了问题,并防止下一步处理诸如视点或照明变化等有害参数。人的行为被表示为时空图,我们将其嵌入(第3.1、3.2小节)并聚类(第3.3小节)到一些潜在空间中。现在,每个动作都表示为一组基本动作的软分配向量。这抽象了动作的基本类型(即细粒度或粗粒度),从而进入学习其分布的最后阶段。我们用于学习软分配向量分布的工具是Dirichlet过程混合(第3.4小节),我们将模型拟合到数据中。然后使用该模型确定动作是否正常。
    6 U, I7 A# y8 p6 f9 [3 T0 I+ ?* w$ o: g
    图的每个节点对应于一个关键点、一个身体关节,每个边表示两个节点之间的某种关系。 存在许多"关键点关系",如解剖学上定义的物理关系(例如,左手腕和肘部连接)和由运动定义的动作关系,这些运动往往在特定动作的上下文中高度相关(例如,跑步时左右膝盖倾向于朝相反方向移动)。图的方向来自于这样一个事实,即一些关系是在优化过程中学习的,并且不是对称的。这种表示的一个好处是紧凑,这对于高效的视频分析非常重要。9 e7 d5 K" ~/ k8 b
    为了在时间上扩展,将从视频序列中提取的姿势关键点表示为姿势图的时间序列。 时间姿势图是人体关节位置的时间序列。时域邻接可以类似地通过连接连续帧中的关节来定义,允许我们利用姿势图序列的空间和时间维度执行图卷积运算
    7 B! A5 z: U7 K7 m1 X4 x, l
    ( Z( f% G$ H0 g& V0 d  Q# I我们提出了一种基于深度时态图自动编码器的结构,用于嵌入时态姿态图。 基于图2所示ST-GCN的基本块设计,我们将基本GCN算子替换为新的空间注意力图卷积,如下所示。% L2 Q) q0 F- W. c
    8 Q: G; T5 f, F& \1 [6 l
    3.2. Spatial Attention Graph Convolution# ^1 v) ?& L* t/ D$ A# d9 Y) ^
    我们提出了一个新的图算子,如图3所示,它使用三种类型的邻接矩阵:静态、全局学习和推断(基于注意力)。每个邻接类型使用单独的权重应用其自己的GCN。$ G1 O4 k5 M6 X5 z0 c
    ! B5 V4 o0 h  e6 Y" }0 j. d
    GCN的输出按通道维度堆叠。采用1×1卷积作为加权叠加输出的可学习缩减度量,并提供所需的输出信道数。
    . I4 e7 b) ]' H: T5 o
    ! t+ Y  _( V) z5 S三个邻接矩阵捕捉了模型的不同方面:* ?, O0 a9 W# [! w0 t
    (i)使用身体部位连通性作为优先于节点关系,使用静态邻接矩阵表示。
    , g( `# \* D5 Z! R& n# i5 F(ii)由全局邻接矩阵捕获的数据集级关键点关系,以及
    " f$ v6 U7 j: B! U3 I; b: ~(iii)由推断邻接矩阵获取的样本特定关系。最后,可学习约简度量对不同的输出进行加权
    1 G* `2 k( B& F4 b2 O' p- t4 m4 a! |8 k( s# Z" H: a
    ) O$ p% E1 g( o" O3 e: L' Y
    后续段落介绍了静态、全局学习和推断的邻接矩阵的设置方法,即图3中的A,B和C,在此略过。' b. C" A2 P& F+ H$ r
    3.3. Deep Embedded Clustering
    7 E- r0 p8 u. f7 t+ z2 u为了构建我们的底层动作词典,我们采用训练集样本,并将它们联合嵌入和聚类到一些潜在空间中。然后,每个样本由其分配给每个底层聚类的概率表示。选择目标是为了提供不同的潜在集群,这些集群上存在动作。
    8 n3 S% Y! k. r" B6 g& T
      N9 ^% E/ W, N2 Q7 e1 R我们采用了深嵌入聚类的概念[32],用我们的ST-GCAE架构对时间图进行聚类。所提出的聚类模型由编码器、解码器和软聚类层三部分组成。
    - f; X  c( ^2 M! n  o9 i+ G# L8 s+ u1 Z7 P( |( b' [7 Y" U
    具体地说,我们的ST-GCAE模型保持了图的结构,但使用了较大的时间步长和不断增加的通道数来将输入序列压缩为潜在向量。解码器使用时间上采样层和额外的图卷积块,用于逐渐恢复原始信道计数和时间维度。
    , a8 g' I# \! \0 Q
    8 J/ X# D2 j2 X$ _: d$ Y1 L+ zST-GCAE的嵌入是数据聚类的起点。在我们的聚类优化阶段,对基于重构的初始嵌入进行微调,以达到最终的聚类优化嵌入。
    ' q) |4 {! l$ Y$ t; D  L
    6 x' f6 A3 `( O# X" k符号        表示
    ' k1 n! y- _6 N: Q! W/ px i x_ix 7 H+ I& K, l3 P' `. ]! U
    i7 N9 g; ]# C- r
    ; O. t* @9 ?0 q
            输入示例
    , d6 x: N5 R- w- V% dz i z_iz
    6 b9 \$ s5 t* q6 Bi
    * g: ]7 R3 {8 u% f
    ) V. \2 h& V( B; T5 \, t5 o) k9 Q2 H         编码器的潜在嵌入
    ) ?- _9 h) Z8 H4 j, Cy i y_iy 0 k4 ?/ w, i$ T4 Y7 Q
    i
    ; l8 T  T! m0 a  U/ L# h' f3 f, U! M, u! G+ @+ |6 f0 Y* C, R
            使用聚类层计算的软聚类分配
    " I, s/ ?1 T- H7 kΘ ΘΘ        聚类层的参数! J: T2 `- }5 S4 E. J  u
    p i k p_{ik}p ( s# w% y2 F( D) ]3 }$ l* M% S: o
    ik, L* U' [4 c% f3 G6 ~8 U4 ?
    + g1 K* S. V% }/ C& U& k+ q- w
            probability for the i-th sample to be assigned to the k-th cluster
    # U' ]1 o5 E+ S
    - u8 d# {4 Q) M2 ]# y5 n( x# K2 J: C2 o! T
    我们采用[32]提出的聚类目标和优化算法。聚类目标是最小化当前模型概率聚类预测P和目标分布Q之间的KL散度:5 f4 d/ J$ z9 V% i+ T" Q2 n5 a
      Q& i' ~" n# |, D  m6 x" i5 p

      W1 C* K# b  K目标分布旨在通过标准化和将每个值推到更接近0或1的值来加强当前的群集分配。反复应用将P转换为Q的函数将最终导致硬分配向量。使用以下等式计算目标分布的每个成员:% V3 G' E  N# G& l
    " [( H4 H7 a' k: ]
    ( _# Y* O& q( M+ x; a$ `, ~
    聚类层由为编码训练集计算的K均值质心初始化。优化以期望最大化(EM)的方式进行。3 Y7 _# j. L0 ~$ A2 o/ e
    在期望步骤期间,整个模型是固定的,并且目标分布Q被更新。在最大化阶段,优化模型以最小化聚类损失Lcluster。, |- a$ f: S7 x, f; J" [

    ( o4 u5 f8 v. ?' m6 D6 Z3.4. Normality Scoring
    2 s8 `3 \4 c6 o! Y2 a: p该模型支持两种类型的多模分布。一个是集群分配级别;另一个是在软分配向量级别。例如,一个动作可能被分配给多个集群(集群级分配),导致多模式软分配向量。( u2 g, b" A4 `% y
    软分配向量本身(捕获动作)也可以通过多模态分布建模。
    # c0 Z0 g8 n4 X0 I. f( Y) F: {1 i) \% d9 X1 Z& z
    Dirichlet过程混合模型(DPMM)是评估比例数据分布的一种有效方法。它满足我们所需的设置:(i)估计(拟合)阶段,在此阶段,一组分布参数为评估,和(ii)推理阶段,为每个嵌入样本使用拟合模型。彻底的Blei和Jordan[4]给出了该模型的概述。+ o2 T. K$ ?3 K" E% k
    4 z- ^& H- B' G
    Dirichlet过程混合模型(DPMM)是评估比例数据分布的有效方法。它符合我们要求的设置:
    " l  m$ E( `/ G0 \3 h4 ?(i) 估计(拟合)阶段,在此期间评估一组分布参数,以及
    . W0 O  T" ]0 w9 l9 [5 R$ Q(ii)推理阶段,使用拟合模型为每个嵌入样本提供分数。Blei和Jordan[4]对模型进行了全面概述。
    & M0 Q- o8 m2 w/ M, U
    " \1 p+ S2 l( r  _7 l3 lDPMM是单峰Dirichlet分布的常见混合扩展,并使用Dirichllet过程,这DirichletDistribution的无限维扩展。该模型是多模态的,能够将每个模式捕获为混合成分。拟合模型具有多个模式,每个模式表示对应于一个正常行为的一组比例。在测试时,使用拟合模型通过其对数概率对每个样本进行评分。[4,8]中提供了关于DPMM使用的进一步解释和讨论。4 m! g0 n; U3 U( c3 r# `8 q  b

    5 `$ I, I' S& c3 I) ^! R9 j1 U3.5. Training3 K" _* X' Z) i1 y+ T
    该模型的训练阶段包括两个阶段,一个是自动编码器的预训练阶段,其中网络的聚类分支保持不变,另一个是微调阶段,其中嵌入和聚类都得到优化。具体而言:+ _0 e6 `7 R8 U* w! i- ]: i
    6 @5 P3 d' s4 G4 t) ?
    Pre-Training: 该模型通过最小化重建损失(表示为Lrec)来学习编码和重建序列,Lrec是原始瞬时位姿图和ST-GCAE重建的位姿图之间的L2损失
    : W9 R& v! ?( M
    - K0 [8 r* \/ O- G: WFine-Tuning:, g. s7 G7 R: d
    该模型优化了由重建损失和聚类损失组成的组合损失函数。
    . v% k+ K% p  b& e5 z' N进行优化,使得聚类层优化为w.r.t.Lcluster,解码器优化为w.r.t.Lrec,编码器优化为w.r.t.两者。
    * \+ ?8 P! m. R& E" k" l/ b8 r集群层的初始化是通过Kmeans完成的。如[9]所示,当编码器针对这两种损失进行优化时,解码器保持不变,并充当正则化器,以保持编码器的嵌入质量。
    5 _/ h- M4 }; s/ R本阶段的综合损失为:
    6 a2 ]2 k% A$ T
    ' ^) d1 I% i1 g3 f
    4 i$ w: l& G) k- u4 I' J# e0 o! u$ ]
    实现细节
    5 \/ I+ M3 {) H- e  f2 d) i! J' \6 B7 [. _$ }+ b1 _, f/ M
    3 A5 [* p0 Y9 W) D
    " y, O' b/ I/ n) |4 i4 }! Y
    def calc_reg_loss(model, reg_type='l2', avg=True):
    % j, z* @4 V& w/ B. v; F' m    reg_loss = None+ H' P- g6 ?3 ^8 X/ S% K. d
        parameters = list(param for name, param in model.named_parameters() if 'bias' not in name)& y4 @% H' d1 V2 m: x1 ~
        num_params = len(parameters)" _8 L. G- N5 \2 a% g: X, Z
        if reg_type.lower() == 'l2':, p) W* R( t) N" @
            for param in parameters:
    ) H( i- O! W, B  I' A5 C6 X6 f) u            if reg_loss is None:, d4 @- k1 k# n) u5 Q
                    reg_loss = 0.5 * torch.sum(param ** 2)7 g2 I8 R8 [4 X$ _+ P) ]7 m! I
                else:, [& a+ M  l  `2 W' L/ d2 n
                    reg_loss = reg_loss + 0.5 * param.norm(2) ** 2* `8 y; Z) V3 F4 o
    ! c( p' K" Y2 X
            if avg:
    3 L9 Y/ [4 J9 J5 ~$ N8 `2 e4 M+ T, [            reg_loss /= num_params, R6 c+ ]2 l! b. |/ A. o5 D- G) _
            return reg_loss/ v; ^. A1 k9 U9 \
        else:7 w" _/ A$ s8 a5 v$ [* K6 a5 X
            return torch.tensor(0.0, device=model.device)! B3 f' z, \# l9 m$ {
    1
    * h5 l3 d1 q, i" ?$ K2
    " A) a; C& W: L5 b- D# s& K+ g, E$ \34 M1 s0 \1 f3 D9 T
    4
    ' T  t% B/ s$ J5
    ( E- z( ^6 I: I9 Z7 {6
    " U: r" D1 n7 @" R# I7
    : O$ M; e: }2 D, @0 n7 E" O81 A9 o9 N; p. K3 F. M5 F/ R3 [8 \1 S
    9  L5 I% W$ c8 M3 B; |/ J6 ?3 j
    10
    2 W2 X# m, [" p: \! K110 v" q/ G) d3 W5 a: h
    122 t9 j% p$ w/ o/ V8 k! Z4 x/ [" M4 o7 }
    13
    1 X0 n& d! z9 ^- c9 T- E2 e14  s; \2 ^# a- |2 S4 _4 i
    15' T) I0 w* `; O- ]8 U
    161 w) W+ m( R5 ~7 I+ T! A' b( i' k
    $ u  C! T% n3 k4 {* D
    - P0 s+ u$ _( W
    0 [; i- f+ a8 U6 K

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

    % M5 f* ]9 c+ J; h, B! t0 ?
    zan
    转播转播0 分享淘帖0 分享分享0 收藏收藏0 支持支持0 反对反对0 微信微信
    您需要登录后才可以回帖 登录 | 注册地址

    qq
    收缩
    • 电话咨询

    • 04714969085
    fastpost

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

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

    蒙公网安备 15010502000194号

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

    GMT+8, 2025-8-15 01:01 , Processed in 0.336612 second(s), 51 queries .

    回顶部