QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 3062|回复: 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% m; Z" L% X; ]. j

    : n. o: i/ h! w; k骨架图算法
    / C* R& ?! K0 o$ l# T" a# d0 n7 x) E

    ' I6 k6 _# ~; s! H' \Graph Embedded Pose Clustering for Anomaly Detection2 L5 q/ X+ V, _/ E
    paper        code( d) h/ u2 I+ `/ {
    https://arxiv.org/abs/1912.11850        https://github.com/amirmk89/gepc' _9 m% ~* u8 Y% p% l
    我们提出了一种用于人类行为异常检测的新方法。我们的方法直接适用于可以从输入视频序列计算的人体姿势图。这使得分析独立于扰动参数,如视点或照明。我们将这些图映射到一个潜在空间并将它们聚类。然后,每个操作都由其对每个聚类的软赋值来表示。这为数据提供了一种“词袋”表示,其中每个动作都由其与一组基本动作词的相似性来表示。然后,我们使用基于狄利克雷过程的混合物,这对于处理比例数据(例如我们的软赋值向量)很有用,以确定一个动作是否正常。4 g. }4 L. Q! o% C) I' s; i6 k2 n8 j
    8 C7 A, I; B8 s3 U
    首先,我们对输入数据使用人体姿态检测器。这抽象了问题,并防止下一步处理诸如视点或照明变化等有害参数。人的行为被表示为时空图,我们将其嵌入(第3.1、3.2小节)并聚类(第3.3小节)到一些潜在空间中。现在,每个动作都表示为一组基本动作的软分配向量。这抽象了动作的基本类型(即细粒度或粗粒度),从而进入学习其分布的最后阶段。我们用于学习软分配向量分布的工具是Dirichlet过程混合(第3.4小节),我们将模型拟合到数据中。然后使用该模型确定动作是否正常。
    . X' o6 q- P1 W# w6 H4 P, G# U$ }2 x* |7 A& W$ N* ?2 V9 b
    图的每个节点对应于一个关键点、一个身体关节,每个边表示两个节点之间的某种关系。 存在许多"关键点关系",如解剖学上定义的物理关系(例如,左手腕和肘部连接)和由运动定义的动作关系,这些运动往往在特定动作的上下文中高度相关(例如,跑步时左右膝盖倾向于朝相反方向移动)。图的方向来自于这样一个事实,即一些关系是在优化过程中学习的,并且不是对称的。这种表示的一个好处是紧凑,这对于高效的视频分析非常重要。4 t+ W+ l* r+ ?; [/ S$ l
    为了在时间上扩展,将从视频序列中提取的姿势关键点表示为姿势图的时间序列。 时间姿势图是人体关节位置的时间序列。时域邻接可以类似地通过连接连续帧中的关节来定义,允许我们利用姿势图序列的空间和时间维度执行图卷积运算4 B& k1 K; m8 E/ E4 F6 R. k
      w  @- }+ k0 s
    我们提出了一种基于深度时态图自动编码器的结构,用于嵌入时态姿态图。 基于图2所示ST-GCN的基本块设计,我们将基本GCN算子替换为新的空间注意力图卷积,如下所示。3 V" `0 O6 m& R1 e% m9 R

    # i( Q7 r( u# F1 Y3.2. Spatial Attention Graph Convolution
    ! A/ X/ O' b4 C1 F9 E我们提出了一个新的图算子,如图3所示,它使用三种类型的邻接矩阵:静态、全局学习和推断(基于注意力)。每个邻接类型使用单独的权重应用其自己的GCN。
    ! i5 S7 |4 S. y9 K0 W0 f
    7 |( T8 z% t0 I# y+ WGCN的输出按通道维度堆叠。采用1×1卷积作为加权叠加输出的可学习缩减度量,并提供所需的输出信道数。* H- S$ `1 L$ \) O$ X# u5 c* u9 u

    9 N) }( U: p; ]4 t三个邻接矩阵捕捉了模型的不同方面:! g2 d: M, p9 h) m
    (i)使用身体部位连通性作为优先于节点关系,使用静态邻接矩阵表示。) }1 m5 Q' ?' G+ m
    (ii)由全局邻接矩阵捕获的数据集级关键点关系,以及9 a2 |( t6 |9 f* a7 ]
    (iii)由推断邻接矩阵获取的样本特定关系。最后,可学习约简度量对不同的输出进行加权
      d) Y* |$ U1 k
      I6 y* V6 f' B# N9 @# V) {0 Q$ Y4 z9 D# q
    后续段落介绍了静态、全局学习和推断的邻接矩阵的设置方法,即图3中的A,B和C,在此略过。  q$ _2 {5 I9 Y) S  M
    3.3. Deep Embedded Clustering
    2 v$ z: _& i  R# n0 O; G为了构建我们的底层动作词典,我们采用训练集样本,并将它们联合嵌入和聚类到一些潜在空间中。然后,每个样本由其分配给每个底层聚类的概率表示。选择目标是为了提供不同的潜在集群,这些集群上存在动作。
    7 Y: d" r/ o$ `1 Y
      v8 I& l" Q" D# j& C+ e4 v我们采用了深嵌入聚类的概念[32],用我们的ST-GCAE架构对时间图进行聚类。所提出的聚类模型由编码器、解码器和软聚类层三部分组成。( n% X) {' A9 X* n; E" f
    0 |( M! T' \( h" y
    具体地说,我们的ST-GCAE模型保持了图的结构,但使用了较大的时间步长和不断增加的通道数来将输入序列压缩为潜在向量。解码器使用时间上采样层和额外的图卷积块,用于逐渐恢复原始信道计数和时间维度。
      o: E' M) x& ^
    * P- @1 r0 {3 ]ST-GCAE的嵌入是数据聚类的起点。在我们的聚类优化阶段,对基于重构的初始嵌入进行微调,以达到最终的聚类优化嵌入。
    ; z. Y! U+ E) Y& g; X& T; Z: v' N3 }
    符号        表示( j) R5 w; D3 B5 h2 d: i, P
    x i x_ix 8 v4 D. D3 j7 |9 x) A; O% I! M
    i
    * i' y2 m7 t6 t6 M
    $ ~' }. c/ K; x  ]8 {8 y' ~         输入示例
    ( L; \0 d$ l! G2 Oz i z_iz
    . f: ]* @9 z; w0 b% [: h9 Oi$ _4 k! }) _' L' t+ o

    0 t. o& r/ q5 L3 e4 M9 o8 ?         编码器的潜在嵌入1 b, r# Z! y0 Q
    y i y_iy # ^  T! @( Q% {1 K# g
    i
    4 W/ f( Z' p9 N. D# Q
    3 j7 \" H5 t3 f# V* Q         使用聚类层计算的软聚类分配% F; F8 ]( q5 l' I1 `
    Θ ΘΘ        聚类层的参数$ |# Y! \3 |" d) y- W. ^
    p i k p_{ik}p
    . Z! s* \8 G4 k) a& u4 gik4 O' o# I  \8 u0 R
    : o) V$ G. p* `: m3 U5 y
            probability for the i-th sample to be assigned to the k-th cluster. j0 G! l/ B( x; e: G/ |+ G

    ! P1 E1 o( A4 _: E' K5 D: H2 v4 G
      O3 ^! K+ F+ M# p5 T3 {8 r" ~我们采用[32]提出的聚类目标和优化算法。聚类目标是最小化当前模型概率聚类预测P和目标分布Q之间的KL散度:
    6 m; e3 t& W, N/ y+ w$ E8 }. s+ \! u% l' z5 [3 I3 p6 C

    ( m0 p8 E/ o9 s! m. w目标分布旨在通过标准化和将每个值推到更接近0或1的值来加强当前的群集分配。反复应用将P转换为Q的函数将最终导致硬分配向量。使用以下等式计算目标分布的每个成员:6 u5 u2 v. @4 ?

    ' l4 x0 j  s# j/ b
    " M# ]4 H# t" J# \8 g; b聚类层由为编码训练集计算的K均值质心初始化。优化以期望最大化(EM)的方式进行。- n' u, w6 P4 _0 K2 n
    在期望步骤期间,整个模型是固定的,并且目标分布Q被更新。在最大化阶段,优化模型以最小化聚类损失Lcluster。
    1 L1 z( i. q# P; q9 J: b$ l. U, l
    / D* r6 ]" k3 E+ P3.4. Normality Scoring! T$ N) Q) C5 p7 N! w3 V4 \$ t
    该模型支持两种类型的多模分布。一个是集群分配级别;另一个是在软分配向量级别。例如,一个动作可能被分配给多个集群(集群级分配),导致多模式软分配向量。2 N; M, j/ z3 m. U
    软分配向量本身(捕获动作)也可以通过多模态分布建模。
    ' c+ b3 q. x, l; f6 p. D( }) Y! a2 @5 J# ~, \* A: j; P
    Dirichlet过程混合模型(DPMM)是评估比例数据分布的一种有效方法。它满足我们所需的设置:(i)估计(拟合)阶段,在此阶段,一组分布参数为评估,和(ii)推理阶段,为每个嵌入样本使用拟合模型。彻底的Blei和Jordan[4]给出了该模型的概述。
    + R; U" X' W- ~1 P$ v5 t0 M+ c# C1 K1 S+ `% Q
    Dirichlet过程混合模型(DPMM)是评估比例数据分布的有效方法。它符合我们要求的设置:
    + Y2 C% V% E, K- J" M, ~8 I: [(i) 估计(拟合)阶段,在此期间评估一组分布参数,以及2 O/ V) o! e5 a
    (ii)推理阶段,使用拟合模型为每个嵌入样本提供分数。Blei和Jordan[4]对模型进行了全面概述。
    9 @+ @4 {$ F- Y, e/ f  D2 H
    6 U) i& {1 _' uDPMM是单峰Dirichlet分布的常见混合扩展,并使用Dirichllet过程,这DirichletDistribution的无限维扩展。该模型是多模态的,能够将每个模式捕获为混合成分。拟合模型具有多个模式,每个模式表示对应于一个正常行为的一组比例。在测试时,使用拟合模型通过其对数概率对每个样本进行评分。[4,8]中提供了关于DPMM使用的进一步解释和讨论。
    4 L  j1 ~2 K' ?% X+ V# R; h1 A+ W, d% h. s. g$ B
    3.5. Training. H6 y7 H: F2 [9 G! R4 W3 Z
    该模型的训练阶段包括两个阶段,一个是自动编码器的预训练阶段,其中网络的聚类分支保持不变,另一个是微调阶段,其中嵌入和聚类都得到优化。具体而言:; B2 _/ u9 q% |( ^

    $ r  G+ ~3 t' s. b) r) H/ |Pre-Training: 该模型通过最小化重建损失(表示为Lrec)来学习编码和重建序列,Lrec是原始瞬时位姿图和ST-GCAE重建的位姿图之间的L2损失+ |3 w( [2 O8 l( R2 C) s6 V) n+ ?
    5 h) N) {5 e. a& H$ a
    Fine-Tuning:
    2 }% @7 M* u% ^. r# ?; z8 R# U6 t该模型优化了由重建损失和聚类损失组成的组合损失函数。
    5 ~% \2 G0 E& H- n/ k4 y* p进行优化,使得聚类层优化为w.r.t.Lcluster,解码器优化为w.r.t.Lrec,编码器优化为w.r.t.两者。
    * |4 E; S) Q. }* f# H! l  t3 e& A集群层的初始化是通过Kmeans完成的。如[9]所示,当编码器针对这两种损失进行优化时,解码器保持不变,并充当正则化器,以保持编码器的嵌入质量。; a3 q! H) F. p6 S
    本阶段的综合损失为:7 S5 S/ Z$ D2 \0 {" r

    4 r# t# b3 O4 f4 @2 j3 p- C% d4 v  s& f' K, L, e
    ! n6 W- K6 w* |$ l5 e0 X
    实现细节7 p9 b# X: g  I* K, W% @! o

    3 _/ r; I1 S2 x* @6 T# e
    / E) V$ i2 |0 }/ v# _4 C( D$ V0 {( C4 F0 u' M9 f1 L
    def calc_reg_loss(model, reg_type='l2', avg=True):7 e% j5 B7 l8 S) g% `5 e) U
        reg_loss = None, I$ C& [. u" F0 ^& M
        parameters = list(param for name, param in model.named_parameters() if 'bias' not in name)
    $ D+ b3 f3 S: h( t    num_params = len(parameters)" F7 _. z4 W& b$ ?( p9 n* M& I: s
        if reg_type.lower() == 'l2':
    * P# e  t6 d8 \* o        for param in parameters:. J# h, F! f6 F$ M" Q. L1 I" l
                if reg_loss is None:, X: _) q6 u6 a2 _# u0 P* k$ h
                    reg_loss = 0.5 * torch.sum(param ** 2)2 q5 Y' J( ?) M5 I) ]$ i
                else:% Y7 Q& G4 y( M5 `9 v! T$ n* i; Y
                    reg_loss = reg_loss + 0.5 * param.norm(2) ** 2+ P* K$ n, {+ k# k* E

    ' T! [& C$ y" [# @9 }, Z: a        if avg:
    ; E9 X! w1 w# a, u- p0 ^# W            reg_loss /= num_params
    & D) Y6 Y2 A0 l5 o7 h( c        return reg_loss0 o2 O4 Y8 |3 D% T( s
        else:  Q: W1 @2 F/ f6 c# I2 Y. {
            return torch.tensor(0.0, device=model.device)
    9 d( J- X9 q. F* t1
    0 V  z1 q/ R6 e2 |0 L" N5 U) l& ~. D2) N. b. n9 j' ~* E
    35 v+ w4 L4 H4 B! M7 F# H
    4
    1 I( {8 a; ]5 q/ ~) [; o2 {. o5
    4 Q, @5 E7 n1 U8 r69 I. x7 [7 a5 D! z0 d  @  G/ w
    7
    + K5 Y+ p6 S0 u( K3 h& ?) M* {8! {. k2 j: W9 T( f+ S1 b( U! j
    9
    5 _% W/ @# R, g4 N6 f10" g2 N7 S- o! \, O6 v; ?$ e, [
    11
    6 G$ H8 p  O- B! Z: [/ x126 D' P5 g/ z) o  J, i
    131 n4 D( m) f2 P; Y
    14
    . i) A! A( ?: L/ Z* \9 [: N15- a$ a% X- Z' K! y5 @) @/ i
    16
    5 X, B" `, P( [' p1 X$ M# d1 n0 `1 X# [' k$ c, f( L

    + ], I+ j9 r# \7 i/ p+ X' _. d& z0 g

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

    回顶部