QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 2557|回复: 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
    ) z, l  J# P- J2 @: c5 ]! S$ D# f, Q4 D
    骨架图算法* C$ e% x: K3 p$ H2 l$ s

    9 S1 ^: h0 M. ?4 K+ I& B+ E1 N; a- ^
    Graph Embedded Pose Clustering for Anomaly Detection. H+ o+ p( f4 @8 t3 c& L6 J  r
    paper        code7 r  d, d) h4 d( f: ~
    https://arxiv.org/abs/1912.11850        https://github.com/amirmk89/gepc
    4 a% `$ F; ?: G% k# u: e我们提出了一种用于人类行为异常检测的新方法。我们的方法直接适用于可以从输入视频序列计算的人体姿势图。这使得分析独立于扰动参数,如视点或照明。我们将这些图映射到一个潜在空间并将它们聚类。然后,每个操作都由其对每个聚类的软赋值来表示。这为数据提供了一种“词袋”表示,其中每个动作都由其与一组基本动作词的相似性来表示。然后,我们使用基于狄利克雷过程的混合物,这对于处理比例数据(例如我们的软赋值向量)很有用,以确定一个动作是否正常。
    1 E% n$ R' u* A4 y, ^, U6 ?+ p
    8 G, ^2 b, `+ Y首先,我们对输入数据使用人体姿态检测器。这抽象了问题,并防止下一步处理诸如视点或照明变化等有害参数。人的行为被表示为时空图,我们将其嵌入(第3.1、3.2小节)并聚类(第3.3小节)到一些潜在空间中。现在,每个动作都表示为一组基本动作的软分配向量。这抽象了动作的基本类型(即细粒度或粗粒度),从而进入学习其分布的最后阶段。我们用于学习软分配向量分布的工具是Dirichlet过程混合(第3.4小节),我们将模型拟合到数据中。然后使用该模型确定动作是否正常。
    ! O. B2 u4 j9 B6 k. t( K- A6 q0 T+ G, Z8 G- O% }
    图的每个节点对应于一个关键点、一个身体关节,每个边表示两个节点之间的某种关系。 存在许多"关键点关系",如解剖学上定义的物理关系(例如,左手腕和肘部连接)和由运动定义的动作关系,这些运动往往在特定动作的上下文中高度相关(例如,跑步时左右膝盖倾向于朝相反方向移动)。图的方向来自于这样一个事实,即一些关系是在优化过程中学习的,并且不是对称的。这种表示的一个好处是紧凑,这对于高效的视频分析非常重要。! D5 o9 o* H/ o6 Z  K, u  M
    为了在时间上扩展,将从视频序列中提取的姿势关键点表示为姿势图的时间序列。 时间姿势图是人体关节位置的时间序列。时域邻接可以类似地通过连接连续帧中的关节来定义,允许我们利用姿势图序列的空间和时间维度执行图卷积运算
    " Q. W7 l1 S, S( F2 a1 }9 V
    / R5 Y+ r& A  I. n3 A* f/ k我们提出了一种基于深度时态图自动编码器的结构,用于嵌入时态姿态图。 基于图2所示ST-GCN的基本块设计,我们将基本GCN算子替换为新的空间注意力图卷积,如下所示。
    + m9 {8 c6 w7 y9 K3 H! b( @
    7 L  ]( ?5 Y/ U) Q$ L" ~3.2. Spatial Attention Graph Convolution2 ^3 f3 f, m4 P; f) W4 f: a
    我们提出了一个新的图算子,如图3所示,它使用三种类型的邻接矩阵:静态、全局学习和推断(基于注意力)。每个邻接类型使用单独的权重应用其自己的GCN。' z, V. ?  Y, D
    + L/ S- s& D4 s4 a7 z
    GCN的输出按通道维度堆叠。采用1×1卷积作为加权叠加输出的可学习缩减度量,并提供所需的输出信道数。9 H/ @8 o' o. H( o3 u# G

    * ~3 I- H5 R4 W9 g+ w  h. Q& l三个邻接矩阵捕捉了模型的不同方面:
    7 E& R$ }5 N# t* V: \(i)使用身体部位连通性作为优先于节点关系,使用静态邻接矩阵表示。) t6 x  i# q* c+ Y4 x# X
    (ii)由全局邻接矩阵捕获的数据集级关键点关系,以及
    3 |1 m. n" O4 C/ n" S# w( Z(iii)由推断邻接矩阵获取的样本特定关系。最后,可学习约简度量对不同的输出进行加权
    * v  b$ f$ e( e9 e0 M1 a$ Y! A% j' A! v' W# G

    4 ~; s' l1 I4 O# t5 h; z后续段落介绍了静态、全局学习和推断的邻接矩阵的设置方法,即图3中的A,B和C,在此略过。( Q) d% ^1 d. |" ]  `' C
    3.3. Deep Embedded Clustering
    9 M8 s5 R7 l, c$ g) i为了构建我们的底层动作词典,我们采用训练集样本,并将它们联合嵌入和聚类到一些潜在空间中。然后,每个样本由其分配给每个底层聚类的概率表示。选择目标是为了提供不同的潜在集群,这些集群上存在动作。
    4 Y- L/ O; G5 B4 g  {4 z& ]9 [- J1 c
    我们采用了深嵌入聚类的概念[32],用我们的ST-GCAE架构对时间图进行聚类。所提出的聚类模型由编码器、解码器和软聚类层三部分组成。
    ' [& L( r; v4 s! W# x3 q
    7 i* L& l- O( i. m. B& O具体地说,我们的ST-GCAE模型保持了图的结构,但使用了较大的时间步长和不断增加的通道数来将输入序列压缩为潜在向量。解码器使用时间上采样层和额外的图卷积块,用于逐渐恢复原始信道计数和时间维度。
    $ R) H# j9 i4 ~3 @
    7 I/ }4 w' `/ x+ |0 ~8 X! }9 _" ?ST-GCAE的嵌入是数据聚类的起点。在我们的聚类优化阶段,对基于重构的初始嵌入进行微调,以达到最终的聚类优化嵌入。/ v3 y- K& T' W1 ^0 c: U

    0 _0 v+ @$ F3 `# S符号        表示# c$ ^" b& B  Q8 V6 H* G
    x i x_ix " c% ]# s8 y- f) K  n3 d
    i$ S$ `; E: Y$ j; |
    * I! t! A) R5 [. n$ T, M* c
            输入示例: {" U) @7 f3 W6 E# S2 m+ C
    z i z_iz
    ! ^4 i# g- y$ M! Ki
    4 a" v/ d* Q' l0 Y( U4 e- l, C
    & `7 z' S  a/ d1 C         编码器的潜在嵌入
    ; G  P) v4 s$ d" ~( [5 {8 hy i y_iy
    + U$ `2 I6 S# {i
    7 X) o' p1 Q$ @9 y' _" o  L
    . m2 U5 e) Z. B1 t5 x. U9 W         使用聚类层计算的软聚类分配
    3 m2 m- t" x0 t0 D- k+ x+ GΘ ΘΘ        聚类层的参数& N+ F# }! V' ]/ d9 Y
    p i k p_{ik}p
    & T" x, g" u! k; o9 i6 Fik
    + [+ H6 v4 L1 ^8 V" F0 G
    3 P# K7 `0 b. G         probability for the i-th sample to be assigned to the k-th cluster$ ^8 y6 b( _7 J# \: ?  \/ E& Q

    8 j& K- v5 n/ ?# A; y$ ]) D6 D8 ^* k  _# C
    我们采用[32]提出的聚类目标和优化算法。聚类目标是最小化当前模型概率聚类预测P和目标分布Q之间的KL散度:
    8 Z+ s- b$ Z; [7 M6 T* b6 d1 i( ?8 \3 a4 s# o" N6 c# p
    # a" G, J* f5 p: S/ L: f+ I
    目标分布旨在通过标准化和将每个值推到更接近0或1的值来加强当前的群集分配。反复应用将P转换为Q的函数将最终导致硬分配向量。使用以下等式计算目标分布的每个成员:
    ! z; C& M( }0 c7 w) H$ C! `/ ?) a7 i6 [) F1 c

    + b+ y5 y. c0 m5 t: p5 e/ d聚类层由为编码训练集计算的K均值质心初始化。优化以期望最大化(EM)的方式进行。% g( E! U2 n# h+ m" g, c6 E( G
    在期望步骤期间,整个模型是固定的,并且目标分布Q被更新。在最大化阶段,优化模型以最小化聚类损失Lcluster。
    ' u' ^" i$ Q& O6 q/ [% t, o
    " P2 Z1 U; j% A9 r9 ?9 _3 u( ?9 j3.4. Normality Scoring
      q, P5 v$ k. C* G5 E( [( Q3 `) f3 _该模型支持两种类型的多模分布。一个是集群分配级别;另一个是在软分配向量级别。例如,一个动作可能被分配给多个集群(集群级分配),导致多模式软分配向量。
    ) O( C: G! i% h软分配向量本身(捕获动作)也可以通过多模态分布建模。
    , ~6 j" ~4 s2 v  S7 {$ {$ K2 r! S( l6 I, x
    Dirichlet过程混合模型(DPMM)是评估比例数据分布的一种有效方法。它满足我们所需的设置:(i)估计(拟合)阶段,在此阶段,一组分布参数为评估,和(ii)推理阶段,为每个嵌入样本使用拟合模型。彻底的Blei和Jordan[4]给出了该模型的概述。
    5 U% v0 x. G5 G
    / o$ ~& I) v9 g/ tDirichlet过程混合模型(DPMM)是评估比例数据分布的有效方法。它符合我们要求的设置:( e4 F$ K5 n- m- _' t- N8 q
    (i) 估计(拟合)阶段,在此期间评估一组分布参数,以及
    " u. J8 Y7 o0 V0 C, b: e(ii)推理阶段,使用拟合模型为每个嵌入样本提供分数。Blei和Jordan[4]对模型进行了全面概述。
    ( G: f+ g8 N" R: J# d) [9 E# i% ]5 P4 K
    DPMM是单峰Dirichlet分布的常见混合扩展,并使用Dirichllet过程,这DirichletDistribution的无限维扩展。该模型是多模态的,能够将每个模式捕获为混合成分。拟合模型具有多个模式,每个模式表示对应于一个正常行为的一组比例。在测试时,使用拟合模型通过其对数概率对每个样本进行评分。[4,8]中提供了关于DPMM使用的进一步解释和讨论。
    ! }& m! k, r4 z+ m7 P# p% q0 N) k  h# H' W" C2 x, F7 d
    3.5. Training
    ) V4 R" F/ c) ?/ A+ o7 W该模型的训练阶段包括两个阶段,一个是自动编码器的预训练阶段,其中网络的聚类分支保持不变,另一个是微调阶段,其中嵌入和聚类都得到优化。具体而言:9 r& }; G- q  h% }

    9 W4 w; S1 X- F' W' WPre-Training: 该模型通过最小化重建损失(表示为Lrec)来学习编码和重建序列,Lrec是原始瞬时位姿图和ST-GCAE重建的位姿图之间的L2损失
    + [, h# R2 P& ~5 w+ Y& _7 V$ R+ V, x$ E/ L  i: _% O
    Fine-Tuning:
    0 @- C: U5 e1 [( V3 t该模型优化了由重建损失和聚类损失组成的组合损失函数。  b# p- |" P. k2 h# I! A
    进行优化,使得聚类层优化为w.r.t.Lcluster,解码器优化为w.r.t.Lrec,编码器优化为w.r.t.两者。
    * f( q' ~) ]/ M  B. n2 ?* w% P集群层的初始化是通过Kmeans完成的。如[9]所示,当编码器针对这两种损失进行优化时,解码器保持不变,并充当正则化器,以保持编码器的嵌入质量。9 b) V! P& D0 M1 ]. A
    本阶段的综合损失为:+ J/ A! F& x8 Z. k) K; f
    ! @! l* j& E5 ]1 W( `8 ~% v
    6 V+ {& f' w9 x; C1 t* f" I! E
    - R$ |' R7 [! T) d: F6 E$ V
    实现细节
    5 c' I% t) {: v; s! j/ Q" x6 @. m2 g( }# |4 f

    3 [5 _+ s, ~/ M' z
    ; Z7 |: g9 k0 H8 o6 A8 @5 ~def calc_reg_loss(model, reg_type='l2', avg=True):; o7 O" ~4 O2 c9 @; x
        reg_loss = None
    & }0 p( h( Z+ r. x3 @; i    parameters = list(param for name, param in model.named_parameters() if 'bias' not in name)
    5 F0 n( d( p2 B4 @    num_params = len(parameters)
    ; e( i" j, }6 ~+ |" Q    if reg_type.lower() == 'l2':
    $ \+ ]2 U/ L$ ~        for param in parameters:
    # Z( b" m- q; b+ g$ g4 F            if reg_loss is None:
    " a: N) v% E( N0 K                reg_loss = 0.5 * torch.sum(param ** 2)
    6 A6 h0 u( v' m; i7 E! @            else:
    0 Q, }% u: ]5 O                reg_loss = reg_loss + 0.5 * param.norm(2) ** 2. y7 u  a. v! A: I' J8 n

    $ Y, Y8 a( x, c# Z* I        if avg:* S# o8 Z: x. ^6 ^
                reg_loss /= num_params6 |8 l/ x% o$ V
            return reg_loss6 ~  y5 M: z9 Z+ [8 ^. e( I- l
        else:
      ^4 V/ U6 }# n6 d        return torch.tensor(0.0, device=model.device)
    # y4 q# `9 G8 x( I1
    + r0 [& h+ j- H0 f- \& n2
    ( q' l% f0 ~, b  l9 ^0 }3
      A8 Z7 W& C/ v3 A4 x40 L; d1 k9 Z/ i/ L* ?
    5
    , V! c' {7 v5 n4 v' @. d: k6, j+ Q# \$ l# g' C
    7
    0 z# Z7 [- t" {4 B! s8
    2 b& p2 q- b- M6 t( L$ b2 B* Q9
    / t2 v; t2 i) h4 O: x5 ~: @* s% n10
    ( j( ]2 Q9 R; l% |6 R11
    ' H2 k2 x0 B1 H6 ^& a12
    4 [% P4 C' W6 a' v3 k8 a4 f0 s13) o1 f) y0 T- t( l+ |8 B& }, w
    14, I! ^  p3 t* J
    15
    % P- E3 I' W' `( \( d0 z16) ]/ O0 W( f% d7 P. K
      I3 N* h% o2 N$ N5 N

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

    . G# |+ X8 a, U/ w
    zan
    转播转播0 分享淘帖0 分享分享0 收藏收藏0 支持支持0 反对反对0 微信微信
    您需要登录后才可以回帖 登录 | 注册地址

    qq
    收缩
    • 电话咨询

    • 04714969085
    fastpost

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

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

    蒙公网安备 15010502000194号

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

    GMT+8, 2025-8-15 02:25 , Processed in 1.043177 second(s), 51 queries .

    回顶部