QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 3036|回复: 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
    + c( ^5 Y. t* k7 h0 b& i7 b  N
    8 f% X2 s. n" L. c. i; m- ]) j$ K骨架图算法
    ( N* s: Y. a/ H0 H, M
    5 }. q& X; E/ S& S  ]9 |7 r+ \: D2 b7 q5 {5 d
    Graph Embedded Pose Clustering for Anomaly Detection
    3 ?# B) C+ \  _" Lpaper        code
    7 L' X0 c! |, I& o' K) `https://arxiv.org/abs/1912.11850        https://github.com/amirmk89/gepc
    ( T# C1 H4 K1 [) t* i我们提出了一种用于人类行为异常检测的新方法。我们的方法直接适用于可以从输入视频序列计算的人体姿势图。这使得分析独立于扰动参数,如视点或照明。我们将这些图映射到一个潜在空间并将它们聚类。然后,每个操作都由其对每个聚类的软赋值来表示。这为数据提供了一种“词袋”表示,其中每个动作都由其与一组基本动作词的相似性来表示。然后,我们使用基于狄利克雷过程的混合物,这对于处理比例数据(例如我们的软赋值向量)很有用,以确定一个动作是否正常。
    ) P( ^$ m/ B5 m# W1 t; |% L- y8 j0 y
    首先,我们对输入数据使用人体姿态检测器。这抽象了问题,并防止下一步处理诸如视点或照明变化等有害参数。人的行为被表示为时空图,我们将其嵌入(第3.1、3.2小节)并聚类(第3.3小节)到一些潜在空间中。现在,每个动作都表示为一组基本动作的软分配向量。这抽象了动作的基本类型(即细粒度或粗粒度),从而进入学习其分布的最后阶段。我们用于学习软分配向量分布的工具是Dirichlet过程混合(第3.4小节),我们将模型拟合到数据中。然后使用该模型确定动作是否正常。1 P1 ?! j* e9 Q1 e

    + F( `' u& t( x. _& [6 P; N图的每个节点对应于一个关键点、一个身体关节,每个边表示两个节点之间的某种关系。 存在许多"关键点关系",如解剖学上定义的物理关系(例如,左手腕和肘部连接)和由运动定义的动作关系,这些运动往往在特定动作的上下文中高度相关(例如,跑步时左右膝盖倾向于朝相反方向移动)。图的方向来自于这样一个事实,即一些关系是在优化过程中学习的,并且不是对称的。这种表示的一个好处是紧凑,这对于高效的视频分析非常重要。; x; Z- R& v: T% [' \& e5 F. }3 O
    为了在时间上扩展,将从视频序列中提取的姿势关键点表示为姿势图的时间序列。 时间姿势图是人体关节位置的时间序列。时域邻接可以类似地通过连接连续帧中的关节来定义,允许我们利用姿势图序列的空间和时间维度执行图卷积运算
    : @! M- x5 r; ~2 c' \# o9 g$ F* b4 ~- Z7 q1 D9 \
    我们提出了一种基于深度时态图自动编码器的结构,用于嵌入时态姿态图。 基于图2所示ST-GCN的基本块设计,我们将基本GCN算子替换为新的空间注意力图卷积,如下所示。
    ! z0 C! a% r5 W& B7 U) ~* H* }) X) p( L! ^# `7 p$ o
    3.2. Spatial Attention Graph Convolution0 K+ _8 z+ i* U8 Q0 s: _% m
    我们提出了一个新的图算子,如图3所示,它使用三种类型的邻接矩阵:静态、全局学习和推断(基于注意力)。每个邻接类型使用单独的权重应用其自己的GCN。" E" a# p6 T" ^& U, q9 b

    7 E/ i3 f) V: n0 ?4 [+ y2 Y  ]GCN的输出按通道维度堆叠。采用1×1卷积作为加权叠加输出的可学习缩减度量,并提供所需的输出信道数。
    " u; I* h6 A/ g1 D+ U. U6 j1 z9 ?2 k# W7 L' T9 Q3 u. n, _8 Q! n
    三个邻接矩阵捕捉了模型的不同方面:
    9 M  R% Z8 O3 n$ l4 h2 M6 {5 R$ ?* @(i)使用身体部位连通性作为优先于节点关系,使用静态邻接矩阵表示。% o) @0 L7 C1 P2 ^' h: L0 F
    (ii)由全局邻接矩阵捕获的数据集级关键点关系,以及
    ) O* z  O0 p, Y& }. b+ u0 z6 Y(iii)由推断邻接矩阵获取的样本特定关系。最后,可学习约简度量对不同的输出进行加权/ ]8 _# q5 l) u+ M4 t

    . O+ t. p+ x6 X! w
    " T" X% f2 `, I2 V" A6 F) `  U后续段落介绍了静态、全局学习和推断的邻接矩阵的设置方法,即图3中的A,B和C,在此略过。6 F! G% v/ w( M2 B: f
    3.3. Deep Embedded Clustering
    ' q: H) w% i* o. G为了构建我们的底层动作词典,我们采用训练集样本,并将它们联合嵌入和聚类到一些潜在空间中。然后,每个样本由其分配给每个底层聚类的概率表示。选择目标是为了提供不同的潜在集群,这些集群上存在动作。3 Y: `. p0 Y- I2 ^8 }- }4 s2 B

    5 ]+ t# l0 H9 j) r* j我们采用了深嵌入聚类的概念[32],用我们的ST-GCAE架构对时间图进行聚类。所提出的聚类模型由编码器、解码器和软聚类层三部分组成。
    + m' J  D" G# }# r' l- A6 P
    ' f) r% `4 v" X5 j2 {具体地说,我们的ST-GCAE模型保持了图的结构,但使用了较大的时间步长和不断增加的通道数来将输入序列压缩为潜在向量。解码器使用时间上采样层和额外的图卷积块,用于逐渐恢复原始信道计数和时间维度。
    + y+ ~( V: w$ T" B& K( H) s
    & U8 S8 f3 A+ X" u# B( |ST-GCAE的嵌入是数据聚类的起点。在我们的聚类优化阶段,对基于重构的初始嵌入进行微调,以达到最终的聚类优化嵌入。6 o& K. U4 x; ?

    . }7 c# i; P( S$ W" J+ Y6 e符号        表示
    2 |# r+ }+ u) \0 X% b- [2 nx i x_ix , O. r* d# g$ l, T
    i
    ' H' j9 ?/ a- z; v
    ' B6 {. o" e9 f$ W         输入示例# P6 ]) R$ \* K+ g; A
    z i z_iz
    5 [+ @/ W- R, B5 j; k5 g. n  Zi4 f. c( u: o) b6 D

    ; |, ?# \' h: m, h1 ^' d         编码器的潜在嵌入- u7 H/ m/ U0 f1 n* D4 @+ `7 u
    y i y_iy 1 _7 @% |$ [: b9 S/ Z
    i; z( ?( L. {% F" S' j

    ! ^( e2 G: q2 n1 Y         使用聚类层计算的软聚类分配
    & }& ?) [& [% T8 J+ K! b1 qΘ ΘΘ        聚类层的参数
    7 g0 w0 l: a" l1 @2 Gp i k p_{ik}p $ _% H  K0 B% r& y6 d  l; g( h
    ik
    , R( y% @. m+ e$ ]0 X
      I) O+ S# u2 j4 n3 F         probability for the i-th sample to be assigned to the k-th cluster, F% G: h8 O( p

    " _, C' u" h" T* C: J+ ^9 T5 o
    ' s6 g8 j3 z/ P: |4 |我们采用[32]提出的聚类目标和优化算法。聚类目标是最小化当前模型概率聚类预测P和目标分布Q之间的KL散度:( z: v1 S) W' b/ q3 X0 K& J) t
    ! U0 O6 Z+ g* ?; k( ]& C
    % J* C0 l2 e) E' n1 ^- h4 p! P; i+ [
    目标分布旨在通过标准化和将每个值推到更接近0或1的值来加强当前的群集分配。反复应用将P转换为Q的函数将最终导致硬分配向量。使用以下等式计算目标分布的每个成员:
    ) s7 }; J6 b3 f# n+ Q2 @1 Q, T$ j7 g8 f7 J3 J" @. T  t
    4 Z) L$ R# C9 w6 g
    聚类层由为编码训练集计算的K均值质心初始化。优化以期望最大化(EM)的方式进行。
    / j2 v' X. F3 o; o* o在期望步骤期间,整个模型是固定的,并且目标分布Q被更新。在最大化阶段,优化模型以最小化聚类损失Lcluster。+ y5 \% z2 U5 }! D
    , l: d% G: Q# `- X
    3.4. Normality Scoring0 d3 H( L4 Z: Y7 Q4 X/ I3 u! [+ G
    该模型支持两种类型的多模分布。一个是集群分配级别;另一个是在软分配向量级别。例如,一个动作可能被分配给多个集群(集群级分配),导致多模式软分配向量。
    # s; C/ z: I& Z# }1 s" T9 ?5 y软分配向量本身(捕获动作)也可以通过多模态分布建模。
    & `6 j) _9 m3 {0 R" i! t: D( U: \) a- n7 ?- ?% U# u; e- i
    Dirichlet过程混合模型(DPMM)是评估比例数据分布的一种有效方法。它满足我们所需的设置:(i)估计(拟合)阶段,在此阶段,一组分布参数为评估,和(ii)推理阶段,为每个嵌入样本使用拟合模型。彻底的Blei和Jordan[4]给出了该模型的概述。
    * m8 P/ x" a9 b2 t
      j" O) [8 G% [# f, i$ ^Dirichlet过程混合模型(DPMM)是评估比例数据分布的有效方法。它符合我们要求的设置:
    # v! F, M+ ~% e- G, A. l' i& N: R' g& |(i) 估计(拟合)阶段,在此期间评估一组分布参数,以及3 w) H- m1 r. S  q" j+ G
    (ii)推理阶段,使用拟合模型为每个嵌入样本提供分数。Blei和Jordan[4]对模型进行了全面概述。
    8 u: B( l0 B+ t
    5 ]1 U% ?) Z) h( `9 b* P+ t% j+ `DPMM是单峰Dirichlet分布的常见混合扩展,并使用Dirichllet过程,这DirichletDistribution的无限维扩展。该模型是多模态的,能够将每个模式捕获为混合成分。拟合模型具有多个模式,每个模式表示对应于一个正常行为的一组比例。在测试时,使用拟合模型通过其对数概率对每个样本进行评分。[4,8]中提供了关于DPMM使用的进一步解释和讨论。1 ?9 e, Q; S9 u9 _4 u$ O
    3 S( s' r, V! H- Z* z$ H3 Z
    3.5. Training* q! F# D! I8 N3 i# X1 K" T7 l
    该模型的训练阶段包括两个阶段,一个是自动编码器的预训练阶段,其中网络的聚类分支保持不变,另一个是微调阶段,其中嵌入和聚类都得到优化。具体而言:# W+ B5 C7 n: z; n# p
    , j: ~% S. E( y
    Pre-Training: 该模型通过最小化重建损失(表示为Lrec)来学习编码和重建序列,Lrec是原始瞬时位姿图和ST-GCAE重建的位姿图之间的L2损失
    & ]  S# x; `; k' f3 c$ p! x2 U; Y; y' w/ \- O7 e4 ]6 h/ {9 b
    Fine-Tuning:
    1 ^) S9 k. |" s" ~/ r- ], H2 b该模型优化了由重建损失和聚类损失组成的组合损失函数。
    # d  w2 y0 v2 j! _2 b1 l) g$ k4 C4 U: c进行优化,使得聚类层优化为w.r.t.Lcluster,解码器优化为w.r.t.Lrec,编码器优化为w.r.t.两者。
    " H( k5 q. M0 I  t$ z& a集群层的初始化是通过Kmeans完成的。如[9]所示,当编码器针对这两种损失进行优化时,解码器保持不变,并充当正则化器,以保持编码器的嵌入质量。. ^4 }! t; M: j" P6 a. Z
    本阶段的综合损失为:% c6 I1 B4 ]6 b3 O7 ]7 i: M! w8 g$ w
      G3 @1 @/ z; V8 _% v% S, d' c: A

    / q, L8 R( A; u/ y* ^6 r+ u3 |8 ?; U* O8 y% R3 m: g' i4 N
    实现细节4 S# Y3 a+ p- t2 z

    3 a) B7 T6 V$ ^2 J7 @) P, |0 T0 F- `* `# v/ I+ |% |
    . J0 D5 f' U/ j; h' K
    def calc_reg_loss(model, reg_type='l2', avg=True):
    : E9 g% a7 [, U' {! b1 V    reg_loss = None. S5 O5 @: p: ~) h! ~  ?
        parameters = list(param for name, param in model.named_parameters() if 'bias' not in name)* d- r; F- N6 r/ a8 C3 n0 {
        num_params = len(parameters)
    . `$ r* c! E/ l$ e* a! R7 q- u    if reg_type.lower() == 'l2':
    - O6 f% ^7 r+ J        for param in parameters:& Q& ^; \3 @9 J: b3 l
                if reg_loss is None:
    8 M* V" |& @- @, G                reg_loss = 0.5 * torch.sum(param ** 2)/ Y! i  Y7 S1 d
                else:8 L# n- ]' s7 T+ ~
                    reg_loss = reg_loss + 0.5 * param.norm(2) ** 2
    7 h$ o3 b" }  h5 i: n! y8 f. o3 ^2 T8 r# `
            if avg:
    . X2 e# ^6 t( E4 d0 u9 Y9 c3 F* V5 I            reg_loss /= num_params
    ' e* [/ q& [& `( J- S9 W* x* }: _, z        return reg_loss$ k! ^9 r- U3 O- W
        else:
    ( P  Y# p. i  E1 X+ P2 R        return torch.tensor(0.0, device=model.device)0 b: \1 J2 B) h3 a- s2 ?
    19 H5 l0 h3 W3 g9 F# D8 W* v
    2
    / K2 T9 j  |8 P& n: ]* a  L3
    $ Y5 T2 b! {8 i4; m- e* y5 X7 o" Z
    5  l5 _' e6 M5 o" y$ n
    63 A' B0 S' {. x, w
    7+ b( ~6 {: ~9 z% [2 g- q, |- R9 t
    8
    ) |! A9 N& R. T( O, K; k7 E9
    * ~5 \5 y6 y5 X2 t10
    ; i& D* c7 K# W" ~, M11; V2 Z- _" S: S* r# O
    12) a7 W; z+ P, ]9 n
    13( S8 e  b: U) I) A
    14
    ' E/ d& K! D7 s, b: o: `$ A15
    3 z' ~, q* s: @! _+ [16. H& X/ O$ D5 L6 V  K' f+ B1 p+ A# d
    * I. r; _: V/ t) |3 o4 J% B- B! `

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

    qq
    收缩
    • 电话咨询

    • 04714969085
    fastpost

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

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

    蒙公网安备 15010502000194号

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

    GMT+8, 2026-4-14 16:41 , Processed in 0.478064 second(s), 51 queries .

    回顶部