QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 3078|回复: 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- h9 O0 V9 ?. g. Z1 U: D
    3 x4 \1 T# R3 X; `
    骨架图算法
    + B& \! j3 |; w* ?
    + ]& Q4 l- A; f3 P
    5 A! w2 d; U. Q; Q2 K9 ^; `Graph Embedded Pose Clustering for Anomaly Detection$ l$ d8 ~+ n( w; H) O6 U  p
    paper        code" F1 s- ]: K) ~4 D& _) i
    https://arxiv.org/abs/1912.11850        https://github.com/amirmk89/gepc" Q/ O0 q7 F2 M( I8 @
    我们提出了一种用于人类行为异常检测的新方法。我们的方法直接适用于可以从输入视频序列计算的人体姿势图。这使得分析独立于扰动参数,如视点或照明。我们将这些图映射到一个潜在空间并将它们聚类。然后,每个操作都由其对每个聚类的软赋值来表示。这为数据提供了一种“词袋”表示,其中每个动作都由其与一组基本动作词的相似性来表示。然后,我们使用基于狄利克雷过程的混合物,这对于处理比例数据(例如我们的软赋值向量)很有用,以确定一个动作是否正常。
    2 L  S% M5 H( h7 i" f$ P0 E6 ^. z% |
    ! }4 Y1 ~6 U% v- I4 F4 P首先,我们对输入数据使用人体姿态检测器。这抽象了问题,并防止下一步处理诸如视点或照明变化等有害参数。人的行为被表示为时空图,我们将其嵌入(第3.1、3.2小节)并聚类(第3.3小节)到一些潜在空间中。现在,每个动作都表示为一组基本动作的软分配向量。这抽象了动作的基本类型(即细粒度或粗粒度),从而进入学习其分布的最后阶段。我们用于学习软分配向量分布的工具是Dirichlet过程混合(第3.4小节),我们将模型拟合到数据中。然后使用该模型确定动作是否正常。5 w6 O: ~! g% y/ D  z; O8 {9 E
    & D/ t/ W3 G* D3 G; q7 a
    图的每个节点对应于一个关键点、一个身体关节,每个边表示两个节点之间的某种关系。 存在许多"关键点关系",如解剖学上定义的物理关系(例如,左手腕和肘部连接)和由运动定义的动作关系,这些运动往往在特定动作的上下文中高度相关(例如,跑步时左右膝盖倾向于朝相反方向移动)。图的方向来自于这样一个事实,即一些关系是在优化过程中学习的,并且不是对称的。这种表示的一个好处是紧凑,这对于高效的视频分析非常重要。
    - t, Z2 }3 \' u- O# y) o为了在时间上扩展,将从视频序列中提取的姿势关键点表示为姿势图的时间序列。 时间姿势图是人体关节位置的时间序列。时域邻接可以类似地通过连接连续帧中的关节来定义,允许我们利用姿势图序列的空间和时间维度执行图卷积运算
    9 l8 R0 X) o1 D, ]. b6 q# Q4 N3 _0 }9 w1 {2 q% M
    我们提出了一种基于深度时态图自动编码器的结构,用于嵌入时态姿态图。 基于图2所示ST-GCN的基本块设计,我们将基本GCN算子替换为新的空间注意力图卷积,如下所示。1 B9 Z4 Y' m0 j5 f5 `6 J0 k4 j8 W

    ! q/ |1 y& i: z1 o; y( @8 i3.2. Spatial Attention Graph Convolution/ ?3 f/ \; `+ h) H% t3 _
    我们提出了一个新的图算子,如图3所示,它使用三种类型的邻接矩阵:静态、全局学习和推断(基于注意力)。每个邻接类型使用单独的权重应用其自己的GCN。
    1 L) }; M- z( o. C( i
    " p: w' a/ P& T: F2 w, l8 \' Q' Q8 \GCN的输出按通道维度堆叠。采用1×1卷积作为加权叠加输出的可学习缩减度量,并提供所需的输出信道数。5 X+ R# f2 s9 m! D0 I7 M& z

    ) v8 d6 ~& C( G: e9 w; R3 a三个邻接矩阵捕捉了模型的不同方面:
    1 j. N) z$ t! A. b9 @(i)使用身体部位连通性作为优先于节点关系,使用静态邻接矩阵表示。
    ) D2 v5 r, q7 I, s4 O(ii)由全局邻接矩阵捕获的数据集级关键点关系,以及
    $ \' q5 m- c4 f/ ~) c9 X(iii)由推断邻接矩阵获取的样本特定关系。最后,可学习约简度量对不同的输出进行加权
    5 u% N0 {  ]; O2 o8 {8 a' M, J6 p- y# e& L) J

    & w* c% r3 B9 ~/ f  \8 q& q后续段落介绍了静态、全局学习和推断的邻接矩阵的设置方法,即图3中的A,B和C,在此略过。
    7 a8 H! d( I% e" T3.3. Deep Embedded Clustering! O5 ]. N7 t, O
    为了构建我们的底层动作词典,我们采用训练集样本,并将它们联合嵌入和聚类到一些潜在空间中。然后,每个样本由其分配给每个底层聚类的概率表示。选择目标是为了提供不同的潜在集群,这些集群上存在动作。' C* a" `) c+ Z/ g1 v& |
    2 _$ q0 }0 {) q! W5 Y, `* o
    我们采用了深嵌入聚类的概念[32],用我们的ST-GCAE架构对时间图进行聚类。所提出的聚类模型由编码器、解码器和软聚类层三部分组成。
    / P5 s  E5 w, D- l, {+ v/ L
    : X+ R9 W. e! G. L1 M! ~具体地说,我们的ST-GCAE模型保持了图的结构,但使用了较大的时间步长和不断增加的通道数来将输入序列压缩为潜在向量。解码器使用时间上采样层和额外的图卷积块,用于逐渐恢复原始信道计数和时间维度。
    6 M, A5 a5 u  O, ~0 H: P) c
    0 c; R8 O2 O: E9 u- s; gST-GCAE的嵌入是数据聚类的起点。在我们的聚类优化阶段,对基于重构的初始嵌入进行微调,以达到最终的聚类优化嵌入。
    % H/ l: b/ u! \$ G8 z, t- [
    0 U$ W  q2 B, d6 ]8 c符号        表示
    # g6 x2 s6 A$ J; [: _6 M/ i- O7 Fx i x_ix
    1 G6 `1 b" [& h  y8 Oi
    0 d' |) W9 v- E5 h  t0 k
    6 {- w! y( ^8 B: g! G5 ^" ^( J         输入示例
      B2 X6 E6 x4 }  N5 mz i z_iz
    9 G# @' l3 w+ p& K" ri7 F/ y/ u7 U1 r; c: Y$ s' C* D

    . F) e3 _/ r1 K         编码器的潜在嵌入
    ; }& I- S# ^. o8 u! M* iy i y_iy ( {/ Y7 p/ y6 b/ _. s# n
    i& f# ^, j" P8 w- Q6 ]" d% i
    ; _4 f% y+ s1 ^. L
            使用聚类层计算的软聚类分配9 }" F" H; r7 |$ K, E
    Θ ΘΘ        聚类层的参数
    " L! U7 j; b4 u1 ]5 y, n" \% up i k p_{ik}p 1 k# h) V% Q4 _# I7 ^
    ik. ~' K' V" ^& g1 v* S2 T; f4 @

    $ t9 [$ J8 N6 @+ T+ S         probability for the i-th sample to be assigned to the k-th cluster5 L8 ~, L7 M/ i( K; r$ @

    3 U  B+ r7 I8 z7 C) j* F' {( |* M! R6 M. B. t8 c
    我们采用[32]提出的聚类目标和优化算法。聚类目标是最小化当前模型概率聚类预测P和目标分布Q之间的KL散度:
    ) r& o/ L$ B7 u% `0 f' @6 M: o8 d4 K6 e) ~/ X+ y5 P8 B

    ) S5 t( ~9 G! {0 ^  B8 D目标分布旨在通过标准化和将每个值推到更接近0或1的值来加强当前的群集分配。反复应用将P转换为Q的函数将最终导致硬分配向量。使用以下等式计算目标分布的每个成员:
    7 ~% z) X. _0 U  f/ k
    & E  L+ u6 _( ]' A
    2 V# N- Z! s) o- K/ Q聚类层由为编码训练集计算的K均值质心初始化。优化以期望最大化(EM)的方式进行。
    3 i# [' _7 Y* E) P1 J在期望步骤期间,整个模型是固定的,并且目标分布Q被更新。在最大化阶段,优化模型以最小化聚类损失Lcluster。
    1 D- w/ F6 W- n5 A$ J2 G% s& x5 w. t# S
    3.4. Normality Scoring$ c! ~, z% c8 |6 j$ A
    该模型支持两种类型的多模分布。一个是集群分配级别;另一个是在软分配向量级别。例如,一个动作可能被分配给多个集群(集群级分配),导致多模式软分配向量。
    / l4 Q  s% ^% _- K) f6 G软分配向量本身(捕获动作)也可以通过多模态分布建模。; I9 M% I6 ]/ j5 P) m9 q
    # |* y, \" O- y* a- ~
    Dirichlet过程混合模型(DPMM)是评估比例数据分布的一种有效方法。它满足我们所需的设置:(i)估计(拟合)阶段,在此阶段,一组分布参数为评估,和(ii)推理阶段,为每个嵌入样本使用拟合模型。彻底的Blei和Jordan[4]给出了该模型的概述。- b# _/ ?, k4 u( S) b" c, U8 |
    % A" ~$ Q1 d1 i3 W( g
    Dirichlet过程混合模型(DPMM)是评估比例数据分布的有效方法。它符合我们要求的设置:8 P5 f* W: g% j4 ~  A  u0 ?
    (i) 估计(拟合)阶段,在此期间评估一组分布参数,以及7 W( [: C, ]7 t. Y$ U
    (ii)推理阶段,使用拟合模型为每个嵌入样本提供分数。Blei和Jordan[4]对模型进行了全面概述。
    1 g0 \4 m8 v1 D' K6 L; }# _, d6 {/ r  `4 W
    DPMM是单峰Dirichlet分布的常见混合扩展,并使用Dirichllet过程,这DirichletDistribution的无限维扩展。该模型是多模态的,能够将每个模式捕获为混合成分。拟合模型具有多个模式,每个模式表示对应于一个正常行为的一组比例。在测试时,使用拟合模型通过其对数概率对每个样本进行评分。[4,8]中提供了关于DPMM使用的进一步解释和讨论。
    * _7 T* h) _# y0 ^. m4 C( m6 n  L% {0 Q3 s4 b- V, J( a
    3.5. Training
    - R3 _, k7 a( u0 C# A" W该模型的训练阶段包括两个阶段,一个是自动编码器的预训练阶段,其中网络的聚类分支保持不变,另一个是微调阶段,其中嵌入和聚类都得到优化。具体而言:
    / m# L# i5 E/ l( q" A3 z7 ]0 A! m& N; N3 X
    Pre-Training: 该模型通过最小化重建损失(表示为Lrec)来学习编码和重建序列,Lrec是原始瞬时位姿图和ST-GCAE重建的位姿图之间的L2损失1 E) e( E6 X9 q
    8 F- [% j, F4 B# \
    Fine-Tuning:
    # d/ }4 L  }# s0 d# t: h7 u) ^7 v该模型优化了由重建损失和聚类损失组成的组合损失函数。9 z' h. a: @) F
    进行优化,使得聚类层优化为w.r.t.Lcluster,解码器优化为w.r.t.Lrec,编码器优化为w.r.t.两者。
    + F# W# q4 r6 m- Q$ a集群层的初始化是通过Kmeans完成的。如[9]所示,当编码器针对这两种损失进行优化时,解码器保持不变,并充当正则化器,以保持编码器的嵌入质量。  M/ v7 u5 L0 ~/ Y$ c) }: `
    本阶段的综合损失为:0 U4 n( r8 X+ Q2 U' ^
    ( v" _4 N0 p1 Z" {

    + F* \  W+ F8 b+ B4 M% I8 R: y; t
    4 V: @- N+ g8 |/ E实现细节/ G6 G5 X/ l+ m  j" v( k. N2 y
    1 ?: k9 _2 A3 n; u2 Y

    # _2 L- Q" W" L9 w* ~; x3 g' U: A
    def calc_reg_loss(model, reg_type='l2', avg=True):
    6 {% ]6 U9 M% e7 d0 A& L' s/ e5 f3 Z9 D    reg_loss = None
    4 d. e* d, K( G' w: \4 ^    parameters = list(param for name, param in model.named_parameters() if 'bias' not in name)4 x' {8 w7 a5 ~' A
        num_params = len(parameters)+ _0 W* s' Z0 b& }& Y# r, G
        if reg_type.lower() == 'l2':8 c" n( {- S. M! `) E# F! H' x
            for param in parameters:. _9 I8 i- q& Z, [+ m) W) v
                if reg_loss is None:# r: X# n' `) y/ l
                    reg_loss = 0.5 * torch.sum(param ** 2)
    , e3 k3 I" ]5 ~            else:
    : V, j1 \; w* m& M( U/ O                reg_loss = reg_loss + 0.5 * param.norm(2) ** 2
    . C$ q( D1 m2 S
    $ _+ \. x8 \% k7 M        if avg:
    ; ?1 C( b% S1 m( \  X            reg_loss /= num_params
    ! V1 ^: T6 s* |9 M+ |" w        return reg_loss
    ( c8 n* ^$ ]0 @) }7 [# [    else:
    , [* g/ U9 j+ u9 W- M* h1 t        return torch.tensor(0.0, device=model.device)
    " `, {$ Q; F7 W2 z0 d1$ w2 D7 f  c9 y0 f" `
    2! ^8 o/ u/ G* ?: X1 y+ L: `
    3
    ' q6 L% r' a2 Q; ^" E3 w44 D0 ^3 d, G+ j* l$ g  Y
    5- R' e2 Y9 [  a
    6
    5 g: b) x- R* `- r# C" n7, P/ \0 x0 {0 L
    8
    - ?; Q! T! _, J# w: c- r9
    % A. D) S; |! [4 G! J  j' W10
      _5 f% {* \7 P! y) O( H11! ?" }1 I2 Z1 ?; s0 w2 D& t3 _3 o
    12. l# B3 L+ H) B4 M
    13- \0 E: J1 x. d! c
    14! m8 p, B9 ?$ [5 o+ D- ?5 V
    15
    + l" I0 h4 X. n16
    7 i* L9 D8 \5 p; J, X$ s* V) U2 }7 B/ i0 G
    & y4 f6 T9 {# s4 W5 ?: a, b" t
    + G) ]7 h. {% q, ~0 c% F

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

    qq
    收缩
    • 电话咨询

    • 04714969085
    fastpost

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

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

    蒙公网安备 15010502000194号

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

    GMT+8, 2026-7-11 14:30 , Processed in 0.440959 second(s), 51 queries .

    回顶部