QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 3040|回复: 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 Clustering1 A% o$ W- Q' _2 t- n/ h9 N6 K

      v+ a& [; d5 L4 v4 ~" l骨架图算法
    6 t; m) _! r% L3 ]6 i3 ^4 H, ]' I) A( I
    + z5 q: g. `0 h4 r3 l1 g% f1 F; Z
    Graph Embedded Pose Clustering for Anomaly Detection! j5 Y4 ?2 z8 w  H! t* G
    paper        code
    5 X! o3 v2 }8 h' ?5 \( qhttps://arxiv.org/abs/1912.11850        https://github.com/amirmk89/gepc
    ) @" H2 ?, K# V6 o5 @* ]我们提出了一种用于人类行为异常检测的新方法。我们的方法直接适用于可以从输入视频序列计算的人体姿势图。这使得分析独立于扰动参数,如视点或照明。我们将这些图映射到一个潜在空间并将它们聚类。然后,每个操作都由其对每个聚类的软赋值来表示。这为数据提供了一种“词袋”表示,其中每个动作都由其与一组基本动作词的相似性来表示。然后,我们使用基于狄利克雷过程的混合物,这对于处理比例数据(例如我们的软赋值向量)很有用,以确定一个动作是否正常。
    ) X1 H. U1 ~% w: K' w" M; K3 m5 f: _" U& N, D6 _8 I
    首先,我们对输入数据使用人体姿态检测器。这抽象了问题,并防止下一步处理诸如视点或照明变化等有害参数。人的行为被表示为时空图,我们将其嵌入(第3.1、3.2小节)并聚类(第3.3小节)到一些潜在空间中。现在,每个动作都表示为一组基本动作的软分配向量。这抽象了动作的基本类型(即细粒度或粗粒度),从而进入学习其分布的最后阶段。我们用于学习软分配向量分布的工具是Dirichlet过程混合(第3.4小节),我们将模型拟合到数据中。然后使用该模型确定动作是否正常。7 N  Q" ?2 q# u! n7 U

    - a# [2 G7 E) E# f图的每个节点对应于一个关键点、一个身体关节,每个边表示两个节点之间的某种关系。 存在许多"关键点关系",如解剖学上定义的物理关系(例如,左手腕和肘部连接)和由运动定义的动作关系,这些运动往往在特定动作的上下文中高度相关(例如,跑步时左右膝盖倾向于朝相反方向移动)。图的方向来自于这样一个事实,即一些关系是在优化过程中学习的,并且不是对称的。这种表示的一个好处是紧凑,这对于高效的视频分析非常重要。
    . U% B5 Z9 z1 a, b0 [为了在时间上扩展,将从视频序列中提取的姿势关键点表示为姿势图的时间序列。 时间姿势图是人体关节位置的时间序列。时域邻接可以类似地通过连接连续帧中的关节来定义,允许我们利用姿势图序列的空间和时间维度执行图卷积运算
    ; e  m1 K8 _3 `- t7 f3 P; e* _& N0 u% ^* i+ S
    我们提出了一种基于深度时态图自动编码器的结构,用于嵌入时态姿态图。 基于图2所示ST-GCN的基本块设计,我们将基本GCN算子替换为新的空间注意力图卷积,如下所示。& h' }. L5 G" j

    3 r8 S; C/ z  ^. G3.2. Spatial Attention Graph Convolution4 ~" M0 C8 _0 @7 |- [6 I
    我们提出了一个新的图算子,如图3所示,它使用三种类型的邻接矩阵:静态、全局学习和推断(基于注意力)。每个邻接类型使用单独的权重应用其自己的GCN。; E. B: A( m3 F8 T

    5 Z' r; ?: t6 Z1 r7 c! Q9 MGCN的输出按通道维度堆叠。采用1×1卷积作为加权叠加输出的可学习缩减度量,并提供所需的输出信道数。
    0 c9 ~. X7 f! t. d. V1 i/ w
    1 l# e+ x3 p% c三个邻接矩阵捕捉了模型的不同方面:
    * Q$ r" o! e6 X( w  \; M(i)使用身体部位连通性作为优先于节点关系,使用静态邻接矩阵表示。
    ) {; T# {3 ~' y6 D' S, \2 ?(ii)由全局邻接矩阵捕获的数据集级关键点关系,以及; n$ `& `: J7 G) _3 `% C: i$ P* Z
    (iii)由推断邻接矩阵获取的样本特定关系。最后,可学习约简度量对不同的输出进行加权- ]1 f  W' m* Q: T
    9 Q2 i" L4 }- [  b  x- W1 F
    3 c2 b: q, p: E" r" p9 w7 J
    后续段落介绍了静态、全局学习和推断的邻接矩阵的设置方法,即图3中的A,B和C,在此略过。7 z4 P+ N) \$ F* y& q
    3.3. Deep Embedded Clustering
      b+ l& c/ }; C6 }4 ]7 `为了构建我们的底层动作词典,我们采用训练集样本,并将它们联合嵌入和聚类到一些潜在空间中。然后,每个样本由其分配给每个底层聚类的概率表示。选择目标是为了提供不同的潜在集群,这些集群上存在动作。7 V% Z# q7 M" Z8 W0 ^
    / S6 V% g/ H, w- i9 {. W# ?# T0 |
    我们采用了深嵌入聚类的概念[32],用我们的ST-GCAE架构对时间图进行聚类。所提出的聚类模型由编码器、解码器和软聚类层三部分组成。" ]  K0 s0 o! {) S6 m3 `- f+ E$ h

    3 C5 J! H& ~! |+ ]+ A具体地说,我们的ST-GCAE模型保持了图的结构,但使用了较大的时间步长和不断增加的通道数来将输入序列压缩为潜在向量。解码器使用时间上采样层和额外的图卷积块,用于逐渐恢复原始信道计数和时间维度。4 I0 _( b; }- Y7 Y
      ^) M; J( g5 h+ s8 d1 ?
    ST-GCAE的嵌入是数据聚类的起点。在我们的聚类优化阶段,对基于重构的初始嵌入进行微调,以达到最终的聚类优化嵌入。) n+ t7 l5 U; \0 ]8 ^
    ' Y# B# m) f7 b/ u4 x" B
    符号        表示! Q& r: J9 |9 m
    x i x_ix
    0 P- g7 Y( B3 J! ~7 Ei7 r* E6 w$ Z, d3 d  @4 }/ I' z4 ^
      U# J5 F$ [8 M4 h
            输入示例  w6 b' c! e6 W: O: I6 ]* s# i0 f+ W
    z i z_iz . y" d& ?; p# t- b
    i
    4 B3 D/ Q8 i2 h# n3 M' K  q" z6 N' Y9 h5 S# N, P3 _
            编码器的潜在嵌入
    7 f9 w" `. q! D2 r+ Cy i y_iy
    $ z+ @/ l9 w+ e& D: e9 L4 ai1 `% U/ j7 d, T! [2 g
    & W. l# t, P9 N  }$ h2 z
            使用聚类层计算的软聚类分配
    : c8 e7 j* {* T7 C1 P# W3 `  hΘ ΘΘ        聚类层的参数
    4 p! d0 y0 M% F1 S1 B' J/ U5 Zp i k p_{ik}p
    1 V  T: v( g6 E% ]! Qik
    9 {1 w- ~4 f' T3 A5 j. Y
    & a8 ~7 m* Q/ t         probability for the i-th sample to be assigned to the k-th cluster
    5 t; K, _. T, u+ O( z* ~+ j
    7 [( ]4 G. }) i& v$ g& p# i3 W
    5 T  Q& l7 |, N$ d我们采用[32]提出的聚类目标和优化算法。聚类目标是最小化当前模型概率聚类预测P和目标分布Q之间的KL散度:/ g7 x% M, F, m
      o. t7 `, k! P. e6 l

    3 \- T5 a# n& f1 h5 O% n. ^( \: Q目标分布旨在通过标准化和将每个值推到更接近0或1的值来加强当前的群集分配。反复应用将P转换为Q的函数将最终导致硬分配向量。使用以下等式计算目标分布的每个成员:0 j; b* |4 u( D, O

    * A. R5 z/ G2 A2 w2 _2 i$ q  j( n0 A/ y  M# L5 p$ V8 f
    聚类层由为编码训练集计算的K均值质心初始化。优化以期望最大化(EM)的方式进行。! f+ S( ]8 X3 G# @0 B' }/ E) i# l6 F
    在期望步骤期间,整个模型是固定的,并且目标分布Q被更新。在最大化阶段,优化模型以最小化聚类损失Lcluster。) N) o) s0 @# d) l8 D* p. ~

    $ F8 p6 F2 t# n5 U6 `3.4. Normality Scoring
    $ V' s) _% |# i) i  u! C该模型支持两种类型的多模分布。一个是集群分配级别;另一个是在软分配向量级别。例如,一个动作可能被分配给多个集群(集群级分配),导致多模式软分配向量。% ]) ^: J# I$ }$ Y# z( ]! R. ^
    软分配向量本身(捕获动作)也可以通过多模态分布建模。
    7 E3 d) q9 h  }. Y5 [; L: m! M' [2 m) B6 ]3 G. u7 G4 ~
    Dirichlet过程混合模型(DPMM)是评估比例数据分布的一种有效方法。它满足我们所需的设置:(i)估计(拟合)阶段,在此阶段,一组分布参数为评估,和(ii)推理阶段,为每个嵌入样本使用拟合模型。彻底的Blei和Jordan[4]给出了该模型的概述。
    0 f( ?- L, F1 ^: @' v2 c: ~0 b' P# ?3 E9 `/ b9 s6 e3 e
    Dirichlet过程混合模型(DPMM)是评估比例数据分布的有效方法。它符合我们要求的设置:; o5 @7 \# Z7 @/ E* J7 _5 Z( a
    (i) 估计(拟合)阶段,在此期间评估一组分布参数,以及6 I* h5 \1 i, |$ z
    (ii)推理阶段,使用拟合模型为每个嵌入样本提供分数。Blei和Jordan[4]对模型进行了全面概述。
    4 ]* ?# e* X0 h+ s. n5 G6 S$ `
    4 d. j( C3 o  u$ {5 j( IDPMM是单峰Dirichlet分布的常见混合扩展,并使用Dirichllet过程,这DirichletDistribution的无限维扩展。该模型是多模态的,能够将每个模式捕获为混合成分。拟合模型具有多个模式,每个模式表示对应于一个正常行为的一组比例。在测试时,使用拟合模型通过其对数概率对每个样本进行评分。[4,8]中提供了关于DPMM使用的进一步解释和讨论。
    0 D/ H1 i  o/ O( @& E* O6 m0 N% o
    * |4 P. V- r' A) K$ ]3.5. Training
    + s  A8 C9 Z* v  Q/ u* L该模型的训练阶段包括两个阶段,一个是自动编码器的预训练阶段,其中网络的聚类分支保持不变,另一个是微调阶段,其中嵌入和聚类都得到优化。具体而言:
    " }3 E1 M/ ]1 G$ S4 }2 C  P- @  A% C' D9 X1 ]4 ]6 A* X& t
    Pre-Training: 该模型通过最小化重建损失(表示为Lrec)来学习编码和重建序列,Lrec是原始瞬时位姿图和ST-GCAE重建的位姿图之间的L2损失
    7 G! h1 }6 ?) K! |4 d' B
    ; S5 _/ x) Q" X0 bFine-Tuning:9 J2 M1 U' M/ f' i: x
    该模型优化了由重建损失和聚类损失组成的组合损失函数。
    / \9 p7 N. o9 I* v' L进行优化,使得聚类层优化为w.r.t.Lcluster,解码器优化为w.r.t.Lrec,编码器优化为w.r.t.两者。2 x3 d6 X) w! J- h5 m! f* E# t
    集群层的初始化是通过Kmeans完成的。如[9]所示,当编码器针对这两种损失进行优化时,解码器保持不变,并充当正则化器,以保持编码器的嵌入质量。
    9 F6 o& @4 H$ ]: q本阶段的综合损失为:" W- z  Q. Z" C3 Q: {* o

    4 |, b  n0 N7 s& `: ~/ x) z7 F4 `! r1 i* G& H
    ' M# ?2 T4 d3 O- e9 I
    实现细节( r% U. Y8 j" a; h7 X9 e
    " H: n7 l8 }7 O* |; b. R: C
    7 G6 k5 `8 F- d% Q* B

    2 @4 d! Y1 a2 ?; u$ s$ Idef calc_reg_loss(model, reg_type='l2', avg=True):6 z! q$ l1 I$ g. U! B
        reg_loss = None
    ( l: t8 Q0 i& P, E0 q9 G$ s    parameters = list(param for name, param in model.named_parameters() if 'bias' not in name)* l. ]2 L. d' q  g4 ?' a1 i4 e
        num_params = len(parameters)  C$ ~7 l" P/ b! x0 s
        if reg_type.lower() == 'l2':* j3 I3 J  K  J' P" e
            for param in parameters:
    3 [: b2 x, v; o; p- N  J+ ^4 e            if reg_loss is None:3 D7 Q7 E( a) C5 l/ @$ \. e9 C# r8 E4 Y
                    reg_loss = 0.5 * torch.sum(param ** 2)3 g( z  V3 B+ {& K  x
                else:$ ]8 j; Y5 {4 A% B
                    reg_loss = reg_loss + 0.5 * param.norm(2) ** 2
    . e# Z0 c7 S  j: k, L$ z
    8 Y7 y& x  H, c. A        if avg:. o* g0 N1 b8 j. Z. ?
                reg_loss /= num_params
    1 U0 N* v$ [% _+ _# e        return reg_loss
    ' k! G+ O& a; W6 N# R9 u3 {: L9 ?    else:/ w+ I) B+ V; o* ?
            return torch.tensor(0.0, device=model.device)! L* p5 k) G5 D$ P, g/ a
    1
    1 N$ s; m+ R% F& m- e, h' }, _( M2/ c! y( w0 K2 A7 j5 i1 m; s- d
    3
    + s# F" ?: T3 E- x* z! i$ |- C4) X1 J* u% g9 L# d0 \- N5 Y
    5
    2 D& [1 t2 ]4 T: R# ~! \65 Y, Q( ]7 k, g3 ]
    7
    + v! Z' N& e' m" F0 u* ]! Z8
    ( _0 x% P3 U  \" x9* C1 S* x: k( v- K
    10
    0 a+ h6 V: p7 X2 J* T6 K11
    ) y) ?* |6 i7 ]9 G( L: J) Z12& ?, s+ [. |6 l! J7 d! _
    13
    / _+ |/ `" j& \  S$ Y9 ]141 @4 g3 S) |. B& u
    15! |( _) w6 W1 w( b( {7 F
    16
    $ W0 Z* O* w% K+ i" z
    ; @8 W! U9 S+ ^) c8 o! Y# w; V" w' T$ `3 ^

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

      [& C$ k' l2 R0 d6 a5 `
    zan
    转播转播0 分享淘帖0 分享分享0 收藏收藏0 支持支持0 反对反对0 微信微信
    您需要登录后才可以回帖 登录 | 注册地址

    qq
    收缩
    • 电话咨询

    • 04714969085
    fastpost

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

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

    蒙公网安备 15010502000194号

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

    GMT+8, 2026-4-15 09:09 , Processed in 0.450187 second(s), 51 queries .

    回顶部