QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 3083|回复: 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
    ! I( _4 j1 a3 Z2 O4 j/ f  T) _7 \* E( A0 a0 \$ v" o
    骨架图算法+ Q7 ~0 i& [3 u- E
    ! J+ }+ ?$ b  p' i3 ?+ A/ v  K
      D6 F7 b. i* |+ z8 r
    Graph Embedded Pose Clustering for Anomaly Detection
    ; `& K/ \" G* Lpaper        code7 _* ?* n- Y7 |. b% r# J- w
    https://arxiv.org/abs/1912.11850        https://github.com/amirmk89/gepc
    + [3 q* _2 P" z' I% u! H6 g9 J5 H* v我们提出了一种用于人类行为异常检测的新方法。我们的方法直接适用于可以从输入视频序列计算的人体姿势图。这使得分析独立于扰动参数,如视点或照明。我们将这些图映射到一个潜在空间并将它们聚类。然后,每个操作都由其对每个聚类的软赋值来表示。这为数据提供了一种“词袋”表示,其中每个动作都由其与一组基本动作词的相似性来表示。然后,我们使用基于狄利克雷过程的混合物,这对于处理比例数据(例如我们的软赋值向量)很有用,以确定一个动作是否正常。
    # N0 C) I3 p' `% \8 k& \) X4 B' s$ Y- m* z
    首先,我们对输入数据使用人体姿态检测器。这抽象了问题,并防止下一步处理诸如视点或照明变化等有害参数。人的行为被表示为时空图,我们将其嵌入(第3.1、3.2小节)并聚类(第3.3小节)到一些潜在空间中。现在,每个动作都表示为一组基本动作的软分配向量。这抽象了动作的基本类型(即细粒度或粗粒度),从而进入学习其分布的最后阶段。我们用于学习软分配向量分布的工具是Dirichlet过程混合(第3.4小节),我们将模型拟合到数据中。然后使用该模型确定动作是否正常。! K) {3 D! x  \4 r! ]0 l3 F
    4 |, n+ C7 y0 E+ r( ~, z/ n
    图的每个节点对应于一个关键点、一个身体关节,每个边表示两个节点之间的某种关系。 存在许多"关键点关系",如解剖学上定义的物理关系(例如,左手腕和肘部连接)和由运动定义的动作关系,这些运动往往在特定动作的上下文中高度相关(例如,跑步时左右膝盖倾向于朝相反方向移动)。图的方向来自于这样一个事实,即一些关系是在优化过程中学习的,并且不是对称的。这种表示的一个好处是紧凑,这对于高效的视频分析非常重要。. B. u) g! ~+ _3 ]
    为了在时间上扩展,将从视频序列中提取的姿势关键点表示为姿势图的时间序列。 时间姿势图是人体关节位置的时间序列。时域邻接可以类似地通过连接连续帧中的关节来定义,允许我们利用姿势图序列的空间和时间维度执行图卷积运算5 }# e7 N0 w! A! Q) g1 i4 J, n" Q

    7 X& B- s1 F$ @% ~- n9 H& @# e我们提出了一种基于深度时态图自动编码器的结构,用于嵌入时态姿态图。 基于图2所示ST-GCN的基本块设计,我们将基本GCN算子替换为新的空间注意力图卷积,如下所示。* K0 a$ }6 e) m2 v
    2 J, \+ Z6 T4 i, C0 q- ?7 ^$ g; j
    3.2. Spatial Attention Graph Convolution
    # d3 q1 c. P* j( k) `% W我们提出了一个新的图算子,如图3所示,它使用三种类型的邻接矩阵:静态、全局学习和推断(基于注意力)。每个邻接类型使用单独的权重应用其自己的GCN。
    & x/ }$ I: m8 B0 n1 N- h- ]+ y
    ! X* ~1 j8 J* U# d. |6 \- p0 L1 LGCN的输出按通道维度堆叠。采用1×1卷积作为加权叠加输出的可学习缩减度量,并提供所需的输出信道数。1 R% i8 U. B% X' B$ E, C

    : b) N( ~" z0 t  q! H0 J3 u# t三个邻接矩阵捕捉了模型的不同方面:
    2 v9 i4 }% v9 s6 s(i)使用身体部位连通性作为优先于节点关系,使用静态邻接矩阵表示。  x) B# A  J  `; ?5 ~3 b( H
    (ii)由全局邻接矩阵捕获的数据集级关键点关系,以及
    : b, H# {: {- |3 {: a(iii)由推断邻接矩阵获取的样本特定关系。最后,可学习约简度量对不同的输出进行加权
    6 s8 ]8 l# B+ `: k
    " P2 F0 Q0 E% R3 H
    - j: u4 j6 \8 I0 V后续段落介绍了静态、全局学习和推断的邻接矩阵的设置方法,即图3中的A,B和C,在此略过。6 b! w; T! W" ?3 m
    3.3. Deep Embedded Clustering
    4 j( V0 W' d: G为了构建我们的底层动作词典,我们采用训练集样本,并将它们联合嵌入和聚类到一些潜在空间中。然后,每个样本由其分配给每个底层聚类的概率表示。选择目标是为了提供不同的潜在集群,这些集群上存在动作。: o: h9 w2 L, \! Z; A: F2 M8 G

    1 n& ?% D1 a. I" B我们采用了深嵌入聚类的概念[32],用我们的ST-GCAE架构对时间图进行聚类。所提出的聚类模型由编码器、解码器和软聚类层三部分组成。
    ' F' N* |; ]4 D/ f) y6 o4 s: v: K1 f3 Y7 e% Z) h7 \
    具体地说,我们的ST-GCAE模型保持了图的结构,但使用了较大的时间步长和不断增加的通道数来将输入序列压缩为潜在向量。解码器使用时间上采样层和额外的图卷积块,用于逐渐恢复原始信道计数和时间维度。
    3 H; j* J* ], T# j. N6 G/ j" z$ X; [3 P
    ST-GCAE的嵌入是数据聚类的起点。在我们的聚类优化阶段,对基于重构的初始嵌入进行微调,以达到最终的聚类优化嵌入。/ W8 }* e9 V1 R7 E) w
    1 e2 W' {; s# ~* X  A/ c0 b
    符号        表示+ a: k1 ~! _% @( a3 U  J
    x i x_ix , r  G' v$ A4 d5 ?
    i
    7 i1 S; r2 e0 O# r
    / L4 ?4 o+ h# i/ M/ l* P, I         输入示例
    - M) P! N: j8 A- h9 x& ~" Jz i z_iz
    ' z8 ?$ d; D* `9 ]i
    9 s7 k9 E' P  l0 I3 S1 |
    1 \( o- {9 ^8 w$ O         编码器的潜在嵌入
      f0 Z2 w5 y* f( z% dy i y_iy $ o- [: b' r- H4 u
    i
    . p; F& @* p0 \+ T; R% ^
    # a+ f# l8 [& l, R+ T2 x- q         使用聚类层计算的软聚类分配
    ! x7 c  |- n' r6 ^( E* p. BΘ ΘΘ        聚类层的参数
    0 F4 G+ @) e5 R' j' \1 o4 Zp i k p_{ik}p
    8 X8 V. m6 o& ~ik
    # l1 K' u$ I4 O, p8 ]. @  D, ~3 G$ \
            probability for the i-th sample to be assigned to the k-th cluster
    ; z; k: t6 a7 {" l) {5 H! b1 W% }1 E7 |5 m, l0 x
    5 r# q; @# X% ^2 Z, ~
    我们采用[32]提出的聚类目标和优化算法。聚类目标是最小化当前模型概率聚类预测P和目标分布Q之间的KL散度:
    * ]; o4 k$ g4 I* F% c. P' Y8 M% v, F& Q
    ! J, I' _: a! i4 E1 R6 ^5 ]
    目标分布旨在通过标准化和将每个值推到更接近0或1的值来加强当前的群集分配。反复应用将P转换为Q的函数将最终导致硬分配向量。使用以下等式计算目标分布的每个成员:* Y1 @) H; C- g: A5 F5 T
    5 n. F% q  i: M) E

    % o+ [8 m6 {, @. L, E聚类层由为编码训练集计算的K均值质心初始化。优化以期望最大化(EM)的方式进行。
    4 H+ k. y, c6 I7 |$ e在期望步骤期间,整个模型是固定的,并且目标分布Q被更新。在最大化阶段,优化模型以最小化聚类损失Lcluster。  W* {. s& W+ _! r8 M4 V

    & ]9 P4 w8 Y1 G# V& t3.4. Normality Scoring' E8 j4 C5 ]+ f+ Y( B# G2 n( c# P! \
    该模型支持两种类型的多模分布。一个是集群分配级别;另一个是在软分配向量级别。例如,一个动作可能被分配给多个集群(集群级分配),导致多模式软分配向量。: g* o% O3 f/ p& V6 S6 c
    软分配向量本身(捕获动作)也可以通过多模态分布建模。
    , l5 l# S7 W/ B- X; I; S; s% i! ~  S" B
    Dirichlet过程混合模型(DPMM)是评估比例数据分布的一种有效方法。它满足我们所需的设置:(i)估计(拟合)阶段,在此阶段,一组分布参数为评估,和(ii)推理阶段,为每个嵌入样本使用拟合模型。彻底的Blei和Jordan[4]给出了该模型的概述。2 m3 l- y8 o& Z4 r
    0 F, E2 \" Q4 U  m" `! ~
    Dirichlet过程混合模型(DPMM)是评估比例数据分布的有效方法。它符合我们要求的设置:
    2 R9 C6 A+ M7 C(i) 估计(拟合)阶段,在此期间评估一组分布参数,以及
    , ^! E5 P5 t3 T% @( E5 |. p(ii)推理阶段,使用拟合模型为每个嵌入样本提供分数。Blei和Jordan[4]对模型进行了全面概述。
    / J/ U. `% G0 p8 g2 P0 N. X
    % Y# k  B6 }1 P7 y- E  V0 k1 ]DPMM是单峰Dirichlet分布的常见混合扩展,并使用Dirichllet过程,这DirichletDistribution的无限维扩展。该模型是多模态的,能够将每个模式捕获为混合成分。拟合模型具有多个模式,每个模式表示对应于一个正常行为的一组比例。在测试时,使用拟合模型通过其对数概率对每个样本进行评分。[4,8]中提供了关于DPMM使用的进一步解释和讨论。
    , R  l6 ~, @+ p" W/ y! o
    6 s' M; f- f2 u4 P+ W, ~5 I2 t3.5. Training' Z' s3 j* U) M. b6 ]# S7 w
    该模型的训练阶段包括两个阶段,一个是自动编码器的预训练阶段,其中网络的聚类分支保持不变,另一个是微调阶段,其中嵌入和聚类都得到优化。具体而言:
    , ]6 b7 \  C. H# ?5 ?8 q- h" u0 W9 J" C% \" v0 s# r" `9 p, a
    Pre-Training: 该模型通过最小化重建损失(表示为Lrec)来学习编码和重建序列,Lrec是原始瞬时位姿图和ST-GCAE重建的位姿图之间的L2损失
    + i% A1 A% y1 ~7 s: J
    7 [- ^( \) T( m1 P4 qFine-Tuning:; I; V3 b# F  {7 N& I/ u: [- S% H' k
    该模型优化了由重建损失和聚类损失组成的组合损失函数。
    / r" k) \1 F& G  o* L( k) W进行优化,使得聚类层优化为w.r.t.Lcluster,解码器优化为w.r.t.Lrec,编码器优化为w.r.t.两者。
    " @) _+ o2 E0 ?2 w集群层的初始化是通过Kmeans完成的。如[9]所示,当编码器针对这两种损失进行优化时,解码器保持不变,并充当正则化器,以保持编码器的嵌入质量。2 o, Z" H: G# n( r3 n, O, d5 `
    本阶段的综合损失为:
    $ r9 T1 F) S* n8 r5 {- p" D( a
    2 q9 `! _# X: \5 z0 B% P) N5 s# {2 x5 h+ g% D# j

    ' f' c% C& U6 D$ p* z) D5 L1 Z1 w实现细节
    % {1 m  _: _/ i0 l. ~1 Q, Q/ ~  s8 \, m4 X( X( Y" h

    & U( A: k+ m7 g( d
    8 I8 O! V6 A* [$ edef calc_reg_loss(model, reg_type='l2', avg=True):: G+ \3 @! l% T3 C
        reg_loss = None3 {, L3 e9 M. ?7 B# E# ~6 I
        parameters = list(param for name, param in model.named_parameters() if 'bias' not in name)9 c) F; M8 t; j! }( a
        num_params = len(parameters)
    + j2 L% w* ?* K. A5 z; h# b    if reg_type.lower() == 'l2':1 o9 ?5 B: z: j* m/ R+ x9 i& M9 f
            for param in parameters:
    : T( \$ n+ A3 }            if reg_loss is None:
    8 P7 p5 d% d0 Y( F, P                reg_loss = 0.5 * torch.sum(param ** 2)
    . i& v. L( i7 m1 m            else:
    7 r) u; A5 D8 W                reg_loss = reg_loss + 0.5 * param.norm(2) ** 2
    7 n; X, @* J3 ?6 T" |, l
    % Z$ t/ _3 W& Z: O; U        if avg:+ d" h( `6 v2 |& ~5 q
                reg_loss /= num_params" l) J, D$ Y( K2 o
            return reg_loss
    ( O; ^# N3 H  D3 R+ x! ~4 ^7 W    else:
    . v& V. q8 {' \5 ~' n8 _8 W        return torch.tensor(0.0, device=model.device)( h6 v' |4 I7 r5 d! o9 X9 h1 Z
    1) H2 y! E  K' q7 E  b8 {
    2
    2 @, I, }* s" ^/ O0 r. q6 n30 X4 W& [3 |0 o; R; |5 e
    48 C2 w! A; B6 G0 z2 X$ U
    58 I; i/ b$ A1 v2 ]5 |
    6
    * J# }: W: i; _! M$ `$ c# Q7( q. s8 l$ b* e
    8
    0 T1 T5 e+ I' Z. J" G) R2 g9
    7 d7 p1 d0 r4 q10( |+ s2 J4 C- p$ f8 A# C
    11
    7 e5 _, @% ]6 X& [; M% y8 K12) W' |* p. @3 F0 i' q" r' M3 d4 Y. p
    13" z# D  K9 Y8 x0 |, E
    14# N( ]1 b9 w5 f, l& }1 ^! W. S
    15
    * O( Q  O& v9 V. o/ T, {161 U: C# k- K5 O7 W
    6 d& A6 j( I2 A5 `3 l' Y' d

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

    ! t* a- |& b" G
    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-7-28 20:08 , Processed in 0.284876 second(s), 50 queries .

    回顶部