QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 3170|回复: 0
打印 上一主题 下一主题

[其他资源] 骨架图算法Graph Embedded Pose Clustering

[复制链接]
字体大小: 正常 放大
杨利霞        

5273

主题

82

听众

17万

积分

  • TA的每日心情
    开心
    2021-8-11 17:59
  • 签到天数: 17 天

    [LV.4]偶尔看看III

    网络挑战赛参赛者

    网络挑战赛参赛者

    自我介绍
    本人女,毕业于内蒙古科技大学,担任文职专业,毕业专业英语。

    群组: 2018美赛大象算法课程

    群组: 2018美赛护航培训课程

    群组: 2019年 数学中国站长建

    群组: 2019年数据分析师课程

    群组: 2018年大象老师国赛优

    跳转到指定楼层
    1#
    发表于 2022-9-5 15:49 |只看该作者 |倒序浏览
    |招呼Ta 关注Ta
    骨架图算法Graph Embedded Pose Clustering
    3 |* W0 z0 _: _  ]" J! _# ~, }
    - C1 k+ f4 \; R8 @& M骨架图算法( }8 l+ [8 [7 O% K
    4 r5 q9 i' v% u$ x# M. s3 x

    ' w: I8 @& Z+ F! E" hGraph Embedded Pose Clustering for Anomaly Detection! ?- C7 q, K$ Z2 y, [
    paper        code: i& `- f' F& Y, Y) C% H" N- N
    https://arxiv.org/abs/1912.11850        https://github.com/amirmk89/gepc8 ^% g& h. S8 |: E
    我们提出了一种用于人类行为异常检测的新方法。我们的方法直接适用于可以从输入视频序列计算的人体姿势图。这使得分析独立于扰动参数,如视点或照明。我们将这些图映射到一个潜在空间并将它们聚类。然后,每个操作都由其对每个聚类的软赋值来表示。这为数据提供了一种“词袋”表示,其中每个动作都由其与一组基本动作词的相似性来表示。然后,我们使用基于狄利克雷过程的混合物,这对于处理比例数据(例如我们的软赋值向量)很有用,以确定一个动作是否正常。6 Q7 R1 ^) ~6 G8 \7 i5 x- \: Y

    6 U2 f" h2 j- t* K首先,我们对输入数据使用人体姿态检测器。这抽象了问题,并防止下一步处理诸如视点或照明变化等有害参数。人的行为被表示为时空图,我们将其嵌入(第3.1、3.2小节)并聚类(第3.3小节)到一些潜在空间中。现在,每个动作都表示为一组基本动作的软分配向量。这抽象了动作的基本类型(即细粒度或粗粒度),从而进入学习其分布的最后阶段。我们用于学习软分配向量分布的工具是Dirichlet过程混合(第3.4小节),我们将模型拟合到数据中。然后使用该模型确定动作是否正常。
      @9 }9 h5 O1 d9 P! v" M
    2 T0 @# g, M( P图的每个节点对应于一个关键点、一个身体关节,每个边表示两个节点之间的某种关系。 存在许多"关键点关系",如解剖学上定义的物理关系(例如,左手腕和肘部连接)和由运动定义的动作关系,这些运动往往在特定动作的上下文中高度相关(例如,跑步时左右膝盖倾向于朝相反方向移动)。图的方向来自于这样一个事实,即一些关系是在优化过程中学习的,并且不是对称的。这种表示的一个好处是紧凑,这对于高效的视频分析非常重要。
    + S8 c8 w- J8 H$ }8 U为了在时间上扩展,将从视频序列中提取的姿势关键点表示为姿势图的时间序列。 时间姿势图是人体关节位置的时间序列。时域邻接可以类似地通过连接连续帧中的关节来定义,允许我们利用姿势图序列的空间和时间维度执行图卷积运算
    5 P+ Y8 q( e+ f3 ?7 }
    ! i, D! i" |! c" _! \# O我们提出了一种基于深度时态图自动编码器的结构,用于嵌入时态姿态图。 基于图2所示ST-GCN的基本块设计,我们将基本GCN算子替换为新的空间注意力图卷积,如下所示。* s% Z4 v1 Y" E3 w) X4 t
    ) v7 ]- H( X& M) E9 b1 @+ E
    3.2. Spatial Attention Graph Convolution
    8 p! I% \' h3 d; o  `* i我们提出了一个新的图算子,如图3所示,它使用三种类型的邻接矩阵:静态、全局学习和推断(基于注意力)。每个邻接类型使用单独的权重应用其自己的GCN。. _* s: ?6 t6 z  _& ~0 I8 W
    , P- x1 Q3 _6 W- }: {1 m
    GCN的输出按通道维度堆叠。采用1×1卷积作为加权叠加输出的可学习缩减度量,并提供所需的输出信道数。% g) ?3 Y" [7 v7 `, ~2 ?; T" f9 p
    8 b0 ]4 x9 ]: x: t  n9 a6 o$ C
    三个邻接矩阵捕捉了模型的不同方面:5 u5 |; x7 c0 j9 e. P6 E: H
    (i)使用身体部位连通性作为优先于节点关系,使用静态邻接矩阵表示。, I1 a* g* g3 |! V$ ]4 k
    (ii)由全局邻接矩阵捕获的数据集级关键点关系,以及
    : I% V( J, R5 y; o! k8 E4 M, F(iii)由推断邻接矩阵获取的样本特定关系。最后,可学习约简度量对不同的输出进行加权
    3 ?3 {/ k0 ?4 w' P( v( c' R! b/ {& b, q9 \9 ]1 b2 O- j

    5 G: q8 J% b. M( Y( Y8 K后续段落介绍了静态、全局学习和推断的邻接矩阵的设置方法,即图3中的A,B和C,在此略过。
    - M4 u* {8 y8 t1 U3.3. Deep Embedded Clustering9 E! @! h5 j5 O) U4 N0 T' b
    为了构建我们的底层动作词典,我们采用训练集样本,并将它们联合嵌入和聚类到一些潜在空间中。然后,每个样本由其分配给每个底层聚类的概率表示。选择目标是为了提供不同的潜在集群,这些集群上存在动作。
    # g& p" q' [' s( l; {
    , N, p; a& _' N我们采用了深嵌入聚类的概念[32],用我们的ST-GCAE架构对时间图进行聚类。所提出的聚类模型由编码器、解码器和软聚类层三部分组成。
    ( d! O0 m% r2 q( O: `! w5 L
    % l2 h+ F3 A& a0 e  d具体地说,我们的ST-GCAE模型保持了图的结构,但使用了较大的时间步长和不断增加的通道数来将输入序列压缩为潜在向量。解码器使用时间上采样层和额外的图卷积块,用于逐渐恢复原始信道计数和时间维度。3 T  d, {9 \8 o  ]" [

    0 E- j9 _' Q. J6 k$ J" k& Z+ v! t6 AST-GCAE的嵌入是数据聚类的起点。在我们的聚类优化阶段,对基于重构的初始嵌入进行微调,以达到最终的聚类优化嵌入。$ Q: D1 {  ~  g9 _: t; u6 N
    / b$ N, K- I; l: j
    符号        表示
    4 i, I) G3 u, _6 Q' yx i x_ix
    - k+ E) k0 t# y" _2 z: l# ri  q% S0 K9 r8 O. [3 i6 T% d
    ​
    , B, Q8 p! X* ]6 l: l' P# K         输入示例
    - ?* A$ h( t# n" ^z i z_iz ' a# ]5 Q. u# z8 h
    i
    * Z( U7 s4 I* z' L; K​
    8 R) g# h: p9 Y. b* ]9 k         编码器的潜在嵌入$ {* B0 w2 T. I% j# U! ]
    y i y_iy # {& }6 }. [/ g
    i1 u. o% m% X5 f
    ​9 p# M: Z7 B- d: m# M$ s
            使用聚类层计算的软聚类分配7 U9 v4 R% @) p, g, ~/ ?" c5 D
    Θ ΘΘ        聚类层的参数
    ! `) I8 }- \1 kp i k p_{ik}p : I0 H% _# i! p) l8 O
    ik
    ! [, ^  R% F$ v0 Q. |​  _1 q6 a/ {$ N9 Y/ |& Y/ f! A
            probability for the i-th sample to be assigned to the k-th cluster# F' N2 C/ r0 C/ K
    , C4 R/ S$ W9 P0 w9 d4 s2 l
    5 D3 m. o; a0 s& P* ^4 x3 q* P; P
    我们采用[32]提出的聚类目标和优化算法。聚类目标是最小化当前模型概率聚类预测P和目标分布Q之间的KL散度:
    1 d' t0 S1 Z& g& V
    3 \: J1 {9 J5 s' J. J6 l
    : R0 `: R# J. K# y; B; a目标分布旨在通过标准化和将每个值推到更接近0或1的值来加强当前的群集分配。反复应用将P转换为Q的函数将最终导致硬分配向量。使用以下等式计算目标分布的每个成员:
    - q  [6 K. ?$ N4 J# L7 Y
      g; r% I7 [7 p1 e8 `% x% r0 i, x; u! r
    聚类层由为编码训练集计算的K均值质心初始化。优化以期望最大化(EM)的方式进行。) j' w  d; T) \, `  l
    在期望步骤期间,整个模型是固定的,并且目标分布Q被更新。在最大化阶段,优化模型以最小化聚类损失Lcluster。
    , r/ R2 e3 L7 @7 \8 ^% Z( B2 N+ U  a; N. T- ~3 }/ c
    3.4. Normality Scoring- r$ e1 f6 n6 i0 D5 U% K
    该模型支持两种类型的多模分布。一个是集群分配级别;另一个是在软分配向量级别。例如,一个动作可能被分配给多个集群(集群级分配),导致多模式软分配向量。- G$ D; Z" R" u8 [4 K1 Q" s8 O- i
    软分配向量本身(捕获动作)也可以通过多模态分布建模。
    / A; j7 Q' {& Z: P$ a" T" l7 Z, X: P1 n+ M1 J& Q7 }) c
    Dirichlet过程混合模型(DPMM)是评估比例数据分布的一种有效方法。它满足我们所需的设置:(i)估计(拟合)阶段,在此阶段,一组分布参数为评估,和(ii)推理阶段,为每个嵌入样本使用拟合模型。彻底的Blei和Jordan[4]给出了该模型的概述。
    5 G2 ~& F3 `% C: J! f
    8 ]. v3 Q# x7 y, ?Dirichlet过程混合模型(DPMM)是评估比例数据分布的有效方法。它符合我们要求的设置:% a  N* k  ]& w7 t* \/ e  r
    (i) 估计(拟合)阶段,在此期间评估一组分布参数,以及
    & r9 J/ }' C5 r! p3 T. h( E2 z(ii)推理阶段,使用拟合模型为每个嵌入样本提供分数。Blei和Jordan[4]对模型进行了全面概述。
    ) w2 \/ ^# g( J7 T: H$ s: B0 o* v! k% r0 N* ]4 l& v
    DPMM是单峰Dirichlet分布的常见混合扩展,并使用Dirichllet过程,这DirichletDistribution的无限维扩展。该模型是多模态的,能够将每个模式捕获为混合成分。拟合模型具有多个模式,每个模式表示对应于一个正常行为的一组比例。在测试时,使用拟合模型通过其对数概率对每个样本进行评分。[4,8]中提供了关于DPMM使用的进一步解释和讨论。
    % f& C' e3 g  \9 n1 f
    4 |% f+ @6 k( L0 R3.5. Training! X. i: P+ x" Q+ m& s2 R, ^5 C
    该模型的训练阶段包括两个阶段,一个是自动编码器的预训练阶段,其中网络的聚类分支保持不变,另一个是微调阶段,其中嵌入和聚类都得到优化。具体而言:
    2 B- a( F7 a2 I! l! K% P2 Z7 b) C9 I
      s( S! A3 a6 f1 w  FPre-Training: 该模型通过最小化重建损失(表示为Lrec)来学习编码和重建序列,Lrec是原始瞬时位姿图和ST-GCAE重建的位姿图之间的L2损失
    1 G% Y! n) U' M& s* G) Y# ?: \/ Q6 |2 d5 {6 z& ?
    Fine-Tuning:. `% E2 v  S7 j0 H" ]6 v
    该模型优化了由重建损失和聚类损失组成的组合损失函数。6 ?$ n2 }; i% B7 Y
    进行优化,使得聚类层优化为w.r.t.Lcluster,解码器优化为w.r.t.Lrec,编码器优化为w.r.t.两者。
    . K1 `* ~" c) h集群层的初始化是通过Kmeans完成的。如[9]所示,当编码器针对这两种损失进行优化时,解码器保持不变,并充当正则化器,以保持编码器的嵌入质量。/ {& q. G; ]4 O* r/ k" |
    本阶段的综合损失为:& b1 |3 R9 ^5 a( t. c3 @' R6 U

    1 E3 h/ U2 I7 c
    ) T8 q- T% f, u- J* _. b+ C7 s$ m$ Q% K' w  O$ v
    实现细节
    + x0 ~6 C( B7 m
    $ Q, r) C8 J- z3 E5 H( j) G4 d6 U

    ! Y. G" |. l. ^- s! P  Kdef calc_reg_loss(model, reg_type='l2', avg=True):
      j* `- F* k& O# u    reg_loss = None5 ?5 ?% |# U* X. }7 Z/ f* ]' `
        parameters = list(param for name, param in model.named_parameters() if 'bias' not in name)
    & p. i6 I( ^4 B    num_params = len(parameters)
    & ?1 O" N% w4 k5 Y  c% b    if reg_type.lower() == 'l2':
    ) H% v. Q1 |4 q2 c- B" E) ]        for param in parameters:8 J  V) Z# a: A# r- Z" ~; O" j
                if reg_loss is None:/ {( m% S: }# [: m
                    reg_loss = 0.5 * torch.sum(param ** 2)
    ; S" V8 H8 h$ k" f5 o) B            else:
    & U  N% t. W6 m3 f                reg_loss = reg_loss + 0.5 * param.norm(2) ** 2
    1 @, r  Z1 P" w8 G9 m% Q$ H  h7 |! C4 q  F, f
            if avg:
    2 K! q+ O4 @- |            reg_loss /= num_params
    . c9 B( I0 h0 O        return reg_loss
    & X" x0 m! U( m8 j; `" b! D% T9 W    else:! S) a! [' U' Q8 z
            return torch.tensor(0.0, device=model.device)3 g) k# ]' p1 \  r: A( J' H9 a
    1
    ) U9 d" }, g2 H2 C# m* k2
    ) m) X: `( W! d8 @7 ~. Z8 q3& [' {! Q4 X( v$ E/ S% U3 x4 U8 W
    4! c7 L6 S" \/ Y$ U
    5/ j$ a/ D, O0 u6 j
    60 ?4 z3 S1 @6 d
    7
    3 W! H" x: @7 e) a! u  u  v$ j8 N* _8' M: H* H9 n( z7 w
    9
    # f# \& w: S: b) g: f% y10% b* \$ q3 {3 z# S
    118 z# v% z6 z1 d# O
    12
    + j6 \0 `. i& n2 ^4 u! x! c. v1 W+ Q13
    0 c1 X7 r& ]' A3 U2 r- D14
    . ?# j3 K% I0 P: R15. W# e' H  M3 M7 o5 b9 |
    16( P5 o" J( u2 l! @
    / L, r/ r; X. K) _7 h

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

    回顶部