QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 3041|回复: 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
    % K5 C2 l( M) u4 `) u
    0 ]% r' P+ c% \, F/ F8 n3 O$ t/ D骨架图算法
    % x1 g# x" o; j/ c" O- F) j1 }# R; [& G1 m' s
    9 ?' {; g9 C3 e* ^# }& _3 u7 z: [
    Graph Embedded Pose Clustering for Anomaly Detection
    * r* J. T7 Z* fpaper        code1 p6 [" Z1 [$ J* f2 Q1 |
    https://arxiv.org/abs/1912.11850        https://github.com/amirmk89/gepc- k4 X( d) `2 k! r' V
    我们提出了一种用于人类行为异常检测的新方法。我们的方法直接适用于可以从输入视频序列计算的人体姿势图。这使得分析独立于扰动参数,如视点或照明。我们将这些图映射到一个潜在空间并将它们聚类。然后,每个操作都由其对每个聚类的软赋值来表示。这为数据提供了一种“词袋”表示,其中每个动作都由其与一组基本动作词的相似性来表示。然后,我们使用基于狄利克雷过程的混合物,这对于处理比例数据(例如我们的软赋值向量)很有用,以确定一个动作是否正常。
    . w) h) c7 l. q- q. j: l3 w2 m# H) T; }+ I( N! R4 l
    首先,我们对输入数据使用人体姿态检测器。这抽象了问题,并防止下一步处理诸如视点或照明变化等有害参数。人的行为被表示为时空图,我们将其嵌入(第3.1、3.2小节)并聚类(第3.3小节)到一些潜在空间中。现在,每个动作都表示为一组基本动作的软分配向量。这抽象了动作的基本类型(即细粒度或粗粒度),从而进入学习其分布的最后阶段。我们用于学习软分配向量分布的工具是Dirichlet过程混合(第3.4小节),我们将模型拟合到数据中。然后使用该模型确定动作是否正常。1 p2 @$ X( W% r4 k1 t7 \
    $ o5 F4 }, g( ?# u0 ~( }+ @, [  t( C
    图的每个节点对应于一个关键点、一个身体关节,每个边表示两个节点之间的某种关系。 存在许多"关键点关系",如解剖学上定义的物理关系(例如,左手腕和肘部连接)和由运动定义的动作关系,这些运动往往在特定动作的上下文中高度相关(例如,跑步时左右膝盖倾向于朝相反方向移动)。图的方向来自于这样一个事实,即一些关系是在优化过程中学习的,并且不是对称的。这种表示的一个好处是紧凑,这对于高效的视频分析非常重要。
    7 q8 R5 [/ Z( _5 h, c为了在时间上扩展,将从视频序列中提取的姿势关键点表示为姿势图的时间序列。 时间姿势图是人体关节位置的时间序列。时域邻接可以类似地通过连接连续帧中的关节来定义,允许我们利用姿势图序列的空间和时间维度执行图卷积运算+ m( p4 j2 O; d7 e5 t
    ) ~$ S* \' L& |) l  ?
    我们提出了一种基于深度时态图自动编码器的结构,用于嵌入时态姿态图。 基于图2所示ST-GCN的基本块设计,我们将基本GCN算子替换为新的空间注意力图卷积,如下所示。
    / Q; t) V1 X0 i' ]& M' z+ D9 C9 N* ]9 |+ {% N6 V
    3.2. Spatial Attention Graph Convolution
    7 n* W) j1 w& Z* y* c" h我们提出了一个新的图算子,如图3所示,它使用三种类型的邻接矩阵:静态、全局学习和推断(基于注意力)。每个邻接类型使用单独的权重应用其自己的GCN。
    ' @8 ^; P5 \" v3 V! s& A
    : n# X  D& N8 t4 X+ C6 L8 zGCN的输出按通道维度堆叠。采用1×1卷积作为加权叠加输出的可学习缩减度量,并提供所需的输出信道数。+ ^! v2 o$ ?8 v+ k  }0 J2 W6 X; I/ T
    ( T6 N! U, @6 b% w* q0 L
    三个邻接矩阵捕捉了模型的不同方面:0 H- |9 ?$ o9 @* ~
    (i)使用身体部位连通性作为优先于节点关系,使用静态邻接矩阵表示。
    2 h- e7 E  X/ N# u1 x(ii)由全局邻接矩阵捕获的数据集级关键点关系,以及3 v% N  L0 G9 g' |2 d
    (iii)由推断邻接矩阵获取的样本特定关系。最后,可学习约简度量对不同的输出进行加权/ I+ o* C$ {" z

    ' E; b7 [7 K3 t- K& w* j
    & e' [% M0 s, l0 u  i$ B后续段落介绍了静态、全局学习和推断的邻接矩阵的设置方法,即图3中的A,B和C,在此略过。$ s( W% e7 g* `! ~/ c+ x% @( z
    3.3. Deep Embedded Clustering: o6 u: [+ h4 B3 @0 a, K
    为了构建我们的底层动作词典,我们采用训练集样本,并将它们联合嵌入和聚类到一些潜在空间中。然后,每个样本由其分配给每个底层聚类的概率表示。选择目标是为了提供不同的潜在集群,这些集群上存在动作。7 h+ A( m7 D& m5 R  e! l4 o0 {
    $ q7 z. q5 P7 H
    我们采用了深嵌入聚类的概念[32],用我们的ST-GCAE架构对时间图进行聚类。所提出的聚类模型由编码器、解码器和软聚类层三部分组成。9 ?5 s8 s0 e3 n6 k; I& x0 D
    6 @% o* ~  c9 |3 S+ J! e: j% Q/ K
    具体地说,我们的ST-GCAE模型保持了图的结构,但使用了较大的时间步长和不断增加的通道数来将输入序列压缩为潜在向量。解码器使用时间上采样层和额外的图卷积块,用于逐渐恢复原始信道计数和时间维度。
    / r# ~+ L! Y9 w6 T( t# J' C: j3 c1 _4 n5 M
    ST-GCAE的嵌入是数据聚类的起点。在我们的聚类优化阶段,对基于重构的初始嵌入进行微调,以达到最终的聚类优化嵌入。+ r8 X" q- K. g% Z. ~& a2 Q* J2 g

    2 }7 P. j* B/ t1 Q' {, t' O符号        表示( m8 S5 m) ?, g8 b( U
    x i x_ix
    8 k7 ]6 k: y/ E3 ri
    $ x2 C/ g% N* m& T
    , d+ Q3 b$ _" P+ c5 F! |         输入示例) C2 D# U. ^- N* D7 i$ k
    z i z_iz $ E  ^- z4 A) c3 m9 G  @
    i4 E& U. r1 r: Z+ u1 ]
    / S0 `$ R9 D/ e
            编码器的潜在嵌入
    ) G7 {7 ^& _  D- _3 B/ dy i y_iy
    % G& b6 }0 b3 L+ }* ]& ]! \/ Mi# K7 ]) M. _1 J
    ( m+ \3 u9 q" |
            使用聚类层计算的软聚类分配" C# `! c& l6 m& D% k9 b7 e
    Θ ΘΘ        聚类层的参数' @& n8 I9 F2 m" P; T
    p i k p_{ik}p
    ( L4 T4 X. G0 q/ z) Y8 y- F% kik
    3 a' }& ?% J, V: d' o6 ]5 g% V! |2 B1 D! Q+ U$ e3 V% l% t
            probability for the i-th sample to be assigned to the k-th cluster1 |5 I5 |) y5 ^; k0 e3 t. V
    % E  w8 t8 E* G) x4 b5 e8 b
    / k! J3 i) C- ^/ i/ B7 _) ?
    我们采用[32]提出的聚类目标和优化算法。聚类目标是最小化当前模型概率聚类预测P和目标分布Q之间的KL散度:
    ; C. T& F& ]6 k1 f- M6 V, E0 i, i! T7 |1 K

    , ?9 D7 x% }' x. A* b) @目标分布旨在通过标准化和将每个值推到更接近0或1的值来加强当前的群集分配。反复应用将P转换为Q的函数将最终导致硬分配向量。使用以下等式计算目标分布的每个成员:
    7 v4 n/ J" |0 V" x
    * x' Y- A3 E" H1 V
    ' F+ L2 ?  j0 Q% C& t聚类层由为编码训练集计算的K均值质心初始化。优化以期望最大化(EM)的方式进行。, D( K. M& @# V" b8 g1 Y
    在期望步骤期间,整个模型是固定的,并且目标分布Q被更新。在最大化阶段,优化模型以最小化聚类损失Lcluster。
    ' I9 T/ S- j. O( d1 V9 @2 `& w9 B5 |7 q" O8 `
    3.4. Normality Scoring- F" h3 \6 J, n* U" C( Z8 X
    该模型支持两种类型的多模分布。一个是集群分配级别;另一个是在软分配向量级别。例如,一个动作可能被分配给多个集群(集群级分配),导致多模式软分配向量。: j: f6 n( z. s6 L
    软分配向量本身(捕获动作)也可以通过多模态分布建模。9 D$ Y) ?0 q. w
    * Q/ S' h& \! G# J9 O
    Dirichlet过程混合模型(DPMM)是评估比例数据分布的一种有效方法。它满足我们所需的设置:(i)估计(拟合)阶段,在此阶段,一组分布参数为评估,和(ii)推理阶段,为每个嵌入样本使用拟合模型。彻底的Blei和Jordan[4]给出了该模型的概述。
    1 r( u4 {+ p9 l; T
    0 u+ Q: s% L1 H/ ~$ ]& o; C: @Dirichlet过程混合模型(DPMM)是评估比例数据分布的有效方法。它符合我们要求的设置:8 h6 F0 h5 q4 V
    (i) 估计(拟合)阶段,在此期间评估一组分布参数,以及5 l$ _. w# l/ m0 g" h1 u
    (ii)推理阶段,使用拟合模型为每个嵌入样本提供分数。Blei和Jordan[4]对模型进行了全面概述。
    # z& X8 w: ^* b! ]# i9 y- _0 O' s
    " ]. X% `* c4 ZDPMM是单峰Dirichlet分布的常见混合扩展,并使用Dirichllet过程,这DirichletDistribution的无限维扩展。该模型是多模态的,能够将每个模式捕获为混合成分。拟合模型具有多个模式,每个模式表示对应于一个正常行为的一组比例。在测试时,使用拟合模型通过其对数概率对每个样本进行评分。[4,8]中提供了关于DPMM使用的进一步解释和讨论。
    / J4 H1 C2 S. @8 }9 X1 }# R) X0 ]5 D# @% f. |! @2 ^
    3.5. Training2 e: ?# O1 s4 z4 w
    该模型的训练阶段包括两个阶段,一个是自动编码器的预训练阶段,其中网络的聚类分支保持不变,另一个是微调阶段,其中嵌入和聚类都得到优化。具体而言:  e! S" h2 }$ o
    + g' X  C% S. f+ W
    Pre-Training: 该模型通过最小化重建损失(表示为Lrec)来学习编码和重建序列,Lrec是原始瞬时位姿图和ST-GCAE重建的位姿图之间的L2损失
    * [! m& D2 d% ]; t! K' C( x6 s, @0 o/ \. p! B& b! G" [
    Fine-Tuning:+ ?9 {/ R9 ~2 K  ?% V
    该模型优化了由重建损失和聚类损失组成的组合损失函数。
    : g) }+ _7 o$ r; {& N. u" Z进行优化,使得聚类层优化为w.r.t.Lcluster,解码器优化为w.r.t.Lrec,编码器优化为w.r.t.两者。4 e' z; E) i8 C: J/ f5 i
    集群层的初始化是通过Kmeans完成的。如[9]所示,当编码器针对这两种损失进行优化时,解码器保持不变,并充当正则化器,以保持编码器的嵌入质量。
    0 @7 Y# v* S' z4 b4 ?本阶段的综合损失为:$ X* N9 w/ B$ G3 L2 |" M) Y

    $ m! @9 d+ Q3 i% R( s
    / F; ^& W" S7 K, u8 Q3 y( `
    3 |$ a6 m4 [, D% r2 W) y8 \6 `1 ~实现细节
    - B& C( c8 y& g5 n' i
      ~6 r' b. p- D8 S! J- G3 y$ P8 x6 a3 c9 g

      A' o! r0 J2 odef calc_reg_loss(model, reg_type='l2', avg=True):5 D) g; G& v$ p! }( R" L! }& Q( X* d: ^" ~
        reg_loss = None
    & }+ }+ O4 {0 N; U/ {7 w$ p: e    parameters = list(param for name, param in model.named_parameters() if 'bias' not in name)! S0 G/ s3 B4 W
        num_params = len(parameters)
    % b6 P% y& o, h2 D8 c' H1 k8 t    if reg_type.lower() == 'l2':
    ) ~' y1 g7 x+ A& K+ z" h        for param in parameters:
    + z7 K, Y" J- A+ x$ w' ]( @% v- y+ H            if reg_loss is None:$ w* H$ {9 S, G% E( a) U
                    reg_loss = 0.5 * torch.sum(param ** 2)" A! @( T/ x& p) z& n
                else:
    7 A7 ~, }: W/ X8 Z# e                reg_loss = reg_loss + 0.5 * param.norm(2) ** 2
    9 ]; C2 I# d$ f! e) N/ a8 p& u1 }4 |3 l$ y5 L1 A
            if avg:
    ; l% ?0 t, F" V: J3 A) {            reg_loss /= num_params
    / v6 j. s! Q4 S' K2 T4 C        return reg_loss
    % w, }2 M' L1 S5 f    else:- X3 O6 j# A9 N" C; v! i/ V7 `: r
            return torch.tensor(0.0, device=model.device)& O& K- s1 k" Z/ X1 ~
    16 d4 ~6 q7 |& f
    2
    ) `% ^6 }& T" ]9 r# q! c3
    . |- ]5 o3 V! {5 l. O5 q8 L4
    $ {* G: Q  r! Q4 d' M5) B5 N" @, o  [
    6
    $ R: J' N% j) \7
    5 }, J: l! N" P! x8
    * s+ w6 g7 w1 k9 k& O9
    8 |* P# ~- R) u" P. C10
    5 v! M9 X) Q$ j# m% y" U11
    : q4 Q- \* w7 \' ]; V) ]12
    $ J+ |( Q1 j' h: |7 H" ]9 a/ G13) S; T+ @/ N/ Y. s; |& s
    14
    ( z5 ^3 j  R: I) W% P15
    7 M7 B) A* a7 h, @# k9 o2 f16
    , y8 n  t& U; N; \
    ' c$ I5 G( D# t8 g; l7 b7 j( ^* f3 I: G- i
    ! W) Z6 p% G6 M3 N& A

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

    . m, N; @' h) f  B- A5 X9 v
    zan
    转播转播0 分享淘帖0 分享分享0 收藏收藏0 支持支持0 反对反对0 微信微信
    您需要登录后才可以回帖 登录 | 注册地址

    qq
    收缩
    • 电话咨询

    • 04714969085
    fastpost

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

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

    蒙公网安备 15010502000194号

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

    GMT+8, 2026-4-15 09:27 , Processed in 0.441730 second(s), 51 queries .

    回顶部