QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 3169|回复: 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
    7 A& u) o; x; _8 B4 w% C  F1 z$ E! ^) p; |/ k: l5 h
    骨架图算法
    1 p# T6 \  h! c! `8 h% D/ H4 X
    & a. |3 x- c  {# j6 m
    . x2 R* W' K. r" o0 x% tGraph Embedded Pose Clustering for Anomaly Detection
    * b% y+ X/ u" `6 ?" apaper        code
    & C. a. t2 P  qhttps://arxiv.org/abs/1912.11850        https://github.com/amirmk89/gepc
    0 A8 B. ?& J& O3 ~! O我们提出了一种用于人类行为异常检测的新方法。我们的方法直接适用于可以从输入视频序列计算的人体姿势图。这使得分析独立于扰动参数,如视点或照明。我们将这些图映射到一个潜在空间并将它们聚类。然后,每个操作都由其对每个聚类的软赋值来表示。这为数据提供了一种“词袋”表示,其中每个动作都由其与一组基本动作词的相似性来表示。然后,我们使用基于狄利克雷过程的混合物,这对于处理比例数据(例如我们的软赋值向量)很有用,以确定一个动作是否正常。
    $ |# a, Z# y0 W% a6 j. |
    / Z; J( S0 A0 {' N) }3 {* G8 y首先,我们对输入数据使用人体姿态检测器。这抽象了问题,并防止下一步处理诸如视点或照明变化等有害参数。人的行为被表示为时空图,我们将其嵌入(第3.1、3.2小节)并聚类(第3.3小节)到一些潜在空间中。现在,每个动作都表示为一组基本动作的软分配向量。这抽象了动作的基本类型(即细粒度或粗粒度),从而进入学习其分布的最后阶段。我们用于学习软分配向量分布的工具是Dirichlet过程混合(第3.4小节),我们将模型拟合到数据中。然后使用该模型确定动作是否正常。
    , X/ ?% V( e9 s4 a4 h, {. ]
    - R  G8 [5 r1 d8 Y$ w( _图的每个节点对应于一个关键点、一个身体关节,每个边表示两个节点之间的某种关系。 存在许多"关键点关系",如解剖学上定义的物理关系(例如,左手腕和肘部连接)和由运动定义的动作关系,这些运动往往在特定动作的上下文中高度相关(例如,跑步时左右膝盖倾向于朝相反方向移动)。图的方向来自于这样一个事实,即一些关系是在优化过程中学习的,并且不是对称的。这种表示的一个好处是紧凑,这对于高效的视频分析非常重要。
    5 V4 A( {- i1 h2 `, B为了在时间上扩展,将从视频序列中提取的姿势关键点表示为姿势图的时间序列。 时间姿势图是人体关节位置的时间序列。时域邻接可以类似地通过连接连续帧中的关节来定义,允许我们利用姿势图序列的空间和时间维度执行图卷积运算
    " Y* X% O" _, Y; t. Z& m) j) [0 r& o3 }: a4 n2 n
    我们提出了一种基于深度时态图自动编码器的结构,用于嵌入时态姿态图。 基于图2所示ST-GCN的基本块设计,我们将基本GCN算子替换为新的空间注意力图卷积,如下所示。
      y9 Y+ w# b  \* f/ t7 K  k5 Z
    0 T& {; V1 @& [, E# Y4 u0 G3.2. Spatial Attention Graph Convolution& b$ g, Z5 {3 S: }- u
    我们提出了一个新的图算子,如图3所示,它使用三种类型的邻接矩阵:静态、全局学习和推断(基于注意力)。每个邻接类型使用单独的权重应用其自己的GCN。* V# L! _! W4 G5 O  X
    ( a& e& Z# N8 A% Q% O
    GCN的输出按通道维度堆叠。采用1×1卷积作为加权叠加输出的可学习缩减度量,并提供所需的输出信道数。  c7 e' C  W+ g7 _
    1 _( q' e  L! o. o
    三个邻接矩阵捕捉了模型的不同方面:
    ' x9 [9 P1 F0 k(i)使用身体部位连通性作为优先于节点关系,使用静态邻接矩阵表示。
    % p: j! r! t( ^1 u) Y  Y+ c(ii)由全局邻接矩阵捕获的数据集级关键点关系,以及
    , M! h% o, c- B; N- A# r( U(iii)由推断邻接矩阵获取的样本特定关系。最后,可学习约简度量对不同的输出进行加权8 n2 [( i8 \7 R5 p

    0 Q0 ^" I% Z0 }, A# N
    2 S* a% \, O* P6 b/ g后续段落介绍了静态、全局学习和推断的邻接矩阵的设置方法,即图3中的A,B和C,在此略过。% k3 _2 w, U' z5 `
    3.3. Deep Embedded Clustering
    4 ]2 B# C" m) `' J为了构建我们的底层动作词典,我们采用训练集样本,并将它们联合嵌入和聚类到一些潜在空间中。然后,每个样本由其分配给每个底层聚类的概率表示。选择目标是为了提供不同的潜在集群,这些集群上存在动作。
    7 ~$ K. }" V5 n2 C' Y6 y9 e# [# V+ L$ B1 ^# r
    我们采用了深嵌入聚类的概念[32],用我们的ST-GCAE架构对时间图进行聚类。所提出的聚类模型由编码器、解码器和软聚类层三部分组成。* {* r( D# j' |2 S3 U8 m
    4 a1 ?0 M3 |0 _9 ]2 ^( X& s( J. m
    具体地说,我们的ST-GCAE模型保持了图的结构,但使用了较大的时间步长和不断增加的通道数来将输入序列压缩为潜在向量。解码器使用时间上采样层和额外的图卷积块,用于逐渐恢复原始信道计数和时间维度。
    / U; s! J5 n+ v7 G; f1 X" z- W7 G2 E4 \' F& k
    ST-GCAE的嵌入是数据聚类的起点。在我们的聚类优化阶段,对基于重构的初始嵌入进行微调,以达到最终的聚类优化嵌入。* t0 R5 D; g5 F0 E4 L/ [$ @

    , b) J- q" P2 x' {# F& U7 C& U符号        表示
    + |* o4 p9 f$ }+ z) hx i x_ix : _: I0 L, m4 ~+ g* U0 M5 ~
    i" q+ c" H! H" p9 \2 V2 a
    ​+ y2 n$ O0 U! V; s  q% }
            输入示例& P$ k; Q  j% R' v. t' ~( Y
    z i z_iz % }3 C( Q! ?2 J# j3 T
    i
    2 t: p5 c$ B, Y​1 w3 G5 K* }+ r* B: c6 A
            编码器的潜在嵌入
    + s$ Q% \8 k( `9 c; D& f( ~9 _0 f) Cy i y_iy
    0 n0 F8 v3 [% E. Z: mi
    * v. V' [" y% B& [3 e​3 B- _0 {: |1 K7 o
            使用聚类层计算的软聚类分配
    3 T" }) k/ Y6 A: d4 ^Θ ΘΘ        聚类层的参数
    / U$ s" l+ _0 w. Xp i k p_{ik}p * j/ y7 h/ T& J( i- p
    ik; O- [. k: m) c* W) T
    ​  }6 {, P( r& M1 [
            probability for the i-th sample to be assigned to the k-th cluster7 B6 \9 I* ]5 H9 |8 u7 C
    " S9 F! B0 G3 w" M0 \
    7 o* h6 [$ m" h0 x
    我们采用[32]提出的聚类目标和优化算法。聚类目标是最小化当前模型概率聚类预测P和目标分布Q之间的KL散度:& K- K- B  w* r8 a# u2 R

    , ]4 D, O) W% q7 H
      w( [) E' `" b0 y9 D: P: r目标分布旨在通过标准化和将每个值推到更接近0或1的值来加强当前的群集分配。反复应用将P转换为Q的函数将最终导致硬分配向量。使用以下等式计算目标分布的每个成员:" ?% Y! A5 F2 Q- t' [* O3 A: \7 b
    7 l3 {9 l4 Q! _8 {  S
    2 I- y: A" a6 M. X" n: k( b7 E
    聚类层由为编码训练集计算的K均值质心初始化。优化以期望最大化(EM)的方式进行。
    0 D9 V! I1 F: I' k* z$ t在期望步骤期间,整个模型是固定的,并且目标分布Q被更新。在最大化阶段,优化模型以最小化聚类损失Lcluster。7 A  Y# Q, b7 g' V
    - i* R- `5 ]+ L& K- ^  [# _+ E
    3.4. Normality Scoring
    ' T9 M5 Y* R& S3 E! _该模型支持两种类型的多模分布。一个是集群分配级别;另一个是在软分配向量级别。例如,一个动作可能被分配给多个集群(集群级分配),导致多模式软分配向量。8 a' |7 O; o( M1 k6 n6 d% S
    软分配向量本身(捕获动作)也可以通过多模态分布建模。
    , G  h8 N" ]% r: x; p; Y
    : ~7 i  _, w% B: U1 P5 M- I$ bDirichlet过程混合模型(DPMM)是评估比例数据分布的一种有效方法。它满足我们所需的设置:(i)估计(拟合)阶段,在此阶段,一组分布参数为评估,和(ii)推理阶段,为每个嵌入样本使用拟合模型。彻底的Blei和Jordan[4]给出了该模型的概述。
    ; `. H+ C9 S- a2 I
    6 Z3 ~# Y$ A+ S5 ]7 A7 IDirichlet过程混合模型(DPMM)是评估比例数据分布的有效方法。它符合我们要求的设置:
    0 {6 J" d# @' {$ P3 i(i) 估计(拟合)阶段,在此期间评估一组分布参数,以及
    4 {* K% _! I2 i" ^% f/ e(ii)推理阶段,使用拟合模型为每个嵌入样本提供分数。Blei和Jordan[4]对模型进行了全面概述。
    - q3 ?6 K# r( r* l, b* N/ y4 H' ^  `7 K4 L' I2 ?
    DPMM是单峰Dirichlet分布的常见混合扩展,并使用Dirichllet过程,这DirichletDistribution的无限维扩展。该模型是多模态的,能够将每个模式捕获为混合成分。拟合模型具有多个模式,每个模式表示对应于一个正常行为的一组比例。在测试时,使用拟合模型通过其对数概率对每个样本进行评分。[4,8]中提供了关于DPMM使用的进一步解释和讨论。" [' V: ^, j+ a& A: O; X+ `

    0 b1 P5 R7 B/ K; n: F3.5. Training
    ' b1 h8 M3 D5 \& O* Z% y! c% T该模型的训练阶段包括两个阶段,一个是自动编码器的预训练阶段,其中网络的聚类分支保持不变,另一个是微调阶段,其中嵌入和聚类都得到优化。具体而言:$ q1 l' w# B0 L4 ]
    ' J- E6 s; W2 D, H  \& i
    Pre-Training: 该模型通过最小化重建损失(表示为Lrec)来学习编码和重建序列,Lrec是原始瞬时位姿图和ST-GCAE重建的位姿图之间的L2损失
    4 B0 K# y) H6 u3 }+ P
    0 X2 a3 y' |* pFine-Tuning:; S) G, ], M1 I- g) r  K
    该模型优化了由重建损失和聚类损失组成的组合损失函数。, j' [9 s1 ]: l1 W4 \- }5 R
    进行优化,使得聚类层优化为w.r.t.Lcluster,解码器优化为w.r.t.Lrec,编码器优化为w.r.t.两者。
    . u" Z9 j7 m* T3 q2 G集群层的初始化是通过Kmeans完成的。如[9]所示,当编码器针对这两种损失进行优化时,解码器保持不变,并充当正则化器,以保持编码器的嵌入质量。# w6 i. k2 l5 f
    本阶段的综合损失为:
    " q, j- y5 g% @# K6 s4 O: X9 [% T4 A( Z9 o/ U6 v  S

      ~9 z/ r( z0 o% S6 }
    ) d, x" z- ~! e1 m8 g实现细节
    9 a$ s; [5 X" l+ @" G  v7 B$ [% X) {* I
    2 w8 ^( O% V) k" c: m. H
      n: S! ~0 v5 {$ ]1 R  g$ J
    def calc_reg_loss(model, reg_type='l2', avg=True):
    2 X" n& N( N; x% |9 {    reg_loss = None( W2 R  c8 z; c8 Y8 C2 Q
        parameters = list(param for name, param in model.named_parameters() if 'bias' not in name)
    ' K" i" q  H/ L( H2 j$ F- y! Y    num_params = len(parameters)
    ! W7 D- R% L" n/ W$ Y9 B    if reg_type.lower() == 'l2':
    - E! I! V) Y" t( u        for param in parameters:
    ) f4 V. R4 }% N            if reg_loss is None:0 V6 q% w( p- ]" ^+ b- X+ Q4 K
                    reg_loss = 0.5 * torch.sum(param ** 2)
    , N6 R# v9 ?/ O- m) b0 y            else:( ]6 s, M. U# `0 Q! n+ K& r
                    reg_loss = reg_loss + 0.5 * param.norm(2) ** 2
    7 J1 e3 ?+ {3 v3 F
    5 o& [4 G. i; }; g        if avg:4 T# m3 h$ `, A- p# {
                reg_loss /= num_params+ ]9 u' C% W* V' [7 F5 I
            return reg_loss
    ! H, d0 ?3 O1 M- |1 m# f    else:% d0 u3 ~' e5 U& O- Z2 B. T6 P5 P
            return torch.tensor(0.0, device=model.device)2 [" k$ S* j) V/ V; c- h9 h2 ]
    1
    : B3 a/ G) Q) h( v3 g# \2
    % R: |/ m6 m1 N% u3/ }" U7 q1 w9 q% i: u3 Q' r, [
    45 `+ u3 M/ d: A6 U! V. L3 c
    5
    6 a, Q  |% H  e) P7 J3 Q8 D66 t$ T9 j  @7 W7 {& l7 Z4 ?0 r
    78 z' d7 Q2 D* X# O9 x  K* M
    8# B0 ]" R$ x1 u: z% ~
    9
    5 ^. @6 d. X& X' t10
    , f8 ~9 f. |: r) v9 ]& B  Z110 B  }" p7 E# b& s1 Z# f5 R
    12
    % Z  Z% T; t  b  P133 }; J" B1 w( h$ w3 T
    14
    * O( ]% L% o) s1 Q9 I: ]; d$ G15- j/ a9 c" S0 r: L0 k/ w/ U2 G
    16  V* F& H. z- k; z* b$ @8 }

    $ d, d* r2 M+ h7 S: K" |( [7 `0 X5 l+ ~1 X0 a, _" Y" K

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

    $ L+ P+ P' B0 Y/ i2 f
    zan
    转播转播0 分享淘帖0 分享分享0 收藏收藏0 支持支持0 反对反对0 微信微信
    您需要登录后才可以回帖 登录 | 注册地址

    qq
    收缩
    • 电话咨询

    • 04714969085
    fastpost

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

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

    蒙公网安备 15010502000194号

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

    GMT+8, 2026-10-8 06:30 , Processed in 1.289822 second(s), 50 queries .

    回顶部