QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 3171|回复: 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 V; [1 X( ^* L$ p) L6 [
    ' m- g( i5 I$ b: N
    骨架图算法/ j! Q5 A- ^, H' l; M! P) a0 f5 L8 i( `, E

    2 \5 C: D& W- e. I6 T7 f" S' K: b6 g4 q* A) u
    Graph Embedded Pose Clustering for Anomaly Detection
    3 G: q& i1 Y' {% x1 @paper        code1 O1 N5 J6 H; U
    https://arxiv.org/abs/1912.11850        https://github.com/amirmk89/gepc8 _: X7 T4 X+ ?0 z% U
    我们提出了一种用于人类行为异常检测的新方法。我们的方法直接适用于可以从输入视频序列计算的人体姿势图。这使得分析独立于扰动参数,如视点或照明。我们将这些图映射到一个潜在空间并将它们聚类。然后,每个操作都由其对每个聚类的软赋值来表示。这为数据提供了一种“词袋”表示,其中每个动作都由其与一组基本动作词的相似性来表示。然后,我们使用基于狄利克雷过程的混合物,这对于处理比例数据(例如我们的软赋值向量)很有用,以确定一个动作是否正常。
    ( {/ U! `2 r3 c- e
    ; G- B" t: f. K' `7 M3 w8 ^; v5 a首先,我们对输入数据使用人体姿态检测器。这抽象了问题,并防止下一步处理诸如视点或照明变化等有害参数。人的行为被表示为时空图,我们将其嵌入(第3.1、3.2小节)并聚类(第3.3小节)到一些潜在空间中。现在,每个动作都表示为一组基本动作的软分配向量。这抽象了动作的基本类型(即细粒度或粗粒度),从而进入学习其分布的最后阶段。我们用于学习软分配向量分布的工具是Dirichlet过程混合(第3.4小节),我们将模型拟合到数据中。然后使用该模型确定动作是否正常。
    * s) m% j3 e7 W! S
    & f/ v0 ~# E# q5 ~1 n6 [+ m& s' j图的每个节点对应于一个关键点、一个身体关节,每个边表示两个节点之间的某种关系。 存在许多"关键点关系",如解剖学上定义的物理关系(例如,左手腕和肘部连接)和由运动定义的动作关系,这些运动往往在特定动作的上下文中高度相关(例如,跑步时左右膝盖倾向于朝相反方向移动)。图的方向来自于这样一个事实,即一些关系是在优化过程中学习的,并且不是对称的。这种表示的一个好处是紧凑,这对于高效的视频分析非常重要。& D/ H3 t' V1 v# G
    为了在时间上扩展,将从视频序列中提取的姿势关键点表示为姿势图的时间序列。 时间姿势图是人体关节位置的时间序列。时域邻接可以类似地通过连接连续帧中的关节来定义,允许我们利用姿势图序列的空间和时间维度执行图卷积运算
    , v% G0 f/ m. |- `% a' n
    - ?9 K7 @, O2 F5 Z* K我们提出了一种基于深度时态图自动编码器的结构,用于嵌入时态姿态图。 基于图2所示ST-GCN的基本块设计,我们将基本GCN算子替换为新的空间注意力图卷积,如下所示。
    ) I: U) t# R" y# ]4 L7 R  v. y% e/ E* l
    3.2. Spatial Attention Graph Convolution* Z5 h& v/ a! A( y# d
    我们提出了一个新的图算子,如图3所示,它使用三种类型的邻接矩阵:静态、全局学习和推断(基于注意力)。每个邻接类型使用单独的权重应用其自己的GCN。4 S" i9 `: Q% v5 q$ I" g) g+ z
    7 z6 T" G% |7 w' ?
    GCN的输出按通道维度堆叠。采用1×1卷积作为加权叠加输出的可学习缩减度量,并提供所需的输出信道数。
    ! K/ n% _, A6 G0 w. {* ]1 V6 V
    1 W0 u& b  o- H8 {* f, E三个邻接矩阵捕捉了模型的不同方面:
    / z6 P$ W, C, S' L5 w(i)使用身体部位连通性作为优先于节点关系,使用静态邻接矩阵表示。& l6 o, z4 k( ?5 _4 Q" T
    (ii)由全局邻接矩阵捕获的数据集级关键点关系,以及- `! R  B9 b/ Y1 p
    (iii)由推断邻接矩阵获取的样本特定关系。最后,可学习约简度量对不同的输出进行加权
    ) G% B  ~/ y4 w9 @6 @# }* z
    % I1 O/ ]/ X; ?# o+ j& N$ a
    ( ~+ \+ e0 q" k  C: x' m, y9 z后续段落介绍了静态、全局学习和推断的邻接矩阵的设置方法,即图3中的A,B和C,在此略过。
    : W: P8 U6 U( K; S3.3. Deep Embedded Clustering& Y! T! |: P4 a
    为了构建我们的底层动作词典,我们采用训练集样本,并将它们联合嵌入和聚类到一些潜在空间中。然后,每个样本由其分配给每个底层聚类的概率表示。选择目标是为了提供不同的潜在集群,这些集群上存在动作。
    $ j" K  O& j3 l5 R! t9 k7 z" c! [6 g! r+ @
    我们采用了深嵌入聚类的概念[32],用我们的ST-GCAE架构对时间图进行聚类。所提出的聚类模型由编码器、解码器和软聚类层三部分组成。
    , ^1 }1 \3 T3 b  |; J1 E* r! I/ |1 K$ W" j
    具体地说,我们的ST-GCAE模型保持了图的结构,但使用了较大的时间步长和不断增加的通道数来将输入序列压缩为潜在向量。解码器使用时间上采样层和额外的图卷积块,用于逐渐恢复原始信道计数和时间维度。
    2 P& B- n; B5 F; Q
    7 P1 v& `7 h4 t0 F- @  ^ST-GCAE的嵌入是数据聚类的起点。在我们的聚类优化阶段,对基于重构的初始嵌入进行微调,以达到最终的聚类优化嵌入。1 ^. \/ H' D0 Y) A; C8 d

    ) d! A  u+ m+ z& H' m符号        表示( q6 h7 T' g0 _0 H! [0 G
    x i x_ix
    , i$ m0 L- @- t" a2 o: C$ vi
    5 A0 q6 P  ?8 Q8 n. b* F" _& D​
    ' t9 \$ f) m& _4 G6 g8 c         输入示例
    / [5 {4 U5 ?5 ?2 u' v( u; ^9 i6 A0 Hz i z_iz
    $ P8 I0 H# _3 M0 l* ?i$ q0 x) R+ `9 I7 D: H- p
    ​/ W# o( T- ?& j
            编码器的潜在嵌入# k! c0 x* w  `% E- m4 }
    y i y_iy
    % k' Z& Q+ b  c+ i6 Ni3 G6 t" T) X6 q$ U5 e( s5 X7 Y
    ​* b: }0 F7 ^) r9 H$ U" `6 n
            使用聚类层计算的软聚类分配
    9 t9 R; H: ], Z$ c# l( ^Θ ΘΘ        聚类层的参数
    3 `: S1 u+ D# m1 x" y- l* ^+ ?3 [# Ap i k p_{ik}p
    1 H$ U1 a  t) b4 Oik2 O6 o9 L9 r2 z. C. D3 F4 `
    ​1 }" m# e7 m1 [/ V1 N: h
            probability for the i-th sample to be assigned to the k-th cluster
    : f* D! \. g$ M  _3 G/ {; o" G8 p: Z
    # ^( G. S$ ?' u5 p9 m% g/ n5 ]  v% d1 Y1 x
    我们采用[32]提出的聚类目标和优化算法。聚类目标是最小化当前模型概率聚类预测P和目标分布Q之间的KL散度:
      Q4 j1 y3 W/ T+ k0 a3 N+ e% d7 @1 m% \$ m; R( T* n
    / Z2 h9 ]  x  M  ^( m
    目标分布旨在通过标准化和将每个值推到更接近0或1的值来加强当前的群集分配。反复应用将P转换为Q的函数将最终导致硬分配向量。使用以下等式计算目标分布的每个成员:& G) h; M0 D+ s* q/ V) X- `& F

    " L, d6 D; \4 f2 p; V0 w
    : `& ^  [5 o, e; |! H8 ~聚类层由为编码训练集计算的K均值质心初始化。优化以期望最大化(EM)的方式进行。5 L; V  ?9 m  @6 p5 t9 g7 _2 o
    在期望步骤期间,整个模型是固定的,并且目标分布Q被更新。在最大化阶段,优化模型以最小化聚类损失Lcluster。
    0 Y" h- d. c0 ^! L7 n6 b, Q
    ( H5 _& o- a2 w  j; z+ Q3.4. Normality Scoring
    5 P& n; r. ?4 Q& Z/ t+ E该模型支持两种类型的多模分布。一个是集群分配级别;另一个是在软分配向量级别。例如,一个动作可能被分配给多个集群(集群级分配),导致多模式软分配向量。4 T) f3 T% e; |) V4 R% H
    软分配向量本身(捕获动作)也可以通过多模态分布建模。. _5 @" G; b' v; f8 y7 }

    + ^* z* N, o6 p: bDirichlet过程混合模型(DPMM)是评估比例数据分布的一种有效方法。它满足我们所需的设置:(i)估计(拟合)阶段,在此阶段,一组分布参数为评估,和(ii)推理阶段,为每个嵌入样本使用拟合模型。彻底的Blei和Jordan[4]给出了该模型的概述。5 |- J$ }6 E/ O' v2 K" S% l: l/ X
    0 ~! Y0 d3 n. p$ O5 V) w! }4 K
    Dirichlet过程混合模型(DPMM)是评估比例数据分布的有效方法。它符合我们要求的设置:" R3 J5 i& d- r. Q; f, r
    (i) 估计(拟合)阶段,在此期间评估一组分布参数,以及
    & f# @; `8 a5 S/ h1 ^/ N(ii)推理阶段,使用拟合模型为每个嵌入样本提供分数。Blei和Jordan[4]对模型进行了全面概述。5 a8 v( |0 a) }% b, |1 s) i- |$ k
    0 Y; r9 `3 P; O
    DPMM是单峰Dirichlet分布的常见混合扩展,并使用Dirichllet过程,这DirichletDistribution的无限维扩展。该模型是多模态的,能够将每个模式捕获为混合成分。拟合模型具有多个模式,每个模式表示对应于一个正常行为的一组比例。在测试时,使用拟合模型通过其对数概率对每个样本进行评分。[4,8]中提供了关于DPMM使用的进一步解释和讨论。$ `) m0 [3 j* i4 v5 B
    ' M+ g, ?% m. H: T7 z
    3.5. Training
    ' E" N; }" E3 g) j, B: k该模型的训练阶段包括两个阶段,一个是自动编码器的预训练阶段,其中网络的聚类分支保持不变,另一个是微调阶段,其中嵌入和聚类都得到优化。具体而言:) j7 e6 {5 ~- ~: R5 @

    ( R6 V# l$ r1 j; v! kPre-Training: 该模型通过最小化重建损失(表示为Lrec)来学习编码和重建序列,Lrec是原始瞬时位姿图和ST-GCAE重建的位姿图之间的L2损失' j4 |, ]2 {0 v7 [. Y

    : S" h7 V2 G9 XFine-Tuning:
    " ?  v' X1 n7 N2 @* \( N) w( g8 r& Z该模型优化了由重建损失和聚类损失组成的组合损失函数。
    ! N' T7 H- t( H& [0 i1 a, c进行优化,使得聚类层优化为w.r.t.Lcluster,解码器优化为w.r.t.Lrec,编码器优化为w.r.t.两者。
    1 \0 K; r9 {0 ^# K& A3 u3 _& l集群层的初始化是通过Kmeans完成的。如[9]所示,当编码器针对这两种损失进行优化时,解码器保持不变,并充当正则化器,以保持编码器的嵌入质量。0 c% p6 ]6 I" t. B
    本阶段的综合损失为:! O, J2 a- v$ }

    ' p% n  T( E9 W9 a8 l- W5 T& C* c1 }" c5 ]: Q

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

    3 A# R6 H" G" X0 }7 J, ]$ H$ ^$ i9 g3 k/ y! h) G
    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-9 04:19 , Processed in 0.463298 second(s), 52 queries .

    回顶部