QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 3043|回复: 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( P  P7 x) M1 _+ G
    4 ^' N$ P/ {. R3 z- d
    骨架图算法% }$ P8 x0 C- t2 H

    6 E) h* \. K) m8 q7 O* n: w& g! ]- X$ d1 ~" t9 V) h
    Graph Embedded Pose Clustering for Anomaly Detection. O+ O1 E3 v* @! M0 ~) A
    paper        code
    ( n) v& n' |/ V9 Fhttps://arxiv.org/abs/1912.11850        https://github.com/amirmk89/gepc/ o: D- z$ W! g- I4 n/ A% X% U
    我们提出了一种用于人类行为异常检测的新方法。我们的方法直接适用于可以从输入视频序列计算的人体姿势图。这使得分析独立于扰动参数,如视点或照明。我们将这些图映射到一个潜在空间并将它们聚类。然后,每个操作都由其对每个聚类的软赋值来表示。这为数据提供了一种“词袋”表示,其中每个动作都由其与一组基本动作词的相似性来表示。然后,我们使用基于狄利克雷过程的混合物,这对于处理比例数据(例如我们的软赋值向量)很有用,以确定一个动作是否正常。
      d, j; i- x' @* t/ ~; B' S
    0 B( w& p" `2 u7 H, q4 H4 s/ ^  F首先,我们对输入数据使用人体姿态检测器。这抽象了问题,并防止下一步处理诸如视点或照明变化等有害参数。人的行为被表示为时空图,我们将其嵌入(第3.1、3.2小节)并聚类(第3.3小节)到一些潜在空间中。现在,每个动作都表示为一组基本动作的软分配向量。这抽象了动作的基本类型(即细粒度或粗粒度),从而进入学习其分布的最后阶段。我们用于学习软分配向量分布的工具是Dirichlet过程混合(第3.4小节),我们将模型拟合到数据中。然后使用该模型确定动作是否正常。5 P' G9 ?( V6 [6 p5 ?( V, _1 T
    , K# T9 O) M; E5 R. a
    图的每个节点对应于一个关键点、一个身体关节,每个边表示两个节点之间的某种关系。 存在许多"关键点关系",如解剖学上定义的物理关系(例如,左手腕和肘部连接)和由运动定义的动作关系,这些运动往往在特定动作的上下文中高度相关(例如,跑步时左右膝盖倾向于朝相反方向移动)。图的方向来自于这样一个事实,即一些关系是在优化过程中学习的,并且不是对称的。这种表示的一个好处是紧凑,这对于高效的视频分析非常重要。! E6 S# _1 ], E" d% k
    为了在时间上扩展,将从视频序列中提取的姿势关键点表示为姿势图的时间序列。 时间姿势图是人体关节位置的时间序列。时域邻接可以类似地通过连接连续帧中的关节来定义,允许我们利用姿势图序列的空间和时间维度执行图卷积运算
    . V! f  N1 _6 e( j% V6 [
    ) _" {! y0 B. Q我们提出了一种基于深度时态图自动编码器的结构,用于嵌入时态姿态图。 基于图2所示ST-GCN的基本块设计,我们将基本GCN算子替换为新的空间注意力图卷积,如下所示。! x, q! V3 w3 k. h" V- }
    0 Z' F' l. |7 \5 M
    3.2. Spatial Attention Graph Convolution0 p+ J9 d0 y/ H2 r. C
    我们提出了一个新的图算子,如图3所示,它使用三种类型的邻接矩阵:静态、全局学习和推断(基于注意力)。每个邻接类型使用单独的权重应用其自己的GCN。
    6 S$ e0 P4 D6 R) q  ]8 |/ Y: R
    # @4 O4 `) H! |; o  Z2 N7 ]GCN的输出按通道维度堆叠。采用1×1卷积作为加权叠加输出的可学习缩减度量,并提供所需的输出信道数。
    ; b5 k) ~' Z) ]2 m8 z" _5 v4 Y% f* ]# A
    三个邻接矩阵捕捉了模型的不同方面:: M" z7 f9 l- n7 X
    (i)使用身体部位连通性作为优先于节点关系,使用静态邻接矩阵表示。! j& s2 b% Q/ h1 Y$ }5 I
    (ii)由全局邻接矩阵捕获的数据集级关键点关系,以及
    1 T+ `3 N: v4 P5 h(iii)由推断邻接矩阵获取的样本特定关系。最后,可学习约简度量对不同的输出进行加权
    + p7 u+ b4 T& k1 _7 ?7 l; b% l, q+ |8 I

    7 d4 P5 ~! V. T+ ^! J% L$ U: O  g后续段落介绍了静态、全局学习和推断的邻接矩阵的设置方法,即图3中的A,B和C,在此略过。& u5 Y5 }, H9 }
    3.3. Deep Embedded Clustering
    % O& \1 U' `, {7 M为了构建我们的底层动作词典,我们采用训练集样本,并将它们联合嵌入和聚类到一些潜在空间中。然后,每个样本由其分配给每个底层聚类的概率表示。选择目标是为了提供不同的潜在集群,这些集群上存在动作。
    # v( u7 ~% N' H/ O8 B* `' u" Q* ~3 z3 Q9 ]
    我们采用了深嵌入聚类的概念[32],用我们的ST-GCAE架构对时间图进行聚类。所提出的聚类模型由编码器、解码器和软聚类层三部分组成。5 V; y3 l+ ~3 Z$ K+ w

    - b, b* M  z$ y7 o- h具体地说,我们的ST-GCAE模型保持了图的结构,但使用了较大的时间步长和不断增加的通道数来将输入序列压缩为潜在向量。解码器使用时间上采样层和额外的图卷积块,用于逐渐恢复原始信道计数和时间维度。# I5 k* Q: }$ |7 l( D7 S. E, g* r

    6 @/ t- D% Z2 [, b. v5 [3 @2 cST-GCAE的嵌入是数据聚类的起点。在我们的聚类优化阶段,对基于重构的初始嵌入进行微调,以达到最终的聚类优化嵌入。6 \/ @3 q/ s: k! h

      U+ i  A+ [" v* r! ^) v/ k( \符号        表示
    6 ?' H5 k3 m6 O+ `x i x_ix 5 [9 g. ~' w4 U/ O9 [9 B, o
    i8 n8 ^6 n! s6 _

    3 \3 r) b# N! z6 m& k0 R         输入示例
    ' B4 K. v* O. y$ t' D% jz i z_iz
    ; C& @7 A9 v. A6 g& ni2 O% N! x0 a) t( ?& C, s$ ^- u

    " ]5 q+ T6 I' |. \7 ^         编码器的潜在嵌入
    3 j8 }& ~7 j& ay i y_iy
    , y9 m7 Y4 x# fi
    ; o7 P9 O2 g  K! u! L# I  i+ {
    0 [  h" ]) W6 B# @         使用聚类层计算的软聚类分配4 R$ w1 U- u2 v2 z
    Θ ΘΘ        聚类层的参数9 H( q- l, f% R0 D
    p i k p_{ik}p
    & w% E6 Q" Y; g& C" P+ l6 ?ik4 A6 n# R) @0 u+ u- f; ~9 y8 z( n

    # b( e6 J5 e9 a  }         probability for the i-th sample to be assigned to the k-th cluster# N& _# w3 y" n

    . i  m6 q) X" [+ }! Z/ W# O, r+ R$ G5 W+ D+ I& o& J
    我们采用[32]提出的聚类目标和优化算法。聚类目标是最小化当前模型概率聚类预测P和目标分布Q之间的KL散度:
    , d( o4 M0 V( ^  w2 ^5 L% n9 t8 ?9 f' G- @! o/ ]3 ~
    ' J+ m) t/ C$ a; p, W
    目标分布旨在通过标准化和将每个值推到更接近0或1的值来加强当前的群集分配。反复应用将P转换为Q的函数将最终导致硬分配向量。使用以下等式计算目标分布的每个成员:$ _3 o9 W1 t+ r
    9 S8 P2 f* s$ x9 R# m  {( j/ @7 N
    + J. r4 B" K# I" v; J0 ^- x
    聚类层由为编码训练集计算的K均值质心初始化。优化以期望最大化(EM)的方式进行。1 n/ v7 M/ S" m4 j: d  o% p# e& Y9 k
    在期望步骤期间,整个模型是固定的,并且目标分布Q被更新。在最大化阶段,优化模型以最小化聚类损失Lcluster。
    , \& V0 M) g9 o! Q# h1 n7 b2 c# o" ]9 B. y9 C% L
    3.4. Normality Scoring! e3 R6 D* x' }) J! |
    该模型支持两种类型的多模分布。一个是集群分配级别;另一个是在软分配向量级别。例如,一个动作可能被分配给多个集群(集群级分配),导致多模式软分配向量。
    # N4 {$ H% w0 q% N+ A5 U* _' Y软分配向量本身(捕获动作)也可以通过多模态分布建模。
    & i$ P9 u8 F) V  a+ _1 q% `: n' u% N4 j" ], ]- Q
    Dirichlet过程混合模型(DPMM)是评估比例数据分布的一种有效方法。它满足我们所需的设置:(i)估计(拟合)阶段,在此阶段,一组分布参数为评估,和(ii)推理阶段,为每个嵌入样本使用拟合模型。彻底的Blei和Jordan[4]给出了该模型的概述。' K, z/ v/ P: Y4 d. m

    ) `6 E- v* p# e2 o8 FDirichlet过程混合模型(DPMM)是评估比例数据分布的有效方法。它符合我们要求的设置:
    ( _! w5 D+ M6 u" j# [3 ~/ X% _(i) 估计(拟合)阶段,在此期间评估一组分布参数,以及
      [3 c: Z+ ^0 F(ii)推理阶段,使用拟合模型为每个嵌入样本提供分数。Blei和Jordan[4]对模型进行了全面概述。4 a7 n& Y' U' W7 w* |

    8 X: {2 C! H* R5 u/ EDPMM是单峰Dirichlet分布的常见混合扩展,并使用Dirichllet过程,这DirichletDistribution的无限维扩展。该模型是多模态的,能够将每个模式捕获为混合成分。拟合模型具有多个模式,每个模式表示对应于一个正常行为的一组比例。在测试时,使用拟合模型通过其对数概率对每个样本进行评分。[4,8]中提供了关于DPMM使用的进一步解释和讨论。
    $ y* l5 R# H  C. g7 p$ a( L% r. ?; x& |8 |/ [" t! L# j
    3.5. Training
    ; U$ g: {; Y& {& K3 R, s' v该模型的训练阶段包括两个阶段,一个是自动编码器的预训练阶段,其中网络的聚类分支保持不变,另一个是微调阶段,其中嵌入和聚类都得到优化。具体而言:" e" _  m' ^! J  ]7 F: m1 @4 f- _

    " I) k. a6 [! J2 PPre-Training: 该模型通过最小化重建损失(表示为Lrec)来学习编码和重建序列,Lrec是原始瞬时位姿图和ST-GCAE重建的位姿图之间的L2损失7 d. u; C6 n; ^

    . ?0 M5 n2 J5 b% M- EFine-Tuning:
    $ z! l+ R, q9 n7 O* y/ C该模型优化了由重建损失和聚类损失组成的组合损失函数。
    & x1 S2 k3 `/ O进行优化,使得聚类层优化为w.r.t.Lcluster,解码器优化为w.r.t.Lrec,编码器优化为w.r.t.两者。
    & I5 s7 O( R, m1 O8 H, a集群层的初始化是通过Kmeans完成的。如[9]所示,当编码器针对这两种损失进行优化时,解码器保持不变,并充当正则化器,以保持编码器的嵌入质量。
    7 S: Y9 L5 C0 g) X! Z2 b8 M本阶段的综合损失为:, t  D# U8 M* n) E
    0 F( n1 k+ G% ?1 @6 [
    . H1 H, g. P3 J1 b* W. B$ l

    $ @3 N  B6 @: Z* k; ?实现细节& U  x) E' u, p* I0 Z0 I+ s( l: B

    : n) e, |, i* _7 [) S( s, @: |' Z1 Y1 I- q

    8 E; G1 F+ \, m. |: H9 H1 edef calc_reg_loss(model, reg_type='l2', avg=True):6 J4 E5 L: u: V' Y
        reg_loss = None) n1 e. `' N6 D1 `- P
        parameters = list(param for name, param in model.named_parameters() if 'bias' not in name)
    ' \8 N- X! o4 Z& f& E' z    num_params = len(parameters)) z# h! c) G! m: ]
        if reg_type.lower() == 'l2':4 Q) G9 X% D$ `; a& |% B' L+ z
            for param in parameters:9 g9 S3 D) ]" P9 _& q' y+ w
                if reg_loss is None:7 V8 D& d6 j7 p2 X3 E5 P
                    reg_loss = 0.5 * torch.sum(param ** 2)
    4 M4 \# c! b3 X0 i# U2 U            else:
      U* z: p( O" u( ]. i7 w  ~                reg_loss = reg_loss + 0.5 * param.norm(2) ** 28 t, Q' h/ Y7 @) y; ^) M' O
    6 x2 a; \% ~2 R: c9 s5 i
            if avg:
      P8 d/ f  s! Y8 Q/ ?            reg_loss /= num_params; Z$ z) C. M, t9 q
            return reg_loss8 m4 {9 q/ Q. B1 o9 l1 f- E
        else:
    % C2 Z! t" M3 ?6 T        return torch.tensor(0.0, device=model.device)
    4 C* F, V' O4 U+ J0 k! s  v  T1, x4 `+ R/ X: s! U7 M
    2' m7 _; M3 `+ P1 X
    3
    % t  J% ~; y. H% K4
    $ y9 b- p! [6 H5 B# w+ A6 z6 E5
    ' O2 z1 h9 y& }' W6* y- |$ f3 [/ I3 X  ~, y8 l2 Y
    7
    $ @' c; [: L- h0 Y1 V7 s, ?6 y& Z8* e/ J3 g3 t5 r  i- {' m( g
    9
    4 e0 v) g3 H) h0 ]10
    / v* ]$ f: R3 E; E4 y11
    / i3 a$ U7 ?0 r6 y128 l( ]% E) p5 j
    13: a" J2 y, [" B; y  }
    142 ~% _2 b" [4 r  [: |+ F/ x/ R8 W3 j0 O
    15* Q3 ]$ K5 j' d; N0 x
    161 z1 Z) j6 {: E5 J6 h

    ) C% _# L7 w3 K- D( P7 ]0 ~/ j$ K9 ~6 X- }4 S9 H6 @
    9 W" O% X+ D' Q* j* j

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

    回顶部