QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 3056|回复: 0
打印 上一主题 下一主题

[其他资源] 骨架图算法Graph Embedded Pose Clustering

[复制链接]
字体大小: 正常 放大
杨利霞        

5273

主题

82

听众

17万

积分

  • TA的每日心情
    开心
    2021-8-11 17:59
  • 签到天数: 17 天

    [LV.4]偶尔看看III

    网络挑战赛参赛者

    网络挑战赛参赛者

    自我介绍
    本人女,毕业于内蒙古科技大学,担任文职专业,毕业专业英语。

    群组2018美赛大象算法课程

    群组2018美赛护航培训课程

    群组2019年 数学中国站长建

    群组2019年数据分析师课程

    群组2018年大象老师国赛优

    跳转到指定楼层
    1#
    发表于 2022-9-5 15:49 |只看该作者 |倒序浏览
    |招呼Ta 关注Ta
    骨架图算法Graph Embedded Pose Clustering
    ) E% w* V7 O9 `" X- c  v
    3 T3 ]/ f/ `5 Y. E# y0 m骨架图算法1 C0 C  g8 f$ q- m

    ) P; [# {! c, }% o- \0 @/ M9 Q5 j' t! ?" P4 l
    Graph Embedded Pose Clustering for Anomaly Detection
    ! E  p7 ?/ s0 U+ X3 Q" B: xpaper        code
    ) n# ~3 O5 g8 l2 x9 T% f! H& vhttps://arxiv.org/abs/1912.11850        https://github.com/amirmk89/gepc
    $ d. w) g1 U1 t/ _, t7 s4 q我们提出了一种用于人类行为异常检测的新方法。我们的方法直接适用于可以从输入视频序列计算的人体姿势图。这使得分析独立于扰动参数,如视点或照明。我们将这些图映射到一个潜在空间并将它们聚类。然后,每个操作都由其对每个聚类的软赋值来表示。这为数据提供了一种“词袋”表示,其中每个动作都由其与一组基本动作词的相似性来表示。然后,我们使用基于狄利克雷过程的混合物,这对于处理比例数据(例如我们的软赋值向量)很有用,以确定一个动作是否正常。+ G/ q# t0 ~- O
    3 P: `# a! n7 c( |" F
    首先,我们对输入数据使用人体姿态检测器。这抽象了问题,并防止下一步处理诸如视点或照明变化等有害参数。人的行为被表示为时空图,我们将其嵌入(第3.1、3.2小节)并聚类(第3.3小节)到一些潜在空间中。现在,每个动作都表示为一组基本动作的软分配向量。这抽象了动作的基本类型(即细粒度或粗粒度),从而进入学习其分布的最后阶段。我们用于学习软分配向量分布的工具是Dirichlet过程混合(第3.4小节),我们将模型拟合到数据中。然后使用该模型确定动作是否正常。
    ' z7 y* k/ o" Q) V2 N2 w0 D0 d* h5 H7 Y4 P/ E
    图的每个节点对应于一个关键点、一个身体关节,每个边表示两个节点之间的某种关系。 存在许多"关键点关系",如解剖学上定义的物理关系(例如,左手腕和肘部连接)和由运动定义的动作关系,这些运动往往在特定动作的上下文中高度相关(例如,跑步时左右膝盖倾向于朝相反方向移动)。图的方向来自于这样一个事实,即一些关系是在优化过程中学习的,并且不是对称的。这种表示的一个好处是紧凑,这对于高效的视频分析非常重要。4 p& r) b1 ]1 `
    为了在时间上扩展,将从视频序列中提取的姿势关键点表示为姿势图的时间序列。 时间姿势图是人体关节位置的时间序列。时域邻接可以类似地通过连接连续帧中的关节来定义,允许我们利用姿势图序列的空间和时间维度执行图卷积运算: r# d( P/ l' w5 U. [

    ; {% r6 c( T$ u$ ~$ Z' c4 h我们提出了一种基于深度时态图自动编码器的结构,用于嵌入时态姿态图。 基于图2所示ST-GCN的基本块设计,我们将基本GCN算子替换为新的空间注意力图卷积,如下所示。
    * u5 _+ H( L3 Y9 e4 b" |0 K( a# b% U  O" o, X
    3.2. Spatial Attention Graph Convolution
    / i2 v3 i; u  N1 k! |我们提出了一个新的图算子,如图3所示,它使用三种类型的邻接矩阵:静态、全局学习和推断(基于注意力)。每个邻接类型使用单独的权重应用其自己的GCN。
    / e) i7 q# r: i+ v8 v/ R3 e9 D1 A8 t+ ~1 A6 L/ y/ w) J- y6 Q
    GCN的输出按通道维度堆叠。采用1×1卷积作为加权叠加输出的可学习缩减度量,并提供所需的输出信道数。
    ) e1 z0 a. P: n* T% |2 \! w$ `  B0 ^: v; d
    三个邻接矩阵捕捉了模型的不同方面:1 M. i0 P- E1 n, t' L% y
    (i)使用身体部位连通性作为优先于节点关系,使用静态邻接矩阵表示。0 y8 |- ^- X9 ^. K) z
    (ii)由全局邻接矩阵捕获的数据集级关键点关系,以及
    , _' z, e: @- d: f(iii)由推断邻接矩阵获取的样本特定关系。最后,可学习约简度量对不同的输出进行加权5 z+ j( y  S. k  l$ X7 n0 U

    # x- Q' h% c3 ?+ p, X9 B! f# @$ f5 `8 o" \+ W5 R: B4 I
    后续段落介绍了静态、全局学习和推断的邻接矩阵的设置方法,即图3中的A,B和C,在此略过。
    3 U2 W$ ~3 `  s3.3. Deep Embedded Clustering
      |! _3 U! N+ G+ b. w: i5 O. `为了构建我们的底层动作词典,我们采用训练集样本,并将它们联合嵌入和聚类到一些潜在空间中。然后,每个样本由其分配给每个底层聚类的概率表示。选择目标是为了提供不同的潜在集群,这些集群上存在动作。
    , O+ W8 }( k) [# @# i+ p' _4 w0 S* V* v3 X. X% Y+ [
    我们采用了深嵌入聚类的概念[32],用我们的ST-GCAE架构对时间图进行聚类。所提出的聚类模型由编码器、解码器和软聚类层三部分组成。& Y9 m1 F& {5 o$ |: i1 x

    & j$ R* H: h+ g5 k; v具体地说,我们的ST-GCAE模型保持了图的结构,但使用了较大的时间步长和不断增加的通道数来将输入序列压缩为潜在向量。解码器使用时间上采样层和额外的图卷积块,用于逐渐恢复原始信道计数和时间维度。  x1 E- a( s: y' i& q7 T1 L

    - i5 O; h3 _1 hST-GCAE的嵌入是数据聚类的起点。在我们的聚类优化阶段,对基于重构的初始嵌入进行微调,以达到最终的聚类优化嵌入。
    0 @" u4 [( o% |' Y% _6 C) b- O
    1 N; y, `% X- I5 w, b符号        表示
    6 F, ?, w0 m! m/ j0 f4 B9 Yx i x_ix " }4 t9 K! O5 R; D) Q  z
    i
    ; n* F2 i, F5 L( s8 E$ k! W" m+ g" U% J$ Q3 t) O
            输入示例
    / y6 |0 R8 I+ ?$ R/ a; ^. hz i z_iz , k0 W9 e0 G4 `5 t
    i( y$ [; A4 y* i
    . b! @/ X6 J6 g- s" \; s
            编码器的潜在嵌入
    9 W$ R& v* \; r+ ^3 iy i y_iy
    * J. I3 E$ |  K. Mi
    : `$ a7 F$ t+ @8 y! R- q. |7 C! _9 p+ g+ l' l5 @. n
            使用聚类层计算的软聚类分配
    ( `0 X- ?" a3 \9 ZΘ ΘΘ        聚类层的参数1 e4 U% `/ y5 B! R
    p i k p_{ik}p
    % Y4 U4 _  u# M- eik
    % o! f7 f& ?; p7 ]# G0 S5 s- B8 K3 F  F  u
            probability for the i-th sample to be assigned to the k-th cluster. {! z. Z8 {  L$ U; a/ H9 b! O

    ( v/ F% \4 m+ Y* X
    ) K! o3 Z9 }. O# J* X8 r我们采用[32]提出的聚类目标和优化算法。聚类目标是最小化当前模型概率聚类预测P和目标分布Q之间的KL散度:
    4 x6 c' p8 s; H- b8 N
    0 W# J2 Y/ c6 i" R$ w# X4 q! h, F* T0 X' g; t2 @8 b9 M
    目标分布旨在通过标准化和将每个值推到更接近0或1的值来加强当前的群集分配。反复应用将P转换为Q的函数将最终导致硬分配向量。使用以下等式计算目标分布的每个成员:
    7 n; q9 d+ o8 l* A5 d
    + m! u5 B& B- d/ b1 ]/ n( P$ }6 t- N# G! H8 D! y$ @
    聚类层由为编码训练集计算的K均值质心初始化。优化以期望最大化(EM)的方式进行。, @6 ^, [4 i: \" l, A; K3 W6 {
    在期望步骤期间,整个模型是固定的,并且目标分布Q被更新。在最大化阶段,优化模型以最小化聚类损失Lcluster。
    - t5 _9 G. M. ?' F9 P* F+ s
    / V4 \3 r6 r; {" V/ K8 _3.4. Normality Scoring3 H3 S0 z( p1 L2 W+ v: ?
    该模型支持两种类型的多模分布。一个是集群分配级别;另一个是在软分配向量级别。例如,一个动作可能被分配给多个集群(集群级分配),导致多模式软分配向量。
    5 P9 q- H8 \# `  ?: k3 j软分配向量本身(捕获动作)也可以通过多模态分布建模。
    5 s0 P/ `$ S2 l8 Q9 I0 z  z0 d2 p; Z7 j' k* T6 \2 g% l' \1 {
    Dirichlet过程混合模型(DPMM)是评估比例数据分布的一种有效方法。它满足我们所需的设置:(i)估计(拟合)阶段,在此阶段,一组分布参数为评估,和(ii)推理阶段,为每个嵌入样本使用拟合模型。彻底的Blei和Jordan[4]给出了该模型的概述。; ^; ]5 Q( f+ ~% w, F4 i' D' |

    ) r- D8 @& j! U/ {0 A6 GDirichlet过程混合模型(DPMM)是评估比例数据分布的有效方法。它符合我们要求的设置:
    / V, B2 }0 K. L; P0 ?(i) 估计(拟合)阶段,在此期间评估一组分布参数,以及7 G  ]9 A6 f0 B
    (ii)推理阶段,使用拟合模型为每个嵌入样本提供分数。Blei和Jordan[4]对模型进行了全面概述。
    $ k1 G% [* h% O8 Y! R! `$ c
    9 A5 K( n5 u( C* Z: m' H( \DPMM是单峰Dirichlet分布的常见混合扩展,并使用Dirichllet过程,这DirichletDistribution的无限维扩展。该模型是多模态的,能够将每个模式捕获为混合成分。拟合模型具有多个模式,每个模式表示对应于一个正常行为的一组比例。在测试时,使用拟合模型通过其对数概率对每个样本进行评分。[4,8]中提供了关于DPMM使用的进一步解释和讨论。, {6 s# q; V1 r' E- ~( j
    ! Q. @9 n& r# c  [
    3.5. Training: G  q' U0 F, Y$ _  \2 j4 c
    该模型的训练阶段包括两个阶段,一个是自动编码器的预训练阶段,其中网络的聚类分支保持不变,另一个是微调阶段,其中嵌入和聚类都得到优化。具体而言:
    - o% q. Z2 i9 l* f+ R3 |8 a  @+ j5 f! F3 A3 X* \0 J
    Pre-Training: 该模型通过最小化重建损失(表示为Lrec)来学习编码和重建序列,Lrec是原始瞬时位姿图和ST-GCAE重建的位姿图之间的L2损失8 x/ h8 J3 b" Q4 I$ \
    ( d4 X0 o, ?- O$ M6 `' g& a
    Fine-Tuning:9 B8 y1 ]( I" |, d" c2 Q; I
    该模型优化了由重建损失和聚类损失组成的组合损失函数。
    ; @; @+ \* X/ |# q进行优化,使得聚类层优化为w.r.t.Lcluster,解码器优化为w.r.t.Lrec,编码器优化为w.r.t.两者。3 `! q. m3 |) D5 d3 O- ~% j- W
    集群层的初始化是通过Kmeans完成的。如[9]所示,当编码器针对这两种损失进行优化时,解码器保持不变,并充当正则化器,以保持编码器的嵌入质量。
    2 H" t4 s" Z6 M* @7 z$ M- m本阶段的综合损失为:9 P0 `+ N6 j5 |" |( H0 t

    . K6 J: s8 P% Q0 f/ W5 J$ q; Y1 u, R/ K8 s

    % v! w4 r% n, R& K6 R实现细节
    ( H0 \8 l, o, W
    . q. n& g% I/ j) ]& D) K
    : j- P6 y% \8 E4 j: d9 v. D$ ]
    + k: _3 s1 D, X7 Ddef calc_reg_loss(model, reg_type='l2', avg=True):! u7 j& O2 a; }; a, D5 ?
        reg_loss = None7 v8 C2 L5 E1 x. R
        parameters = list(param for name, param in model.named_parameters() if 'bias' not in name)
    0 T) N* g; y3 ~7 q; O    num_params = len(parameters)
    7 h2 L- G$ o/ U, z1 T    if reg_type.lower() == 'l2':
    - _5 ]  y5 B) k        for param in parameters:/ a$ `- V1 n6 v" h
                if reg_loss is None:- H) ?1 u6 I  G& d0 s
                    reg_loss = 0.5 * torch.sum(param ** 2)
    * ]3 R$ `+ X: T+ p% L. t            else:
    * ^+ N- E3 q3 _- V) {& b                reg_loss = reg_loss + 0.5 * param.norm(2) ** 2+ G( `3 j6 _5 P; c( v" c0 s* X9 s( i

    % ?$ X; a5 ]" H- d$ G        if avg:" G& A+ x" c3 [0 K9 d: s
                reg_loss /= num_params
    * S) h" s- _- Q9 W0 O* r- W        return reg_loss& u& i% {7 A! J6 o0 C  z
        else:
    2 s+ ]1 {; S7 t! q        return torch.tensor(0.0, device=model.device)
    * K" X+ M2 _, o% J& G1- ~" n8 S" }4 \" p8 w2 e& n8 D
    2
    ' A2 V0 h. T9 C3 j( n3
    5 x& A- j! r: u+ M. w  B2 ~! k/ j4
    , R' i# i8 C/ S9 V1 _5
    - Q1 G0 i" n) `/ R9 c5 T& q+ a8 h6" m6 O. ^1 S; N; M' q% g) ~7 A4 p5 V
    7
    - f  j4 m+ t/ N. ^) [7 g0 q8  g# I9 ]* N$ x/ @$ v3 @: f5 k
    9
    6 A9 H8 U5 u( N6 {. z" B. g7 g0 q10; Q4 b5 f; _3 o6 g# J0 r0 O5 r: n
    11
    : j, V: R) s# j) y5 r7 a* e129 {5 f8 B9 ?9 Y$ Q# e+ @% G! J
    136 b+ Z8 t+ b4 J4 X
    14
    . J0 C  c1 y( |* {15
    4 w# o" `: p6 v- L$ ~' g! ^. S16) N1 Y3 k# @) T7 P
    0 ~6 r0 R( q% Z+ u  O4 }! |& \

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

    回顶部