QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 3044|回复: 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
    8 C8 d9 B3 o' J8 J# B
    5 }- e/ u/ H5 `5 C; j骨架图算法# l3 g# y/ j, M8 p

    ; Z( u* B3 t7 j; i2 q; L
    : f7 c# n, J3 n- uGraph Embedded Pose Clustering for Anomaly Detection! {- T8 e6 Z% J
    paper        code2 U: b+ w5 c. n3 K) i
    https://arxiv.org/abs/1912.11850        https://github.com/amirmk89/gepc
      B% e- ]5 @7 a, j5 Z我们提出了一种用于人类行为异常检测的新方法。我们的方法直接适用于可以从输入视频序列计算的人体姿势图。这使得分析独立于扰动参数,如视点或照明。我们将这些图映射到一个潜在空间并将它们聚类。然后,每个操作都由其对每个聚类的软赋值来表示。这为数据提供了一种“词袋”表示,其中每个动作都由其与一组基本动作词的相似性来表示。然后,我们使用基于狄利克雷过程的混合物,这对于处理比例数据(例如我们的软赋值向量)很有用,以确定一个动作是否正常。
    1 d: C" W4 e, d. {6 J- T( K4 y& V) x" [& g# H- e2 W
    首先,我们对输入数据使用人体姿态检测器。这抽象了问题,并防止下一步处理诸如视点或照明变化等有害参数。人的行为被表示为时空图,我们将其嵌入(第3.1、3.2小节)并聚类(第3.3小节)到一些潜在空间中。现在,每个动作都表示为一组基本动作的软分配向量。这抽象了动作的基本类型(即细粒度或粗粒度),从而进入学习其分布的最后阶段。我们用于学习软分配向量分布的工具是Dirichlet过程混合(第3.4小节),我们将模型拟合到数据中。然后使用该模型确定动作是否正常。- w3 `# I/ l/ L4 j/ {

      N; Y9 a6 U+ e( [4 |5 [图的每个节点对应于一个关键点、一个身体关节,每个边表示两个节点之间的某种关系。 存在许多"关键点关系",如解剖学上定义的物理关系(例如,左手腕和肘部连接)和由运动定义的动作关系,这些运动往往在特定动作的上下文中高度相关(例如,跑步时左右膝盖倾向于朝相反方向移动)。图的方向来自于这样一个事实,即一些关系是在优化过程中学习的,并且不是对称的。这种表示的一个好处是紧凑,这对于高效的视频分析非常重要。
    3 G0 i7 ?4 w1 ]% I6 ~为了在时间上扩展,将从视频序列中提取的姿势关键点表示为姿势图的时间序列。 时间姿势图是人体关节位置的时间序列。时域邻接可以类似地通过连接连续帧中的关节来定义,允许我们利用姿势图序列的空间和时间维度执行图卷积运算$ x( a" \7 D  U- B) H: l3 b' v

    " c  p& v! B* g7 m- D3 N) F我们提出了一种基于深度时态图自动编码器的结构,用于嵌入时态姿态图。 基于图2所示ST-GCN的基本块设计,我们将基本GCN算子替换为新的空间注意力图卷积,如下所示。# q9 G# |# ^5 Q9 w, {5 r
    / M" M7 H+ p, k" o
    3.2. Spatial Attention Graph Convolution* N+ V: O, y4 S3 f) U
    我们提出了一个新的图算子,如图3所示,它使用三种类型的邻接矩阵:静态、全局学习和推断(基于注意力)。每个邻接类型使用单独的权重应用其自己的GCN。" _2 e& m* _2 T' Z

    / E( p) v$ Y) s9 R- x. L& [GCN的输出按通道维度堆叠。采用1×1卷积作为加权叠加输出的可学习缩减度量,并提供所需的输出信道数。* G; V3 a) t$ h% v0 T
    ; M! Y) n2 L8 D) J: e0 o4 z
    三个邻接矩阵捕捉了模型的不同方面:
    ( b, r( i) v0 H) Q(i)使用身体部位连通性作为优先于节点关系,使用静态邻接矩阵表示。
    ; b$ j- Y% ^4 h1 h8 m% R(ii)由全局邻接矩阵捕获的数据集级关键点关系,以及
    $ N9 K" g0 W4 e/ N5 _(iii)由推断邻接矩阵获取的样本特定关系。最后,可学习约简度量对不同的输出进行加权
    % R) y/ |; f8 M4 N; ^6 A9 R
    ! y$ V# M6 o2 Z: \4 M5 d2 L7 r: p* ?9 Q( t
    后续段落介绍了静态、全局学习和推断的邻接矩阵的设置方法,即图3中的A,B和C,在此略过。
    ) T2 {, f6 z2 z. s9 F3.3. Deep Embedded Clustering% q: P) H9 A/ ]( y9 E3 }8 C/ V
    为了构建我们的底层动作词典,我们采用训练集样本,并将它们联合嵌入和聚类到一些潜在空间中。然后,每个样本由其分配给每个底层聚类的概率表示。选择目标是为了提供不同的潜在集群,这些集群上存在动作。
    ( `4 J9 r1 \2 Z7 |, k# j; U4 [6 X# N5 c' J6 M
    我们采用了深嵌入聚类的概念[32],用我们的ST-GCAE架构对时间图进行聚类。所提出的聚类模型由编码器、解码器和软聚类层三部分组成。& `! D+ R8 J+ c2 \
    6 [- ^! D$ ?5 w. ~$ ~5 I
    具体地说,我们的ST-GCAE模型保持了图的结构,但使用了较大的时间步长和不断增加的通道数来将输入序列压缩为潜在向量。解码器使用时间上采样层和额外的图卷积块,用于逐渐恢复原始信道计数和时间维度。
    6 Z2 m3 g1 ]  k3 ]) m) c4 l% n2 Q
    ' x3 ~# p6 [2 H) X# y) d* P( UST-GCAE的嵌入是数据聚类的起点。在我们的聚类优化阶段,对基于重构的初始嵌入进行微调,以达到最终的聚类优化嵌入。$ m3 ?" K! O- K! l2 G( D$ T

    ) S: i; f$ e8 Z" M& V) d符号        表示
    9 N, L- i0 j  A! i. D4 F# h' V- Tx i x_ix / t! |* \- Z( r9 g$ D2 R4 A
    i3 C6 }8 d/ b' r& w3 J2 M

    & }% H6 [- N4 @% o         输入示例6 y4 S' L6 B' i; D: Y! _
    z i z_iz 1 T' I3 H! \1 K! J, C
    i  _, O9 E% e3 z: U

      d: s! \- I& m; C% m         编码器的潜在嵌入
    3 A; {6 y8 h1 B3 |8 r. h" f' @. uy i y_iy 9 p$ d; H) l9 T8 o! |& ^
    i
    * @; `; \& U5 U: K, P8 K6 w3 J$ k. u* H1 a8 Y" w& [/ V
            使用聚类层计算的软聚类分配, O" o. g4 Z; l1 J* V( @
    Θ ΘΘ        聚类层的参数2 ?% \( l/ N- Y$ F6 x
    p i k p_{ik}p 8 c6 [+ [! N7 V# O2 N1 H7 d
    ik& q- d0 ]0 z3 P  j* B8 f

    + v9 N& O0 M$ H         probability for the i-th sample to be assigned to the k-th cluster
    & M6 Q6 t% Y( g
    7 n* Y# M/ {9 ]" F4 _
    # j$ j5 M* |0 j9 Q, G我们采用[32]提出的聚类目标和优化算法。聚类目标是最小化当前模型概率聚类预测P和目标分布Q之间的KL散度:
    + P4 g1 g# \5 V/ [  M4 L! g' e" y; d/ A

    ; r/ Y5 Y7 e+ V' @9 I0 P( \目标分布旨在通过标准化和将每个值推到更接近0或1的值来加强当前的群集分配。反复应用将P转换为Q的函数将最终导致硬分配向量。使用以下等式计算目标分布的每个成员:2 `1 r# m  M" s% {3 ^* }& S! {
    ! y- G; {2 w0 k5 q

    * G9 S9 w' x+ @# u聚类层由为编码训练集计算的K均值质心初始化。优化以期望最大化(EM)的方式进行。
    ' F+ ?( s* ^6 K7 G7 ~在期望步骤期间,整个模型是固定的,并且目标分布Q被更新。在最大化阶段,优化模型以最小化聚类损失Lcluster。: Q7 K- |. t2 T, I

    ' ]8 u8 ?1 }- L6 F3.4. Normality Scoring
    * \7 j& [5 h( a, \' g6 J# h该模型支持两种类型的多模分布。一个是集群分配级别;另一个是在软分配向量级别。例如,一个动作可能被分配给多个集群(集群级分配),导致多模式软分配向量。
    - p  C4 `$ d% P$ M软分配向量本身(捕获动作)也可以通过多模态分布建模。! B% _2 Q# r8 D9 r
    ' d' F$ r+ r7 Q2 k+ M+ [  l
    Dirichlet过程混合模型(DPMM)是评估比例数据分布的一种有效方法。它满足我们所需的设置:(i)估计(拟合)阶段,在此阶段,一组分布参数为评估,和(ii)推理阶段,为每个嵌入样本使用拟合模型。彻底的Blei和Jordan[4]给出了该模型的概述。" P" M# Z0 G2 J( p3 W4 l

    ! j5 m1 ?( p7 D% u0 qDirichlet过程混合模型(DPMM)是评估比例数据分布的有效方法。它符合我们要求的设置:6 b& C1 B( Q( ~( @/ P/ N
    (i) 估计(拟合)阶段,在此期间评估一组分布参数,以及3 g  Z, k6 _/ V/ H1 l* }. @
    (ii)推理阶段,使用拟合模型为每个嵌入样本提供分数。Blei和Jordan[4]对模型进行了全面概述。
    1 S$ i* c# P: e1 ?# O8 C9 W- N  m8 ^3 U3 e  @8 g3 ^
    DPMM是单峰Dirichlet分布的常见混合扩展,并使用Dirichllet过程,这DirichletDistribution的无限维扩展。该模型是多模态的,能够将每个模式捕获为混合成分。拟合模型具有多个模式,每个模式表示对应于一个正常行为的一组比例。在测试时,使用拟合模型通过其对数概率对每个样本进行评分。[4,8]中提供了关于DPMM使用的进一步解释和讨论。
    0 K! @& v* C+ p1 Y
    ! R4 |, k0 {' ?( v7 K3.5. Training  A/ B* Y/ H3 p% i' A
    该模型的训练阶段包括两个阶段,一个是自动编码器的预训练阶段,其中网络的聚类分支保持不变,另一个是微调阶段,其中嵌入和聚类都得到优化。具体而言:
    1 n4 p' z0 o0 e: B/ a4 b
    # L# o+ i( Q1 U! w  YPre-Training: 该模型通过最小化重建损失(表示为Lrec)来学习编码和重建序列,Lrec是原始瞬时位姿图和ST-GCAE重建的位姿图之间的L2损失# Y/ h! t% g  _( p: X. `  E
    ( ^) u" V' }7 c7 l: J
    Fine-Tuning:
    1 H: N! i- o4 k' }$ a2 O0 A2 r该模型优化了由重建损失和聚类损失组成的组合损失函数。8 K; i2 H/ L. D) G4 `4 H
    进行优化,使得聚类层优化为w.r.t.Lcluster,解码器优化为w.r.t.Lrec,编码器优化为w.r.t.两者。% n9 O* E( `- Y5 f  r2 D" G
    集群层的初始化是通过Kmeans完成的。如[9]所示,当编码器针对这两种损失进行优化时,解码器保持不变,并充当正则化器,以保持编码器的嵌入质量。5 O! s+ D) ^; Q9 L' z9 i
    本阶段的综合损失为:
    & u, V4 Y: R! {/ `+ P9 e7 A! \- H; M3 z9 Z- m" E; c

    * [$ I, z* ^/ U9 P; u0 Q+ s$ X% ?7 L8 d( @0 s$ \
    实现细节8 \0 e+ k2 w; n2 {. Z

    ! g: C0 n' g( n* X( u
    * _' u- T& o) Y& n% y8 h
    ) V& G8 o0 h$ E: V; H) Q* d2 J& Cdef calc_reg_loss(model, reg_type='l2', avg=True):
    8 r# a9 ]6 H. @% ~  D% s. r    reg_loss = None
    2 J( B# S* w1 Y8 i9 t    parameters = list(param for name, param in model.named_parameters() if 'bias' not in name)6 `5 I$ Y3 B( ]7 `
        num_params = len(parameters): y/ s( V' d5 h  l3 w! Y
        if reg_type.lower() == 'l2':8 [8 i$ u) _. u" z
            for param in parameters:5 ^' P( t$ s* y9 ?/ @. M" S/ h4 O
                if reg_loss is None:
    , R0 F6 N; G* }* j                reg_loss = 0.5 * torch.sum(param ** 2)
    $ [7 p1 t, K0 @, `6 @! {3 y$ Y            else:+ q2 l: S/ E( ^. x3 e$ j
                    reg_loss = reg_loss + 0.5 * param.norm(2) ** 2
    ' f' c8 |1 k1 F  X, o$ h
    9 R" }' m# O- p4 k% U: r  p$ d        if avg:0 `0 Z( m  w' f# K) O& g4 e
                reg_loss /= num_params8 y5 T7 u4 I  l- \* |  |% E
            return reg_loss
    " {# L  z* T, m+ e* I0 p% p    else:
    , `% C# ?! `: y7 n2 \% c        return torch.tensor(0.0, device=model.device)$ h: W  C5 J& ?, ?2 F
    10 r$ o! E+ K. V. M' K
    2
    4 C0 p; i" \3 i. b3
    6 `  U  u- w+ R- d$ Q8 B4
    0 Z4 w8 T: B' x1 T% p5
    0 K8 @( U- j* z6
    - @. c3 v% E$ c6 L7
    4 U; z. ~( g: F- h8* C( U% ?0 s2 Z
    9
    1 l, B/ H8 M6 u, f+ Y: t" G% j3 ~10
    7 \. C# h! w7 j1 \11" T5 R* X" ?% E0 p$ m% U8 J5 |$ Y# k
    12- U8 j  r- P8 ^* G7 ]' S% R, S
    13- Z1 v1 f1 Y$ }# e
    147 j6 h" d. e! i
    154 q/ S. f  u& [# v5 p; L2 n
    16# }4 ]. T6 o& _
    , w. ~9 c+ u) y9 w- g( b" z
    8 e1 u6 d2 Z( N6 O" Y( B$ U1 r
    + F4 z' x+ J" x6 {4 d

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

    回顶部