QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 3032|回复: 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
    ! j; a' G9 t. c# ]/ Q1 l( C( y, e$ v' I1 v# E0 \/ k: {
    骨架图算法
    5 W$ l. b4 U1 g6 ^  d# r
    0 I* D- u- @* b+ m) F: D& G2 Z. e, m' ~2 f* w, b
    Graph Embedded Pose Clustering for Anomaly Detection) y1 L4 ^" I- t
    paper        code% k3 n$ u6 P! y9 v0 p0 S9 |( j
    https://arxiv.org/abs/1912.11850        https://github.com/amirmk89/gepc
    3 \$ j7 u" l3 u7 N" L2 c5 a3 ]# t我们提出了一种用于人类行为异常检测的新方法。我们的方法直接适用于可以从输入视频序列计算的人体姿势图。这使得分析独立于扰动参数,如视点或照明。我们将这些图映射到一个潜在空间并将它们聚类。然后,每个操作都由其对每个聚类的软赋值来表示。这为数据提供了一种“词袋”表示,其中每个动作都由其与一组基本动作词的相似性来表示。然后,我们使用基于狄利克雷过程的混合物,这对于处理比例数据(例如我们的软赋值向量)很有用,以确定一个动作是否正常。' i6 q% A" P0 T( b
    & h3 B' O- y1 G8 @5 q
    首先,我们对输入数据使用人体姿态检测器。这抽象了问题,并防止下一步处理诸如视点或照明变化等有害参数。人的行为被表示为时空图,我们将其嵌入(第3.1、3.2小节)并聚类(第3.3小节)到一些潜在空间中。现在,每个动作都表示为一组基本动作的软分配向量。这抽象了动作的基本类型(即细粒度或粗粒度),从而进入学习其分布的最后阶段。我们用于学习软分配向量分布的工具是Dirichlet过程混合(第3.4小节),我们将模型拟合到数据中。然后使用该模型确定动作是否正常。5 h& Q- w2 }' \5 ?! f! q5 U% n

    # l2 _1 q9 @) T, P4 g9 E$ i. r5 K图的每个节点对应于一个关键点、一个身体关节,每个边表示两个节点之间的某种关系。 存在许多"关键点关系",如解剖学上定义的物理关系(例如,左手腕和肘部连接)和由运动定义的动作关系,这些运动往往在特定动作的上下文中高度相关(例如,跑步时左右膝盖倾向于朝相反方向移动)。图的方向来自于这样一个事实,即一些关系是在优化过程中学习的,并且不是对称的。这种表示的一个好处是紧凑,这对于高效的视频分析非常重要。
    " @: B7 I5 }8 @$ _# U' f为了在时间上扩展,将从视频序列中提取的姿势关键点表示为姿势图的时间序列。 时间姿势图是人体关节位置的时间序列。时域邻接可以类似地通过连接连续帧中的关节来定义,允许我们利用姿势图序列的空间和时间维度执行图卷积运算; d3 G9 K3 C, q* m, N1 v- n

    % H  T5 v, k' H* b! C我们提出了一种基于深度时态图自动编码器的结构,用于嵌入时态姿态图。 基于图2所示ST-GCN的基本块设计,我们将基本GCN算子替换为新的空间注意力图卷积,如下所示。
    6 p6 C% q( j2 C5 N1 S
    ( q* ^) L" ]7 }$ S, N3.2. Spatial Attention Graph Convolution3 k3 V0 l2 d2 G. e
    我们提出了一个新的图算子,如图3所示,它使用三种类型的邻接矩阵:静态、全局学习和推断(基于注意力)。每个邻接类型使用单独的权重应用其自己的GCN。7 K" `' k% p- V& }- D: ?1 t2 ?

    + ?& @2 _1 i. Z  t  UGCN的输出按通道维度堆叠。采用1×1卷积作为加权叠加输出的可学习缩减度量,并提供所需的输出信道数。
    ! p5 J& O5 G1 [- R+ h( o
    2 m$ @" ^6 {# j  h三个邻接矩阵捕捉了模型的不同方面:
    $ N- K; i$ u7 [- H$ m% E(i)使用身体部位连通性作为优先于节点关系,使用静态邻接矩阵表示。
    1 J6 y/ ^+ _* l* c: c9 l( w5 B(ii)由全局邻接矩阵捕获的数据集级关键点关系,以及5 L) n" Z9 W" Y; u
    (iii)由推断邻接矩阵获取的样本特定关系。最后,可学习约简度量对不同的输出进行加权
    9 R( D# r7 z8 |; F2 M. W# s8 y7 h+ Q6 y1 i# u4 ~$ L

    6 U$ q  o% d& X( m8 U# F4 Z后续段落介绍了静态、全局学习和推断的邻接矩阵的设置方法,即图3中的A,B和C,在此略过。/ D3 r+ R9 ^4 H% U
    3.3. Deep Embedded Clustering8 x" \3 w* x0 d! j" E, V& E
    为了构建我们的底层动作词典,我们采用训练集样本,并将它们联合嵌入和聚类到一些潜在空间中。然后,每个样本由其分配给每个底层聚类的概率表示。选择目标是为了提供不同的潜在集群,这些集群上存在动作。
    ) ^/ t; f! x+ I8 ~9 ]0 F; c1 v
    ' S3 b7 e8 ^: J9 p5 [) [) l, n我们采用了深嵌入聚类的概念[32],用我们的ST-GCAE架构对时间图进行聚类。所提出的聚类模型由编码器、解码器和软聚类层三部分组成。" Q8 c8 @$ n7 \; E5 P; x

    + |# }4 R4 n0 p2 I, W3 H6 ]具体地说,我们的ST-GCAE模型保持了图的结构,但使用了较大的时间步长和不断增加的通道数来将输入序列压缩为潜在向量。解码器使用时间上采样层和额外的图卷积块,用于逐渐恢复原始信道计数和时间维度。
    8 z# ~5 N6 h/ d9 U5 [8 G7 `
    3 n5 W" _! n" r' E% s* R$ Q0 N( {ST-GCAE的嵌入是数据聚类的起点。在我们的聚类优化阶段,对基于重构的初始嵌入进行微调,以达到最终的聚类优化嵌入。1 O2 ]# ?" u6 B  U" A6 i' P' W% t

    5 `* R4 o1 [' M/ Z符号        表示
    - a# F9 X) w1 ~. Dx i x_ix ) U9 N" u0 C3 ~4 R7 q: ^
    i
    0 u% g& s0 @3 o
    ( m  o. w3 ]! V/ ]         输入示例0 U/ H, Q* d3 @; m; R2 Y2 n
    z i z_iz
    % Z, b- d* |3 ji' i7 N+ d  Q$ a3 y7 M" x

    9 G  E9 U/ E$ f0 k8 e: s4 I6 s         编码器的潜在嵌入
    2 {5 q  R) X( K# D! e- zy i y_iy 2 I" ^7 w5 Z! k6 e- X
    i
    8 }, m% L( r. R( `9 q! b& p+ ]$ ]! U
      p4 q% c- M- M0 H2 a- u" r         使用聚类层计算的软聚类分配" M+ V4 J7 q! a$ c6 j2 f" ^7 ~
    Θ ΘΘ        聚类层的参数
    . X- Q% c# ]$ f, p& a/ v. E' P* I; Ap i k p_{ik}p & o3 \9 c* ~! Z
    ik
    3 o1 P2 _9 v9 @; H9 w: Q7 b: G$ D7 V3 z2 ~9 P$ H
            probability for the i-th sample to be assigned to the k-th cluster
    ; l+ m6 \; O1 L2 g2 E0 B+ p" d& c) ~8 B

    1 J& L3 G7 d3 s5 d我们采用[32]提出的聚类目标和优化算法。聚类目标是最小化当前模型概率聚类预测P和目标分布Q之间的KL散度:+ }' r+ U/ l  j
    / Y) S4 |: c) d% M  l7 ~1 K* x# J
    2 b2 }( Y" }; k/ E
    目标分布旨在通过标准化和将每个值推到更接近0或1的值来加强当前的群集分配。反复应用将P转换为Q的函数将最终导致硬分配向量。使用以下等式计算目标分布的每个成员:, H3 i& t) |! _4 O) U
    , q+ [' Z- |* f

    9 t, w! O0 {* W/ C6 E聚类层由为编码训练集计算的K均值质心初始化。优化以期望最大化(EM)的方式进行。5 \) a. L8 @7 u4 M& r! r' b  Q  d1 ^
    在期望步骤期间,整个模型是固定的,并且目标分布Q被更新。在最大化阶段,优化模型以最小化聚类损失Lcluster。+ S; `: b5 |, o" Y' x8 d5 q

    " Q/ L, e9 o7 ~9 m3.4. Normality Scoring9 e2 {; m  |3 Q7 [: }4 a9 H/ Y2 N
    该模型支持两种类型的多模分布。一个是集群分配级别;另一个是在软分配向量级别。例如,一个动作可能被分配给多个集群(集群级分配),导致多模式软分配向量。
    1 s% Y1 I0 d# t: |6 z+ B& ~软分配向量本身(捕获动作)也可以通过多模态分布建模。
    + J5 Z# A3 H$ q- l5 W7 Q& v( J/ u
    2 |# S* l+ g# o9 |% R- L2 w7 S* Y6 ^Dirichlet过程混合模型(DPMM)是评估比例数据分布的一种有效方法。它满足我们所需的设置:(i)估计(拟合)阶段,在此阶段,一组分布参数为评估,和(ii)推理阶段,为每个嵌入样本使用拟合模型。彻底的Blei和Jordan[4]给出了该模型的概述。4 G. L9 t: Y5 j8 F3 }7 a# |- g  t
    % a, C% a. a0 \; I3 T
    Dirichlet过程混合模型(DPMM)是评估比例数据分布的有效方法。它符合我们要求的设置:
    % Z5 e2 J3 L  o, d8 A(i) 估计(拟合)阶段,在此期间评估一组分布参数,以及/ ~" K& n: B+ L/ g
    (ii)推理阶段,使用拟合模型为每个嵌入样本提供分数。Blei和Jordan[4]对模型进行了全面概述。8 C, a9 r! m+ g% I2 X

    : Z/ o' k+ u% E8 c, B, L% ADPMM是单峰Dirichlet分布的常见混合扩展,并使用Dirichllet过程,这DirichletDistribution的无限维扩展。该模型是多模态的,能够将每个模式捕获为混合成分。拟合模型具有多个模式,每个模式表示对应于一个正常行为的一组比例。在测试时,使用拟合模型通过其对数概率对每个样本进行评分。[4,8]中提供了关于DPMM使用的进一步解释和讨论。  X! i, k. |* i% g
    9 C' ?9 T" t* J: {# ]" p1 m' N( [
    3.5. Training3 h* E0 R+ w4 d- }- k
    该模型的训练阶段包括两个阶段,一个是自动编码器的预训练阶段,其中网络的聚类分支保持不变,另一个是微调阶段,其中嵌入和聚类都得到优化。具体而言:
      f! w/ z- V4 O( ?
    : m- x( b% d# U9 M) P6 BPre-Training: 该模型通过最小化重建损失(表示为Lrec)来学习编码和重建序列,Lrec是原始瞬时位姿图和ST-GCAE重建的位姿图之间的L2损失
    * e5 s9 A! _- E) i* r" d& @3 f9 {& `! `# F5 H5 }, h1 s' A; a
    Fine-Tuning:
    # }/ H4 V' o3 n/ d) n$ g. _该模型优化了由重建损失和聚类损失组成的组合损失函数。4 o  @4 M: N& ]. b$ e& a+ a0 B5 ]
    进行优化,使得聚类层优化为w.r.t.Lcluster,解码器优化为w.r.t.Lrec,编码器优化为w.r.t.两者。, K6 {1 d9 q7 q
    集群层的初始化是通过Kmeans完成的。如[9]所示,当编码器针对这两种损失进行优化时,解码器保持不变,并充当正则化器,以保持编码器的嵌入质量。3 u& ~, ~% W% ], @, f
    本阶段的综合损失为:; ]' |/ h& m- H/ r! [- ^" S. x
    * b9 {: n, u( r9 G
    & s$ E+ b: `- ]6 W' a9 E5 W; \, V
    ( P$ d8 t! z4 `5 {
    实现细节$ a+ f- ?8 J3 q  n

    / m( \! M2 [2 R
    9 f! G/ l2 L2 F4 J" x$ B7 K% L& m/ t  D$ A( c
    def calc_reg_loss(model, reg_type='l2', avg=True):7 \7 k- d5 v& s6 `
        reg_loss = None
    ) |" Q& s# h* g5 Z    parameters = list(param for name, param in model.named_parameters() if 'bias' not in name)
    # u8 x" D9 y$ r    num_params = len(parameters), e& |2 G* j6 B
        if reg_type.lower() == 'l2':2 n- f8 h* C8 v! {% P
            for param in parameters:
    4 M8 V5 G8 Y) [( _            if reg_loss is None:
    " q9 M; J2 g7 O& ^/ R                reg_loss = 0.5 * torch.sum(param ** 2)
    7 q5 u, [, i* H0 o0 K7 o. `! h            else:; r& i) L( c3 o! R3 S3 N  ?
                    reg_loss = reg_loss + 0.5 * param.norm(2) ** 2
    , ~4 ]$ k' S# h1 w4 g* a: [$ ~4 r$ |0 d: }
            if avg:
    . ^0 j) V) ~4 X6 F+ V7 M            reg_loss /= num_params: Y& v- e  C$ ^; a& Q# ~
            return reg_loss! S- ~3 ^- Y' G. u$ t
        else:
    ; I7 T( X! G* _2 k: K        return torch.tensor(0.0, device=model.device)
    ) G: q% }6 [1 S! w, K; i* [. i1
    7 t  p7 h( h1 m! `7 B! V7 L7 b2
    2 @1 W2 X" \# @1 y& A+ F33 j3 y* ^& H& x& t. T0 R
    43 Y) e% }5 I8 @9 X0 x6 n/ r0 S
    58 ]% r9 `& N/ T, G5 V
    6/ A3 T4 g, V! C% M0 R
    7
    * j; }: p& Q" v/ v$ W7 y  @, r0 [8
    ! |. V* v0 L4 I& I# n9
    ! }! @! R# b8 j. E7 p% f% i10
    0 \7 k) Q" d2 S+ I- U11  s/ h  F5 A# s5 `* p0 t6 {
    121 Y& E" j% J$ l5 Z4 m. }  t( H
    13. s6 B- K2 A+ K
    14
    3 r, [% H8 ^; @3 c. p$ d3 F15- K/ g; e6 s7 c4 W7 Y' P! t) K# ?
    16
    / G& F; F7 e  ], d8 M6 B4 P
    5 m& D, ^+ Y7 P  }5 m+ @
    5 b( p9 R+ q; R% i& Q: f* J. y3 ~: {+ J) l+ V, E" F. m3 R

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

    : f" H2 V" ~! Q: |! e8 L
    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-10 08:57 , Processed in 0.431828 second(s), 51 queries .

    回顶部