QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 3033|回复: 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 Clustering3 q0 g3 `( m/ ^' ?$ C

    % @- m9 ?2 O# B. ]$ T骨架图算法
    9 B% v: {% l) G, n$ p
    ( P  N; w( @6 B+ R* A2 ?
    / K7 L# Z* F* E2 {! }+ L0 w3 tGraph Embedded Pose Clustering for Anomaly Detection6 g' [+ q/ \5 M: O. G. M4 B
    paper        code
    5 h$ K, \# ~8 a' S  m' H. A" |% Bhttps://arxiv.org/abs/1912.11850        https://github.com/amirmk89/gepc
    - q0 i, T; L9 L* R) D我们提出了一种用于人类行为异常检测的新方法。我们的方法直接适用于可以从输入视频序列计算的人体姿势图。这使得分析独立于扰动参数,如视点或照明。我们将这些图映射到一个潜在空间并将它们聚类。然后,每个操作都由其对每个聚类的软赋值来表示。这为数据提供了一种“词袋”表示,其中每个动作都由其与一组基本动作词的相似性来表示。然后,我们使用基于狄利克雷过程的混合物,这对于处理比例数据(例如我们的软赋值向量)很有用,以确定一个动作是否正常。, R: A2 K4 z1 ~! m, [0 ?- [  O# k

    ; {- P4 Q- L& O1 h2 L首先,我们对输入数据使用人体姿态检测器。这抽象了问题,并防止下一步处理诸如视点或照明变化等有害参数。人的行为被表示为时空图,我们将其嵌入(第3.1、3.2小节)并聚类(第3.3小节)到一些潜在空间中。现在,每个动作都表示为一组基本动作的软分配向量。这抽象了动作的基本类型(即细粒度或粗粒度),从而进入学习其分布的最后阶段。我们用于学习软分配向量分布的工具是Dirichlet过程混合(第3.4小节),我们将模型拟合到数据中。然后使用该模型确定动作是否正常。. A9 l) }# U3 T$ S" j- E
      N  |! Z( U2 b
    图的每个节点对应于一个关键点、一个身体关节,每个边表示两个节点之间的某种关系。 存在许多"关键点关系",如解剖学上定义的物理关系(例如,左手腕和肘部连接)和由运动定义的动作关系,这些运动往往在特定动作的上下文中高度相关(例如,跑步时左右膝盖倾向于朝相反方向移动)。图的方向来自于这样一个事实,即一些关系是在优化过程中学习的,并且不是对称的。这种表示的一个好处是紧凑,这对于高效的视频分析非常重要。
      ]3 h  F9 I8 k2 t% ?# y为了在时间上扩展,将从视频序列中提取的姿势关键点表示为姿势图的时间序列。 时间姿势图是人体关节位置的时间序列。时域邻接可以类似地通过连接连续帧中的关节来定义,允许我们利用姿势图序列的空间和时间维度执行图卷积运算4 e% M8 Q# X. Y& c1 O, }" J0 }

    8 o% f% C* m& N( \! M6 N我们提出了一种基于深度时态图自动编码器的结构,用于嵌入时态姿态图。 基于图2所示ST-GCN的基本块设计,我们将基本GCN算子替换为新的空间注意力图卷积,如下所示。
    : i. W- p+ P. q. U4 z5 @+ q  p' V# C8 \8 I& ]& p' T! j$ _
    3.2. Spatial Attention Graph Convolution
    ( n! N7 B( B7 w. A% i我们提出了一个新的图算子,如图3所示,它使用三种类型的邻接矩阵:静态、全局学习和推断(基于注意力)。每个邻接类型使用单独的权重应用其自己的GCN。0 F9 |; A& r& C" }* d; O. F1 M# ]
    / Z3 ?+ i8 `& V. x2 B+ q0 S! g
    GCN的输出按通道维度堆叠。采用1×1卷积作为加权叠加输出的可学习缩减度量,并提供所需的输出信道数。- F+ }1 U2 E- v) L

    , N: Y& Z3 l- w: Q三个邻接矩阵捕捉了模型的不同方面:* o! K+ L- F  r  V- ?/ i
    (i)使用身体部位连通性作为优先于节点关系,使用静态邻接矩阵表示。' j& t" q( {/ o: q$ q& n
    (ii)由全局邻接矩阵捕获的数据集级关键点关系,以及
    * g6 u, [: h, c& z(iii)由推断邻接矩阵获取的样本特定关系。最后,可学习约简度量对不同的输出进行加权
    ) M/ x  M7 O+ u& f! E# \
    2 c1 P/ d8 A; Y, @, A+ Y+ q/ R
    后续段落介绍了静态、全局学习和推断的邻接矩阵的设置方法,即图3中的A,B和C,在此略过。* s+ M" [& Y" w8 p, l
    3.3. Deep Embedded Clustering
    - A1 f# ~) Q4 p0 S为了构建我们的底层动作词典,我们采用训练集样本,并将它们联合嵌入和聚类到一些潜在空间中。然后,每个样本由其分配给每个底层聚类的概率表示。选择目标是为了提供不同的潜在集群,这些集群上存在动作。4 R- X$ S5 [* ]
    2 h6 ?  t0 H' K) ^+ a( U- B5 ]% V
    我们采用了深嵌入聚类的概念[32],用我们的ST-GCAE架构对时间图进行聚类。所提出的聚类模型由编码器、解码器和软聚类层三部分组成。
    1 T; T. ^. f* [, U) |; u+ M+ k3 R8 d8 `" q& n) t) ]5 {8 p" ^
    具体地说,我们的ST-GCAE模型保持了图的结构,但使用了较大的时间步长和不断增加的通道数来将输入序列压缩为潜在向量。解码器使用时间上采样层和额外的图卷积块,用于逐渐恢复原始信道计数和时间维度。
    $ w: S+ B2 T2 I8 A, |
    % _3 O# d* }. m; aST-GCAE的嵌入是数据聚类的起点。在我们的聚类优化阶段,对基于重构的初始嵌入进行微调,以达到最终的聚类优化嵌入。1 Z: u2 G3 I. s4 @- h& B5 N
    ' s; {+ S4 ^4 n8 v" q
    符号        表示
    / C  D- W* Y: A3 d8 R# l0 p& Gx i x_ix
    " D4 v" O2 s. c: q6 zi
    + K1 C& I3 K1 |/ O+ [( ^( D: I
    ( B! \, S7 S  T4 Y% T/ o         输入示例( i  E# Q3 |$ T" h  N; F" s/ D8 o
    z i z_iz
    1 r# K% B  R1 q! x! {. L7 ^; |$ Li
    ' ]# W1 N" {1 I7 a6 n/ t. c! N5 i' e& I; m* |6 ^% V
            编码器的潜在嵌入  _3 r$ \2 M$ N$ {. |- x: a8 C6 _
    y i y_iy 2 A  {  u  U, W# T- ~  n0 d* q
    i9 E& L4 r) p: @9 m* H. l9 Z  t# [

    " o: A; [3 r& u. u) o+ j' p. K7 h8 a7 j         使用聚类层计算的软聚类分配, ]  _' r9 K& y7 m8 s: G
    Θ ΘΘ        聚类层的参数# j  J  u+ Q( |7 S
    p i k p_{ik}p
    & V! S5 |7 B  l, g/ y  P& Dik; q. W4 ~3 Q7 C! ^" `

    + n/ R. {% L9 c4 Z& B         probability for the i-th sample to be assigned to the k-th cluster* ~5 J6 Z3 z  z6 a/ ^+ H

    " n$ ~, o: D$ z! ^1 i& A+ P: {  X' l- e' d! [3 g& g1 V8 N# s
    我们采用[32]提出的聚类目标和优化算法。聚类目标是最小化当前模型概率聚类预测P和目标分布Q之间的KL散度:
    7 O( o, ~$ H% }8 W, u& B" n
    2 Y' R; k8 p5 [& K
    - I, H' I- r3 T8 j1 A( O" J4 P目标分布旨在通过标准化和将每个值推到更接近0或1的值来加强当前的群集分配。反复应用将P转换为Q的函数将最终导致硬分配向量。使用以下等式计算目标分布的每个成员:2 X; D3 n1 S9 W/ c
    0 `0 O0 I2 d7 q) U
    ; S2 G4 a& E* S. u4 z( y9 ^, u
    聚类层由为编码训练集计算的K均值质心初始化。优化以期望最大化(EM)的方式进行。
    7 I# x0 h: q+ I8 B0 s7 R+ U1 v在期望步骤期间,整个模型是固定的,并且目标分布Q被更新。在最大化阶段,优化模型以最小化聚类损失Lcluster。4 r+ d9 r' W' f# _; o

    7 t2 h- x" O* b( W3.4. Normality Scoring
    , W. E+ |0 ]* a该模型支持两种类型的多模分布。一个是集群分配级别;另一个是在软分配向量级别。例如,一个动作可能被分配给多个集群(集群级分配),导致多模式软分配向量。
    " q  ~& |: z8 ]软分配向量本身(捕获动作)也可以通过多模态分布建模。5 j8 i9 Z! c( d

    , e9 j: P7 Z; l+ z: x) ]0 i+ hDirichlet过程混合模型(DPMM)是评估比例数据分布的一种有效方法。它满足我们所需的设置:(i)估计(拟合)阶段,在此阶段,一组分布参数为评估,和(ii)推理阶段,为每个嵌入样本使用拟合模型。彻底的Blei和Jordan[4]给出了该模型的概述。
    , @9 Y6 ^# x: c- S4 v1 I6 I1 [! L% V2 `/ L7 T$ C: @
    Dirichlet过程混合模型(DPMM)是评估比例数据分布的有效方法。它符合我们要求的设置:
    , x, S: O% z# C; T. Y# V3 {(i) 估计(拟合)阶段,在此期间评估一组分布参数,以及
    # J, w6 w1 V) V+ H0 C- F2 {(ii)推理阶段,使用拟合模型为每个嵌入样本提供分数。Blei和Jordan[4]对模型进行了全面概述。. B! A1 y& a) g+ H: ^) _/ J+ b
    $ w  O0 g! j+ }2 A" D( S' ?! m
    DPMM是单峰Dirichlet分布的常见混合扩展,并使用Dirichllet过程,这DirichletDistribution的无限维扩展。该模型是多模态的,能够将每个模式捕获为混合成分。拟合模型具有多个模式,每个模式表示对应于一个正常行为的一组比例。在测试时,使用拟合模型通过其对数概率对每个样本进行评分。[4,8]中提供了关于DPMM使用的进一步解释和讨论。, j( C& A2 Q' R1 |+ f
    # q) f5 k0 P4 y# g
    3.5. Training  ]# G' r! V+ g; q( @
    该模型的训练阶段包括两个阶段,一个是自动编码器的预训练阶段,其中网络的聚类分支保持不变,另一个是微调阶段,其中嵌入和聚类都得到优化。具体而言:
    ) f' y/ r) ?, d' D2 e1 ^
    / H; F1 f# W* }4 ~Pre-Training: 该模型通过最小化重建损失(表示为Lrec)来学习编码和重建序列,Lrec是原始瞬时位姿图和ST-GCAE重建的位姿图之间的L2损失+ P- a, q* |7 e! L

    7 i9 c1 v' {; ?3 @1 e$ hFine-Tuning:9 [! O: n0 b' _& e/ h
    该模型优化了由重建损失和聚类损失组成的组合损失函数。7 Q& D' x# H( @! w; R% T
    进行优化,使得聚类层优化为w.r.t.Lcluster,解码器优化为w.r.t.Lrec,编码器优化为w.r.t.两者。
    $ J) {7 i) V* W集群层的初始化是通过Kmeans完成的。如[9]所示,当编码器针对这两种损失进行优化时,解码器保持不变,并充当正则化器,以保持编码器的嵌入质量。( x" W2 m! T, l" X
    本阶段的综合损失为:
    6 i9 _2 M  U" N+ Z3 [* X5 I  {/ ]0 X7 L+ f! @3 G) D& }% q

    / }& E/ l0 |0 D0 J* u$ {" |4 V% i& W1 i3 b5 _9 J. _, {( D
    实现细节8 ]5 n1 E9 }# N# m
    : W: m; [3 m  Z9 m- D

    & m' m  y1 `9 h7 u7 _# q5 p/ P
    / W9 R% B/ o$ _: T( @+ h( V. mdef calc_reg_loss(model, reg_type='l2', avg=True):- u; q; k: _0 }4 \* v3 P& R1 l
        reg_loss = None
    2 ?2 q6 H% R, v8 |: k$ {    parameters = list(param for name, param in model.named_parameters() if 'bias' not in name)
    0 r* _5 }  a* K3 w- S/ j6 f    num_params = len(parameters)3 v- \+ ~# i, ~' u4 }" L$ r! l
        if reg_type.lower() == 'l2':
    3 `+ E; a- S) c2 Z& v8 s) F        for param in parameters:1 P4 @% K  n1 G# a/ A7 s
                if reg_loss is None:
    ) t+ H2 B6 Y: a                reg_loss = 0.5 * torch.sum(param ** 2)
    5 \/ r" U6 f" C            else:
    - r$ d/ \% u0 O7 l0 S                reg_loss = reg_loss + 0.5 * param.norm(2) ** 2; R: Y3 {" {6 I& `
    & }' l6 w* S% m0 L  B) q
            if avg:
    & ]& M" m9 Q4 @. Y. {( s            reg_loss /= num_params
    # V% r8 ]% @4 [' w        return reg_loss
    ! X9 x3 X& r" k5 c6 Y0 _6 z    else:/ ^+ W/ s" F' d4 s1 |8 T; H5 ?$ [# Y
            return torch.tensor(0.0, device=model.device)
    0 i2 m: S9 T4 {3 @4 `3 y. r1
    4 r' k: m& I6 s2
    , t( ]# @/ Y; T: _" F: V  _: h38 p% [. J+ Z2 x! I3 D6 H4 ], Q: o
    4
    * U- i6 s1 V# `5
      p, z/ e; S) v' j( [6: }  D5 B4 ~* U  e( r; _( x, m
    7
    2 H& Z! B1 D$ T  H9 U6 s87 f( Q/ `$ Q% \" g: t
    9
    0 M  g  R3 i0 E% x- e109 q+ j* n& R% d9 i" }
    11% L3 J4 p8 v1 |- C# v: a" l
    12
    2 u3 f& o$ ?4 V: f/ k9 y% L1 l13
    8 g: ~: Z! @  ~3 N14
    ) r0 w1 w/ r! C& E9 c. R152 L/ v; g' t* H6 h9 Q
    16  D! T4 q7 @" X. o2 A; K
    ; M  c9 N$ N0 J5 m" U

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

    qq
    收缩
    • 电话咨询

    • 04714969085
    fastpost

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

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

    蒙公网安备 15010502000194号

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

    GMT+8, 2026-4-10 12:46 , Processed in 0.443526 second(s), 51 queries .

    回顶部