QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 3082|回复: 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
    ! J5 ]4 U4 p% `- x9 \3 J: U
    5 Z3 Q9 E/ r- p# U6 F. l8 w骨架图算法
    % m4 a0 B6 s) g: M* |+ [# K1 w/ I/ I& A5 ]& `& d3 u2 T
    2 m1 ]5 H+ c) a6 M8 \
    Graph Embedded Pose Clustering for Anomaly Detection4 @6 Z. q  f9 O7 H
    paper        code
    7 [. H" p& t- `! D9 Ahttps://arxiv.org/abs/1912.11850        https://github.com/amirmk89/gepc
    3 J" o1 ^( n1 m/ D+ l4 U我们提出了一种用于人类行为异常检测的新方法。我们的方法直接适用于可以从输入视频序列计算的人体姿势图。这使得分析独立于扰动参数,如视点或照明。我们将这些图映射到一个潜在空间并将它们聚类。然后,每个操作都由其对每个聚类的软赋值来表示。这为数据提供了一种“词袋”表示,其中每个动作都由其与一组基本动作词的相似性来表示。然后,我们使用基于狄利克雷过程的混合物,这对于处理比例数据(例如我们的软赋值向量)很有用,以确定一个动作是否正常。
    - m4 s, |) u5 Z. d$ ~  N' n: X. T4 N" G1 [+ X. F: w7 {* A
    首先,我们对输入数据使用人体姿态检测器。这抽象了问题,并防止下一步处理诸如视点或照明变化等有害参数。人的行为被表示为时空图,我们将其嵌入(第3.1、3.2小节)并聚类(第3.3小节)到一些潜在空间中。现在,每个动作都表示为一组基本动作的软分配向量。这抽象了动作的基本类型(即细粒度或粗粒度),从而进入学习其分布的最后阶段。我们用于学习软分配向量分布的工具是Dirichlet过程混合(第3.4小节),我们将模型拟合到数据中。然后使用该模型确定动作是否正常。* ]7 H1 V0 @+ w0 T$ c9 _* G

    ( p& ~8 S) D5 F图的每个节点对应于一个关键点、一个身体关节,每个边表示两个节点之间的某种关系。 存在许多"关键点关系",如解剖学上定义的物理关系(例如,左手腕和肘部连接)和由运动定义的动作关系,这些运动往往在特定动作的上下文中高度相关(例如,跑步时左右膝盖倾向于朝相反方向移动)。图的方向来自于这样一个事实,即一些关系是在优化过程中学习的,并且不是对称的。这种表示的一个好处是紧凑,这对于高效的视频分析非常重要。. ?' g4 B/ x$ c+ k; Q# u
    为了在时间上扩展,将从视频序列中提取的姿势关键点表示为姿势图的时间序列。 时间姿势图是人体关节位置的时间序列。时域邻接可以类似地通过连接连续帧中的关节来定义,允许我们利用姿势图序列的空间和时间维度执行图卷积运算
    ( @) _* C8 {  h) H+ k. f( ~- x0 ^0 I$ H
    我们提出了一种基于深度时态图自动编码器的结构,用于嵌入时态姿态图。 基于图2所示ST-GCN的基本块设计,我们将基本GCN算子替换为新的空间注意力图卷积,如下所示。
    ( _' B6 y: z% p2 j  q
    9 |6 Y) Y7 M& f: V/ C3.2. Spatial Attention Graph Convolution5 w4 z, C3 {% P1 h
    我们提出了一个新的图算子,如图3所示,它使用三种类型的邻接矩阵:静态、全局学习和推断(基于注意力)。每个邻接类型使用单独的权重应用其自己的GCN。
    5 X/ |9 M2 \* A2 {
    : Y+ c) n% D( K1 cGCN的输出按通道维度堆叠。采用1×1卷积作为加权叠加输出的可学习缩减度量,并提供所需的输出信道数。
    4 K9 O' O6 N5 q" G, C  J! X
    " b! |! @( ^' S* K9 }' U三个邻接矩阵捕捉了模型的不同方面:& i# v3 f& A/ o* Y$ s9 _
    (i)使用身体部位连通性作为优先于节点关系,使用静态邻接矩阵表示。
    # W& t* U+ ~, {4 O* A( e. A(ii)由全局邻接矩阵捕获的数据集级关键点关系,以及5 `$ T1 |7 \3 A& M+ t8 K' U3 [
    (iii)由推断邻接矩阵获取的样本特定关系。最后,可学习约简度量对不同的输出进行加权
    7 g5 V) M# k8 U: L
    5 R2 e. P( h4 _( G8 S2 t0 S1 r( |# [1 Z! J% l  d
    后续段落介绍了静态、全局学习和推断的邻接矩阵的设置方法,即图3中的A,B和C,在此略过。
    # g  j' c1 B" r9 l3.3. Deep Embedded Clustering6 w' g/ w7 x9 Z5 A7 ]" x
    为了构建我们的底层动作词典,我们采用训练集样本,并将它们联合嵌入和聚类到一些潜在空间中。然后,每个样本由其分配给每个底层聚类的概率表示。选择目标是为了提供不同的潜在集群,这些集群上存在动作。+ v4 V% M1 |* e* e1 `7 i

    8 |: s' t9 C% q- R我们采用了深嵌入聚类的概念[32],用我们的ST-GCAE架构对时间图进行聚类。所提出的聚类模型由编码器、解码器和软聚类层三部分组成。# a  E* Z# s5 z( M  I

    3 k+ h2 p* X6 |3 y8 C& a2 ~具体地说,我们的ST-GCAE模型保持了图的结构,但使用了较大的时间步长和不断增加的通道数来将输入序列压缩为潜在向量。解码器使用时间上采样层和额外的图卷积块,用于逐渐恢复原始信道计数和时间维度。7 @! D' F: z8 S- M, b
    8 R3 Z4 K4 P( H/ S
    ST-GCAE的嵌入是数据聚类的起点。在我们的聚类优化阶段,对基于重构的初始嵌入进行微调,以达到最终的聚类优化嵌入。7 o/ [$ l3 b# y  i" {. @% V/ g

    . R: m# Z; @2 X8 O符号        表示' I! ^; T! `; B! N/ }' c2 p
    x i x_ix
    ( [0 L- K% b! L( xi, [# l+ h" U! W' f, z/ }
    ) [2 B/ f& |5 B6 I1 I- k
            输入示例
    * G% D  j/ d& c7 }z i z_iz , _; n3 Y' v  e. N$ c
    i" X! g% {$ ]& ?% g1 ^
    ' o  y" W. s: v
            编码器的潜在嵌入' i% Q% C% |. X' }) ]. b7 }& f2 B
    y i y_iy
    7 C1 H& g3 I' I* z3 N- }0 fi$ ~- e, O: B, _

    + K8 H9 ?9 t- m8 F" p+ C         使用聚类层计算的软聚类分配7 Z/ L! Q3 m  h/ R0 I
    Θ ΘΘ        聚类层的参数
    3 x: c  w( G- B1 `1 vp i k p_{ik}p
    ! s9 a% Z' P7 Y# Nik
    ( w* H; O& u6 q" N# ^: c! _; d' o' I) G
            probability for the i-th sample to be assigned to the k-th cluster! d( a. X$ ~1 @

    . P! v# @4 P; `* D! {( ?; h7 @& m# d7 `9 u. K1 y* Z
    我们采用[32]提出的聚类目标和优化算法。聚类目标是最小化当前模型概率聚类预测P和目标分布Q之间的KL散度:$ z/ J7 L; A* z: }

    $ V: _/ m6 N: R( l, S2 p
      Z" S) V5 X  F% s目标分布旨在通过标准化和将每个值推到更接近0或1的值来加强当前的群集分配。反复应用将P转换为Q的函数将最终导致硬分配向量。使用以下等式计算目标分布的每个成员:
    ' n% D5 e; k6 T" ~
    1 A, }9 x, }: H- v5 D' z- P1 k9 ^  Q1 y/ M- A3 P0 w
    聚类层由为编码训练集计算的K均值质心初始化。优化以期望最大化(EM)的方式进行。
    ' w% v$ `# s$ [& \- p在期望步骤期间,整个模型是固定的,并且目标分布Q被更新。在最大化阶段,优化模型以最小化聚类损失Lcluster。! D9 H( G1 R( g% u2 z# V

    7 `6 t. u5 a8 S9 Y" Q2 Y3.4. Normality Scoring1 O% Y& {, m/ S/ d1 E7 |# h0 b
    该模型支持两种类型的多模分布。一个是集群分配级别;另一个是在软分配向量级别。例如,一个动作可能被分配给多个集群(集群级分配),导致多模式软分配向量。, a, Y3 `8 A1 F' Z7 u# O! t
    软分配向量本身(捕获动作)也可以通过多模态分布建模。. L8 I1 q; D. H
    1 p1 ?. i% Z; o7 ]; O0 R% Z0 ]
    Dirichlet过程混合模型(DPMM)是评估比例数据分布的一种有效方法。它满足我们所需的设置:(i)估计(拟合)阶段,在此阶段,一组分布参数为评估,和(ii)推理阶段,为每个嵌入样本使用拟合模型。彻底的Blei和Jordan[4]给出了该模型的概述。% g6 W! |' Z" j6 n( M

    . t5 F8 x5 J% V2 F3 X4 b7 iDirichlet过程混合模型(DPMM)是评估比例数据分布的有效方法。它符合我们要求的设置:
    7 L$ `- {2 G7 b" K% W(i) 估计(拟合)阶段,在此期间评估一组分布参数,以及/ I/ z; u) x* m$ w
    (ii)推理阶段,使用拟合模型为每个嵌入样本提供分数。Blei和Jordan[4]对模型进行了全面概述。% n  d' k4 M: z5 A
    ' S+ v6 x9 d9 q9 w; U
    DPMM是单峰Dirichlet分布的常见混合扩展,并使用Dirichllet过程,这DirichletDistribution的无限维扩展。该模型是多模态的,能够将每个模式捕获为混合成分。拟合模型具有多个模式,每个模式表示对应于一个正常行为的一组比例。在测试时,使用拟合模型通过其对数概率对每个样本进行评分。[4,8]中提供了关于DPMM使用的进一步解释和讨论。
    3 ?6 z% ^& Q) k8 Q8 G# Y# |' a* }4 |/ c' L
    3.5. Training
    , E8 P* J9 ~9 A( _该模型的训练阶段包括两个阶段,一个是自动编码器的预训练阶段,其中网络的聚类分支保持不变,另一个是微调阶段,其中嵌入和聚类都得到优化。具体而言:/ f5 W3 o5 E, X" w: O
    & a) a" L& C+ C2 B% _
    Pre-Training: 该模型通过最小化重建损失(表示为Lrec)来学习编码和重建序列,Lrec是原始瞬时位姿图和ST-GCAE重建的位姿图之间的L2损失4 u- _! G4 ^) j* E. a2 t9 R

    1 r4 l7 D* @/ w! M( A  cFine-Tuning:
    3 n  x) `' p' H& w. _该模型优化了由重建损失和聚类损失组成的组合损失函数。) |2 \; r  _, z: s; Y
    进行优化,使得聚类层优化为w.r.t.Lcluster,解码器优化为w.r.t.Lrec,编码器优化为w.r.t.两者。. x  J) L$ Z( W; r# Q3 }, _
    集群层的初始化是通过Kmeans完成的。如[9]所示,当编码器针对这两种损失进行优化时,解码器保持不变,并充当正则化器,以保持编码器的嵌入质量。
    $ x( ]) U$ a8 B8 ~- A3 E本阶段的综合损失为:
    3 A9 R% M, ~# C! l
    9 S$ c( ~+ g1 Q8 l; F4 d: [) O( \) F! }0 z; r/ x/ G
    $ u% D3 U1 B5 c' ?) U
    实现细节
    0 G' t# g, T7 P1 x' X0 K5 Q& F+ t2 h$ l, w

    , M! B( s8 |. R" ]: u8 i8 @* T6 N8 r6 Y2 o; `
    def calc_reg_loss(model, reg_type='l2', avg=True):
    4 H4 f+ H# K; B6 a$ a2 |    reg_loss = None
    + s9 f) W: G. u, j9 x# v    parameters = list(param for name, param in model.named_parameters() if 'bias' not in name)& ~) `( ~: C0 n- O: Z; T$ Y9 {
        num_params = len(parameters)
    5 G7 }/ M) e2 `  j    if reg_type.lower() == 'l2':
    8 G7 z* u% v1 s& j+ h9 ?$ t        for param in parameters:) b9 z+ m" v2 R" C
                if reg_loss is None:: _- P% J7 p5 Q  g# \
                    reg_loss = 0.5 * torch.sum(param ** 2)
    ; X7 j4 l  @$ N9 }: s. P8 ]" x            else:
    5 @4 W! ?4 I% M8 g/ R* y; U: L                reg_loss = reg_loss + 0.5 * param.norm(2) ** 25 B4 u5 r7 L+ }2 w8 M4 I
    & x9 s" L; Y! M
            if avg:' p' M: ~$ Q, t; J
                reg_loss /= num_params
    5 U/ ]9 k  l( r. t9 F0 v        return reg_loss
    2 k" E+ x$ I! \' t  Y8 ^    else:1 g) M0 n# F4 g/ g3 K/ \2 L
            return torch.tensor(0.0, device=model.device)
    1 i7 P$ `$ Y1 Z" P8 s, W: U1) y6 X, S* _0 A& ~3 n8 ~* v
    2( d- P2 B2 R9 T9 o# d
    3
    1 N+ ^! b9 r8 w% @, `" h& ?4
    / V; b( Y8 R! B/ |) F& v- V5
    7 @6 E! |( ]; z9 q/ i$ R64 Q9 Z$ r$ H. e9 i, h0 f) p
    7! ?2 A1 S0 J) {, E1 N2 w: t
    8
    - ]# \6 I. K) v# f4 G9
    * D6 [$ h% P" i# P" o% [10
    9 U# {" Z3 z; c" M9 j11  M/ F3 N; w/ q
    127 |+ b3 a: k4 c5 v
    13  b- q9 Y9 |$ b1 m
    14
    ) s1 o7 L9 M" ^" `: E# H: o15
    ; V( O% ?+ {( s161 a# r( m1 C$ r; V% T& S$ J$ `

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

    qq
    收缩
    • 电话咨询

    • 04714969085
    fastpost

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

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

    蒙公网安备 15010502000194号

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

    GMT+8, 2026-7-28 09:48 , Processed in 0.402208 second(s), 51 queries .

    回顶部