QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 3067|回复: 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 C5 S7 ~3 w' u

    " I6 z8 s; e: l9 E- F骨架图算法: g( ]6 d5 [3 N! p: n+ k, ]

    # R  k- p6 e5 Q) t3 w8 q: {
    ) U5 ^1 i; x5 q$ n/ f* WGraph Embedded Pose Clustering for Anomaly Detection
    4 ~& }) J# g3 f( ]7 ?0 cpaper        code# |9 v( `+ I8 Y3 \; ]
    https://arxiv.org/abs/1912.11850        https://github.com/amirmk89/gepc
    - P& H: r# M: W% A我们提出了一种用于人类行为异常检测的新方法。我们的方法直接适用于可以从输入视频序列计算的人体姿势图。这使得分析独立于扰动参数,如视点或照明。我们将这些图映射到一个潜在空间并将它们聚类。然后,每个操作都由其对每个聚类的软赋值来表示。这为数据提供了一种“词袋”表示,其中每个动作都由其与一组基本动作词的相似性来表示。然后,我们使用基于狄利克雷过程的混合物,这对于处理比例数据(例如我们的软赋值向量)很有用,以确定一个动作是否正常。  P9 T% l$ ?8 v2 x

    * W6 e  z; W+ h首先,我们对输入数据使用人体姿态检测器。这抽象了问题,并防止下一步处理诸如视点或照明变化等有害参数。人的行为被表示为时空图,我们将其嵌入(第3.1、3.2小节)并聚类(第3.3小节)到一些潜在空间中。现在,每个动作都表示为一组基本动作的软分配向量。这抽象了动作的基本类型(即细粒度或粗粒度),从而进入学习其分布的最后阶段。我们用于学习软分配向量分布的工具是Dirichlet过程混合(第3.4小节),我们将模型拟合到数据中。然后使用该模型确定动作是否正常。! y8 ~# U$ L% @+ l, L- g% E  t# I  v

    0 J3 B& |+ T* K( m5 A( i图的每个节点对应于一个关键点、一个身体关节,每个边表示两个节点之间的某种关系。 存在许多"关键点关系",如解剖学上定义的物理关系(例如,左手腕和肘部连接)和由运动定义的动作关系,这些运动往往在特定动作的上下文中高度相关(例如,跑步时左右膝盖倾向于朝相反方向移动)。图的方向来自于这样一个事实,即一些关系是在优化过程中学习的,并且不是对称的。这种表示的一个好处是紧凑,这对于高效的视频分析非常重要。
    4 [4 N/ o) s9 _为了在时间上扩展,将从视频序列中提取的姿势关键点表示为姿势图的时间序列。 时间姿势图是人体关节位置的时间序列。时域邻接可以类似地通过连接连续帧中的关节来定义,允许我们利用姿势图序列的空间和时间维度执行图卷积运算
    * f7 H2 f, a$ j/ |/ d
    + F* n6 J( D0 b  i; P我们提出了一种基于深度时态图自动编码器的结构,用于嵌入时态姿态图。 基于图2所示ST-GCN的基本块设计,我们将基本GCN算子替换为新的空间注意力图卷积,如下所示。
    4 s. Y1 D# [! w' R; {; {8 A! H2 \' m$ e. t& V1 v0 q
    3.2. Spatial Attention Graph Convolution  F  Q  K6 S  E2 T9 ?
    我们提出了一个新的图算子,如图3所示,它使用三种类型的邻接矩阵:静态、全局学习和推断(基于注意力)。每个邻接类型使用单独的权重应用其自己的GCN。
    8 r$ ~# R& s: u2 `/ t, m- N( {8 Z( W1 v% y. V
    GCN的输出按通道维度堆叠。采用1×1卷积作为加权叠加输出的可学习缩减度量,并提供所需的输出信道数。
    9 x5 ?) d8 `* m0 P( S& p8 K/ F# i0 T8 _5 l& u) `$ f; w
    三个邻接矩阵捕捉了模型的不同方面:
    9 H& Q) Z9 T. M1 i/ ?# X(i)使用身体部位连通性作为优先于节点关系,使用静态邻接矩阵表示。
    9 F! m, W4 J, o( y- F; }7 G% Q& ](ii)由全局邻接矩阵捕获的数据集级关键点关系,以及8 l) P  X+ ~/ n8 o% N* O
    (iii)由推断邻接矩阵获取的样本特定关系。最后,可学习约简度量对不同的输出进行加权) ^# k9 R9 T3 ~# }7 N

    - b: \0 t' X1 R0 z3 l) I5 g0 Q# O2 B8 [; ^  }8 d, `
    后续段落介绍了静态、全局学习和推断的邻接矩阵的设置方法,即图3中的A,B和C,在此略过。: c; {. x( g4 A) j4 J+ K0 N# L
    3.3. Deep Embedded Clustering; i, x0 R" i1 C. L+ l) n/ J
    为了构建我们的底层动作词典,我们采用训练集样本,并将它们联合嵌入和聚类到一些潜在空间中。然后,每个样本由其分配给每个底层聚类的概率表示。选择目标是为了提供不同的潜在集群,这些集群上存在动作。( R% ?- c' ^# W4 T

    # m$ m9 g, U, y2 R我们采用了深嵌入聚类的概念[32],用我们的ST-GCAE架构对时间图进行聚类。所提出的聚类模型由编码器、解码器和软聚类层三部分组成。1 T2 s; W4 U1 H0 q1 N0 o/ C: M" Z

    ; a' }9 f, P5 A; N+ g9 s% h/ h具体地说,我们的ST-GCAE模型保持了图的结构,但使用了较大的时间步长和不断增加的通道数来将输入序列压缩为潜在向量。解码器使用时间上采样层和额外的图卷积块,用于逐渐恢复原始信道计数和时间维度。
    ' }2 a! u0 k8 _" ~9 A" r) b+ Z4 Q- H
    ST-GCAE的嵌入是数据聚类的起点。在我们的聚类优化阶段,对基于重构的初始嵌入进行微调,以达到最终的聚类优化嵌入。+ Q* s) n  M3 m2 N$ L7 n9 K

    $ J/ Q7 q& t' e, r5 w. B符号        表示
    ! p6 @" G# O/ v6 ~x i x_ix ' ^" X! m7 O) R; H' Q% O
    i
    ( [) u' w' d" L# E
    ! [9 g* x5 |; O5 Q) c9 U# _- [8 T         输入示例, j) W  `6 _1 X6 d  D5 u
    z i z_iz
    3 w# a1 I. i# Z' ri
    2 x" Q2 B9 @; G& e* H
    9 [' S8 h6 _/ \- t/ {* a         编码器的潜在嵌入
    ( x* ^  C: p3 B, Y- ?y i y_iy + r! s4 C5 ?& m: z
    i/ j3 C! e, j3 B$ }

    # ?: e( W' d9 q/ v2 A9 K1 y         使用聚类层计算的软聚类分配
    ! X  [% u: @: V) ~Θ ΘΘ        聚类层的参数0 R4 b$ |& F. o4 F1 p- i
    p i k p_{ik}p ' y- X8 Y+ P: F, _- i+ }
    ik3 {( d" C( i5 I" f
    ! |1 x* n1 v/ O$ g
            probability for the i-th sample to be assigned to the k-th cluster
    / d7 c2 M+ ~- f. `2 l% J" l: k0 R. O  G7 d6 }' Z1 L' O( M4 Z
    ! Q8 h' t) K2 o; R; p* U* w
    我们采用[32]提出的聚类目标和优化算法。聚类目标是最小化当前模型概率聚类预测P和目标分布Q之间的KL散度:
    4 J  |5 K& g5 [3 T" x5 D  v
    % Y' B. d! @$ b; A: O8 h0 L) }3 {5 \. V/ R! W% d. l
    目标分布旨在通过标准化和将每个值推到更接近0或1的值来加强当前的群集分配。反复应用将P转换为Q的函数将最终导致硬分配向量。使用以下等式计算目标分布的每个成员:+ \8 D" z* k7 J0 }# N
    ' L: }8 W# x% Q7 h
    4 w- k/ [; V. ?
    聚类层由为编码训练集计算的K均值质心初始化。优化以期望最大化(EM)的方式进行。
    & q" \$ b+ m0 X" C( l在期望步骤期间,整个模型是固定的,并且目标分布Q被更新。在最大化阶段,优化模型以最小化聚类损失Lcluster。' m# u- ?1 P3 h

    , A; \# p7 X5 P3 _0 q3.4. Normality Scoring
    * P$ O4 }8 o9 [' m( w' Z该模型支持两种类型的多模分布。一个是集群分配级别;另一个是在软分配向量级别。例如,一个动作可能被分配给多个集群(集群级分配),导致多模式软分配向量。8 ?% J- x- y/ ^% f: j
    软分配向量本身(捕获动作)也可以通过多模态分布建模。7 d6 m% u$ b5 r0 m; R

    # T7 M/ e( N6 v# k  \5 q8 O/ vDirichlet过程混合模型(DPMM)是评估比例数据分布的一种有效方法。它满足我们所需的设置:(i)估计(拟合)阶段,在此阶段,一组分布参数为评估,和(ii)推理阶段,为每个嵌入样本使用拟合模型。彻底的Blei和Jordan[4]给出了该模型的概述。
    5 i) f) f  @% z* F; p& r4 w
    $ w: @  y! d  Q2 C- [1 b7 HDirichlet过程混合模型(DPMM)是评估比例数据分布的有效方法。它符合我们要求的设置:
    ! w% ]( A7 N- P( q. J" l' u3 U(i) 估计(拟合)阶段,在此期间评估一组分布参数,以及
    " p. ?4 D' r! I4 ^(ii)推理阶段,使用拟合模型为每个嵌入样本提供分数。Blei和Jordan[4]对模型进行了全面概述。
    ' S8 z- z/ P: @7 U2 v; W& C. s1 x- w# Q+ C  y7 @7 h
    DPMM是单峰Dirichlet分布的常见混合扩展,并使用Dirichllet过程,这DirichletDistribution的无限维扩展。该模型是多模态的,能够将每个模式捕获为混合成分。拟合模型具有多个模式,每个模式表示对应于一个正常行为的一组比例。在测试时,使用拟合模型通过其对数概率对每个样本进行评分。[4,8]中提供了关于DPMM使用的进一步解释和讨论。
    . G: g) r, ~7 M; O4 I* {+ ?/ t9 I( E# O
    3.5. Training
    2 z# [$ E: @7 j* F该模型的训练阶段包括两个阶段,一个是自动编码器的预训练阶段,其中网络的聚类分支保持不变,另一个是微调阶段,其中嵌入和聚类都得到优化。具体而言:8 N% H/ o" E% A
    ! L; X' ?5 x* t
    Pre-Training: 该模型通过最小化重建损失(表示为Lrec)来学习编码和重建序列,Lrec是原始瞬时位姿图和ST-GCAE重建的位姿图之间的L2损失4 y+ ?. t% k6 R/ N3 D
    2 N, M7 s$ Y1 T# E3 o
    Fine-Tuning:
    9 ]3 _8 [9 Q- {0 [2 A/ U, B$ \$ Y, C8 R该模型优化了由重建损失和聚类损失组成的组合损失函数。
    4 R9 U) Y  F/ B; e& u进行优化,使得聚类层优化为w.r.t.Lcluster,解码器优化为w.r.t.Lrec,编码器优化为w.r.t.两者。
      ]5 g# u$ C# ?3 T7 g集群层的初始化是通过Kmeans完成的。如[9]所示,当编码器针对这两种损失进行优化时,解码器保持不变,并充当正则化器,以保持编码器的嵌入质量。! ^1 X( _, B9 }8 b$ ~/ h$ h1 H# z
    本阶段的综合损失为:
    8 m( t! o3 K- e! l- a/ t& ^7 v2 u4 J! ~

    " u( |5 E' a; b
    ( L* u& C! G8 x3 [" k实现细节! E+ Z( P' Z  b; e9 r
    ( N- ?  t# R6 D8 r& B% _% Q+ w; G
    7 Z3 A7 {9 z' L, V

    & R- L6 E, a: f" _0 o; T! Idef calc_reg_loss(model, reg_type='l2', avg=True):1 I; J! n# O7 R4 M, q$ w) y
        reg_loss = None& C- j" r1 ~8 _5 c: v, X
        parameters = list(param for name, param in model.named_parameters() if 'bias' not in name)( s; r6 o1 R3 u
        num_params = len(parameters)6 W! E9 U( M5 d' k7 ?( B( x: N
        if reg_type.lower() == 'l2':
    ( I4 O/ Z6 \5 x! V8 F' }1 z9 c        for param in parameters:
    . m/ ]1 k4 E8 v: `+ S: U  M            if reg_loss is None:
    2 A& k( }- J0 l8 I3 i8 {4 }+ X                reg_loss = 0.5 * torch.sum(param ** 2)+ q5 }6 h8 l; \7 o
                else:3 R; {4 y) ^2 G
                    reg_loss = reg_loss + 0.5 * param.norm(2) ** 21 [: i+ T& v% E, f. }/ p
    + G0 i. O( O" Q' A+ G, H( Z7 [8 U  u
            if avg:
    ' i9 k4 N9 n7 d5 t7 {  U+ d, S3 h) ~% r            reg_loss /= num_params. M% i7 q, e6 u) I& W" F! M
            return reg_loss6 j' u4 J7 x2 H. o5 ^. T& E
        else:5 H7 d' u/ W$ m1 G
            return torch.tensor(0.0, device=model.device)1 y; `. w- U  G. E) y% ]% @
    1# X, T# |0 K. A3 M# N
    26 ^$ P* h/ `. j5 q1 C" ~/ R) e
    3! K* ?0 j- r" t
    4
    ' [; Q6 Z+ j) N2 x+ U5
    " K9 E" d) j, R+ Z# {% u8 b6' w# _# F% ?; o$ _3 Z
    7
    2 `% Z5 _" k, ~/ u, K6 O0 U2 J8
    3 z3 V7 l; O, _: C6 G+ p92 p3 @- p7 R" l
    10
    ' j4 V7 ?; L7 j6 o5 P. H5 ^11# p1 \: k: y5 e0 v: j8 s
    12) G/ @, y4 h. K% d, m- w4 R2 Q
    13) g8 `; z3 G& e
    14, M9 M7 @3 A2 K+ M
    15
    ; W  x9 p( }7 s; W16$ o% `6 ]+ W8 o- g( \
    / q+ M& J0 v+ S
    / n( Z! t: }4 }+ i

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

    回顶部