QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 3035|回复: 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
    3 b& @2 e) ^2 m+ q
    0 b0 Y4 e, {/ n% V' a- h' A骨架图算法/ P2 |: n5 M8 E! U$ N
    $ h, A0 ]: C  O% ^2 H: N
    & G2 |- \4 G8 M8 u/ Q3 p7 R/ F. ~
    Graph Embedded Pose Clustering for Anomaly Detection
    . m  y4 k# W( z3 r0 d4 Dpaper        code
      K  q( [5 g  `, a) Q( x% A  dhttps://arxiv.org/abs/1912.11850        https://github.com/amirmk89/gepc, ]: O8 Q' l0 m& s' `+ w) p1 R) r
    我们提出了一种用于人类行为异常检测的新方法。我们的方法直接适用于可以从输入视频序列计算的人体姿势图。这使得分析独立于扰动参数,如视点或照明。我们将这些图映射到一个潜在空间并将它们聚类。然后,每个操作都由其对每个聚类的软赋值来表示。这为数据提供了一种“词袋”表示,其中每个动作都由其与一组基本动作词的相似性来表示。然后,我们使用基于狄利克雷过程的混合物,这对于处理比例数据(例如我们的软赋值向量)很有用,以确定一个动作是否正常。7 o5 Q( ~. y* y  D0 |, G

    - T! J% V  J4 E9 ~& s. N! \; {- y首先,我们对输入数据使用人体姿态检测器。这抽象了问题,并防止下一步处理诸如视点或照明变化等有害参数。人的行为被表示为时空图,我们将其嵌入(第3.1、3.2小节)并聚类(第3.3小节)到一些潜在空间中。现在,每个动作都表示为一组基本动作的软分配向量。这抽象了动作的基本类型(即细粒度或粗粒度),从而进入学习其分布的最后阶段。我们用于学习软分配向量分布的工具是Dirichlet过程混合(第3.4小节),我们将模型拟合到数据中。然后使用该模型确定动作是否正常。' A2 Z, D) Q  v1 r$ B9 _1 t5 X: D

    ; {8 u$ x! P$ Q" G+ X$ Z: g* \! K; o图的每个节点对应于一个关键点、一个身体关节,每个边表示两个节点之间的某种关系。 存在许多"关键点关系",如解剖学上定义的物理关系(例如,左手腕和肘部连接)和由运动定义的动作关系,这些运动往往在特定动作的上下文中高度相关(例如,跑步时左右膝盖倾向于朝相反方向移动)。图的方向来自于这样一个事实,即一些关系是在优化过程中学习的,并且不是对称的。这种表示的一个好处是紧凑,这对于高效的视频分析非常重要。# u. z) }. e  f6 V( E: M1 v
    为了在时间上扩展,将从视频序列中提取的姿势关键点表示为姿势图的时间序列。 时间姿势图是人体关节位置的时间序列。时域邻接可以类似地通过连接连续帧中的关节来定义,允许我们利用姿势图序列的空间和时间维度执行图卷积运算* T" o' O# z8 r/ Q

    / p0 `7 K$ d& ]9 f  F& |7 d我们提出了一种基于深度时态图自动编码器的结构,用于嵌入时态姿态图。 基于图2所示ST-GCN的基本块设计,我们将基本GCN算子替换为新的空间注意力图卷积,如下所示。
    9 s  ?5 f" c) D1 B$ s% U) J7 A0 Z" C* Y6 R4 i
    3.2. Spatial Attention Graph Convolution
    + ^! l+ \$ k5 u; S6 n我们提出了一个新的图算子,如图3所示,它使用三种类型的邻接矩阵:静态、全局学习和推断(基于注意力)。每个邻接类型使用单独的权重应用其自己的GCN。* a8 D% T% v0 c; g

    8 g# J  k6 q9 v+ S9 SGCN的输出按通道维度堆叠。采用1×1卷积作为加权叠加输出的可学习缩减度量,并提供所需的输出信道数。
    3 ]9 g6 t+ t: W! [) G& w8 X( S
    1 w+ L5 e( r" Z三个邻接矩阵捕捉了模型的不同方面:2 s- H( q, E" q! X. c
    (i)使用身体部位连通性作为优先于节点关系,使用静态邻接矩阵表示。0 a8 a% J4 o$ a, k
    (ii)由全局邻接矩阵捕获的数据集级关键点关系,以及
    $ g7 x* V& ?/ L2 N# T! G( h(iii)由推断邻接矩阵获取的样本特定关系。最后,可学习约简度量对不同的输出进行加权
    ( J2 X/ U+ R( L( M7 Y- W2 O( N3 K1 l# g9 Q, S- v5 P* O& Z, O  |

    * m0 s/ D4 Q# l后续段落介绍了静态、全局学习和推断的邻接矩阵的设置方法,即图3中的A,B和C,在此略过。
    6 g$ c) X0 I  ~/ Q7 k3.3. Deep Embedded Clustering; E- |/ u" @: X7 z& ?% v
    为了构建我们的底层动作词典,我们采用训练集样本,并将它们联合嵌入和聚类到一些潜在空间中。然后,每个样本由其分配给每个底层聚类的概率表示。选择目标是为了提供不同的潜在集群,这些集群上存在动作。
    7 l( j: e7 |( W6 |! o& @$ \, P# ~/ v& x2 n6 U! c* s& [& k' I
    我们采用了深嵌入聚类的概念[32],用我们的ST-GCAE架构对时间图进行聚类。所提出的聚类模型由编码器、解码器和软聚类层三部分组成。
    ' E6 [# M/ w: ~$ A2 H# @3 D; F) K  V% q
    具体地说,我们的ST-GCAE模型保持了图的结构,但使用了较大的时间步长和不断增加的通道数来将输入序列压缩为潜在向量。解码器使用时间上采样层和额外的图卷积块,用于逐渐恢复原始信道计数和时间维度。
    3 j' Y. c( n- t) s# @0 v- T* f0 g
    ST-GCAE的嵌入是数据聚类的起点。在我们的聚类优化阶段,对基于重构的初始嵌入进行微调,以达到最终的聚类优化嵌入。
      f. Z+ D! u4 K" C* J. L# H  h% s) W, G" J/ f, g
    符号        表示
    ) W6 m, d! B" ~x i x_ix ' {/ m1 l$ p5 q" W
    i7 |; q4 N9 ^; i

    , w9 e) e0 j$ O1 w- @  ?         输入示例
      N1 m' n% ?+ ez i z_iz
    + h8 _* N1 C  ]2 }4 f, j& i1 v, hi2 V/ ?6 y, ?3 d* o6 z9 y" \# h

      `0 P  ~+ s8 C( n( f         编码器的潜在嵌入
    0 j# p5 g" Z8 w- d. D$ E8 L0 ~y i y_iy ) @# h% v& L" m
    i0 G  o" p! }# S/ `  _* b- _3 V' E

    / |  W  H9 s, R         使用聚类层计算的软聚类分配( i- F4 n7 G6 Y8 Q5 P
    Θ ΘΘ        聚类层的参数
    3 R- L  a# m# hp i k p_{ik}p # J0 I# o7 E3 \4 Z& [3 w0 \2 d
    ik/ Z! S+ [4 Q6 L  p5 j4 g
    # N3 m# t" L9 u+ w
            probability for the i-th sample to be assigned to the k-th cluster# E& K0 C6 ~% Q, `

    # A& Q4 P- G" A# c
    9 G  W2 x' e$ P我们采用[32]提出的聚类目标和优化算法。聚类目标是最小化当前模型概率聚类预测P和目标分布Q之间的KL散度:7 ?/ ?' E& _* T0 R

    4 q+ t7 ?1 ]6 l' g2 c" _1 o: S. P+ J1 W
    目标分布旨在通过标准化和将每个值推到更接近0或1的值来加强当前的群集分配。反复应用将P转换为Q的函数将最终导致硬分配向量。使用以下等式计算目标分布的每个成员:. K7 a: o  u& K+ @) R& E2 E

    & \8 l2 `- J6 C/ _/ d, F
    9 ?5 `0 {8 I$ x5 G  t$ [8 U- Q4 l聚类层由为编码训练集计算的K均值质心初始化。优化以期望最大化(EM)的方式进行。
    5 S* n: O& E& N: x; I! ^在期望步骤期间,整个模型是固定的,并且目标分布Q被更新。在最大化阶段,优化模型以最小化聚类损失Lcluster。
    ) P. g& o" R4 u. i- }! {
    4 v0 Z% }; ?3 v, P8 h, g3.4. Normality Scoring3 y4 c. f" v; \% ~+ f
    该模型支持两种类型的多模分布。一个是集群分配级别;另一个是在软分配向量级别。例如,一个动作可能被分配给多个集群(集群级分配),导致多模式软分配向量。
    ) z! T. t  K: D/ d4 L; `5 B软分配向量本身(捕获动作)也可以通过多模态分布建模。3 q* Q4 R! G1 s4 _6 w
    # S& S- V& ?, T6 e8 V8 O9 r4 s; \& o
    Dirichlet过程混合模型(DPMM)是评估比例数据分布的一种有效方法。它满足我们所需的设置:(i)估计(拟合)阶段,在此阶段,一组分布参数为评估,和(ii)推理阶段,为每个嵌入样本使用拟合模型。彻底的Blei和Jordan[4]给出了该模型的概述。6 m, n0 x  B3 F$ L. x' X. B( z

    % S+ y4 m/ G$ F) [/ EDirichlet过程混合模型(DPMM)是评估比例数据分布的有效方法。它符合我们要求的设置:3 O6 ~; |7 W9 B2 P3 v
    (i) 估计(拟合)阶段,在此期间评估一组分布参数,以及* X" c( F) l) f# P3 L/ O
    (ii)推理阶段,使用拟合模型为每个嵌入样本提供分数。Blei和Jordan[4]对模型进行了全面概述。7 k( Z5 }0 }2 i2 ?' E

    7 ^  n. `: C/ q- k9 eDPMM是单峰Dirichlet分布的常见混合扩展,并使用Dirichllet过程,这DirichletDistribution的无限维扩展。该模型是多模态的,能够将每个模式捕获为混合成分。拟合模型具有多个模式,每个模式表示对应于一个正常行为的一组比例。在测试时,使用拟合模型通过其对数概率对每个样本进行评分。[4,8]中提供了关于DPMM使用的进一步解释和讨论。
    ' p# O4 \& T5 m+ K8 |) B1 X# P; P
    3.5. Training4 r; a+ l+ \: M8 ^; m' i/ ]- r
    该模型的训练阶段包括两个阶段,一个是自动编码器的预训练阶段,其中网络的聚类分支保持不变,另一个是微调阶段,其中嵌入和聚类都得到优化。具体而言:
    4 V4 T% ~; F3 M( t# B3 a9 P) T4 x0 @0 h  y( J3 |
    Pre-Training: 该模型通过最小化重建损失(表示为Lrec)来学习编码和重建序列,Lrec是原始瞬时位姿图和ST-GCAE重建的位姿图之间的L2损失
    ( _/ w" ]# ^2 Y6 k% C) |2 `% ^; n( w, a. j8 d
    Fine-Tuning:1 T3 K7 |! x  u, M& L% u& w
    该模型优化了由重建损失和聚类损失组成的组合损失函数。3 P, K5 `" e* r2 s- z
    进行优化,使得聚类层优化为w.r.t.Lcluster,解码器优化为w.r.t.Lrec,编码器优化为w.r.t.两者。+ R- u( Y0 K& M# r* a& j* c" r
    集群层的初始化是通过Kmeans完成的。如[9]所示,当编码器针对这两种损失进行优化时,解码器保持不变,并充当正则化器,以保持编码器的嵌入质量。, Q/ v1 t8 t& _
    本阶段的综合损失为:
    & h7 a. M2 V! K# ?; |  t! ~
    # D) K0 o3 O* E' g- z  t+ Y  H! v! ]
    8 y; b* g5 H4 f5 M8 w8 e
    实现细节
    7 R3 V& v6 z9 b# w$ O7 ]. r
    ; N6 l, a7 \  I: A, p+ i8 O
    ' S* D4 L; a: x" E, r  k9 V- a/ W3 g" L% W. `, `, f
    def calc_reg_loss(model, reg_type='l2', avg=True):
    : Q2 {2 t2 `) p2 i4 f    reg_loss = None
    5 d, R5 B- ^/ r  z# b4 O( ]! q    parameters = list(param for name, param in model.named_parameters() if 'bias' not in name)0 t1 G/ O0 \; X
        num_params = len(parameters): @" m; d6 B4 j$ C% ]
        if reg_type.lower() == 'l2':
    9 c' ~  R" `% X/ S5 b( R        for param in parameters:
    1 G4 T$ ]1 H* o- v& y! J; ~' {  Q            if reg_loss is None:
    : L2 B( K7 t* k* ]$ _5 [' ~                reg_loss = 0.5 * torch.sum(param ** 2)6 d0 s5 P; A6 T+ k- X& ?
                else:! ~( `; a6 m# J  _
                    reg_loss = reg_loss + 0.5 * param.norm(2) ** 2# Y! n8 b. A- ]$ t- K: a
    ( P* X" I; A0 H' J, V) b& v
            if avg:# O2 c6 ?  D4 v$ Q
                reg_loss /= num_params2 h0 c6 c  d/ ?1 `, a, Z( U: {1 z
            return reg_loss
    6 Q9 x* N* V' B: I: t% \3 t* N    else:
    0 ?4 t! R- T" c' x  ^+ W, r- f        return torch.tensor(0.0, device=model.device)
    / _8 z  o& L6 u$ O$ m" _5 T1" n( B- H  m/ `1 F  p8 l
    2) V8 a! Z5 J. y  t
    3; p: ~: O# e  s) R
    4
    5 l( N- @) L# x9 [8 V& h5
    6 ~5 c5 l! q6 @' V0 ?+ ], N2 J60 a' Y7 e+ t) R. U" c
    7+ r7 j% K4 x; ~6 H. o  Q6 R3 J" N$ x
    8( P* G- \  a; z7 G# f
    9, h9 i* o: o) Y, T; m0 P
    10
    , u. Z: u& j+ W7 Y- ?# B" \11# J$ T% |1 r, |# q: u- g# c$ m
    12% t0 q' i. _8 _6 ]5 j
    13' R; t+ Q0 q1 k+ B& j
    140 E6 w* A: V$ \! C9 I6 E
    158 A% F% [4 m" m  e  n7 a) I) J
    16' L% Q( C" I8 l+ F, S+ f
    0 s& t1 L; L, e) E# f
    ' f/ J" L1 T" L5 \1 P) H

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

    . [; Q; ?3 i6 }6 ?# r* r& S& C' G6 S) U) K5 c/ }+ X
    zan
    转播转播0 分享淘帖0 分享分享0 收藏收藏0 支持支持0 反对反对0 微信微信
    您需要登录后才可以回帖 登录 | 注册地址

    qq
    收缩
    • 电话咨询

    • 04714969085
    fastpost

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

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

    蒙公网安备 15010502000194号

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

    GMT+8, 2026-4-12 23:09 , Processed in 0.348069 second(s), 51 queries .

    回顶部