QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 3047|回复: 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 Clustering5 I: H# t9 ?7 l% [* x/ a

    ) i* U; Z+ L5 ^骨架图算法
    4 @" C# n  z* e
    / o9 T& f& ~$ z" [! X- f2 }5 A* z0 e! d& s
    Graph Embedded Pose Clustering for Anomaly Detection! r' ]8 i: x. y1 _$ w1 {
    paper        code
      u. f4 {) P% H4 Chttps://arxiv.org/abs/1912.11850        https://github.com/amirmk89/gepc
    1 [! z" z# t+ ?! k我们提出了一种用于人类行为异常检测的新方法。我们的方法直接适用于可以从输入视频序列计算的人体姿势图。这使得分析独立于扰动参数,如视点或照明。我们将这些图映射到一个潜在空间并将它们聚类。然后,每个操作都由其对每个聚类的软赋值来表示。这为数据提供了一种“词袋”表示,其中每个动作都由其与一组基本动作词的相似性来表示。然后,我们使用基于狄利克雷过程的混合物,这对于处理比例数据(例如我们的软赋值向量)很有用,以确定一个动作是否正常。* F) @0 B6 o9 }% g: K

    # ~+ ]) a7 D; A首先,我们对输入数据使用人体姿态检测器。这抽象了问题,并防止下一步处理诸如视点或照明变化等有害参数。人的行为被表示为时空图,我们将其嵌入(第3.1、3.2小节)并聚类(第3.3小节)到一些潜在空间中。现在,每个动作都表示为一组基本动作的软分配向量。这抽象了动作的基本类型(即细粒度或粗粒度),从而进入学习其分布的最后阶段。我们用于学习软分配向量分布的工具是Dirichlet过程混合(第3.4小节),我们将模型拟合到数据中。然后使用该模型确定动作是否正常。
    7 c* N8 ?: I# y+ C' }! I$ m( t2 ?! J6 q6 A
    图的每个节点对应于一个关键点、一个身体关节,每个边表示两个节点之间的某种关系。 存在许多"关键点关系",如解剖学上定义的物理关系(例如,左手腕和肘部连接)和由运动定义的动作关系,这些运动往往在特定动作的上下文中高度相关(例如,跑步时左右膝盖倾向于朝相反方向移动)。图的方向来自于这样一个事实,即一些关系是在优化过程中学习的,并且不是对称的。这种表示的一个好处是紧凑,这对于高效的视频分析非常重要。
    3 T9 H1 y3 q" g1 f0 @为了在时间上扩展,将从视频序列中提取的姿势关键点表示为姿势图的时间序列。 时间姿势图是人体关节位置的时间序列。时域邻接可以类似地通过连接连续帧中的关节来定义,允许我们利用姿势图序列的空间和时间维度执行图卷积运算" b6 Z* E& ?' M2 W8 ?
    2 x. w4 s" H. w# Z% [' s6 L. Z+ U
    我们提出了一种基于深度时态图自动编码器的结构,用于嵌入时态姿态图。 基于图2所示ST-GCN的基本块设计,我们将基本GCN算子替换为新的空间注意力图卷积,如下所示。
    # L8 Z- F$ |8 [" {3 x, {$ _- J
    $ C1 Y. W/ ^: B& X3.2. Spatial Attention Graph Convolution! m6 C/ }$ h  Z& }) H5 Y
    我们提出了一个新的图算子,如图3所示,它使用三种类型的邻接矩阵:静态、全局学习和推断(基于注意力)。每个邻接类型使用单独的权重应用其自己的GCN。
    ' F; s6 ~/ D$ d/ `
    2 Y' }1 j- v' p% ]# J: MGCN的输出按通道维度堆叠。采用1×1卷积作为加权叠加输出的可学习缩减度量,并提供所需的输出信道数。
    * m6 i" X" B$ m3 I/ m$ |+ J) n, r5 b9 s# P9 X
    三个邻接矩阵捕捉了模型的不同方面:  C3 c% n- U( r7 F& V
    (i)使用身体部位连通性作为优先于节点关系,使用静态邻接矩阵表示。! g* l3 C) m" e$ `- E+ u9 Q- j
    (ii)由全局邻接矩阵捕获的数据集级关键点关系,以及
    4 V, P1 u$ W5 L+ q7 x1 O% ](iii)由推断邻接矩阵获取的样本特定关系。最后,可学习约简度量对不同的输出进行加权
    5 K& y4 @3 ?# r: B6 d. T
    , C) X' L' Z3 r3 ?, H, U. T, s1 K: S2 L/ C3 s
    后续段落介绍了静态、全局学习和推断的邻接矩阵的设置方法,即图3中的A,B和C,在此略过。
    ( N6 M$ C9 N% g: r: S) S% G7 L+ R$ v/ I3.3. Deep Embedded Clustering
      E3 Z2 T& r$ r+ ^& T  C! ^! w为了构建我们的底层动作词典,我们采用训练集样本,并将它们联合嵌入和聚类到一些潜在空间中。然后,每个样本由其分配给每个底层聚类的概率表示。选择目标是为了提供不同的潜在集群,这些集群上存在动作。1 ^4 ~7 D+ H; P7 }
    5 D) ^* o1 _* y! N/ _
    我们采用了深嵌入聚类的概念[32],用我们的ST-GCAE架构对时间图进行聚类。所提出的聚类模型由编码器、解码器和软聚类层三部分组成。
    , |0 E3 N, A: k- S- C, `
    - m* q1 [( b: c3 A5 V  x7 O具体地说,我们的ST-GCAE模型保持了图的结构,但使用了较大的时间步长和不断增加的通道数来将输入序列压缩为潜在向量。解码器使用时间上采样层和额外的图卷积块,用于逐渐恢复原始信道计数和时间维度。+ C/ \: B7 ~0 M. w

    5 b* H+ i0 v( u# E% yST-GCAE的嵌入是数据聚类的起点。在我们的聚类优化阶段,对基于重构的初始嵌入进行微调,以达到最终的聚类优化嵌入。  \- h- {2 r2 Z
    ' n- c. M0 {) P1 O( j6 p
    符号        表示: l2 @7 W# U; b+ I+ T8 x, v7 E* o. w
    x i x_ix
    ) @3 m7 S' }6 xi
    1 E! y! r, a/ x% A: e9 s8 ?; D4 C1 z( U. [& h0 T7 F" l2 [9 M
            输入示例: w6 I0 u/ x5 [" k! {" X
    z i z_iz
    ( U, U9 q9 i: T& o  e8 [* I" ii$ ]- E- J) y) m1 Z
    $ O9 _1 K% n0 a  o& h: F
            编码器的潜在嵌入
    9 x. h6 F5 k* G, s7 r- Q' qy i y_iy
    2 I/ P' L# E0 o: r$ j- S0 zi8 Y5 d( z, _  j/ ]
    9 w; N  `/ k  z7 M% m/ Q. S3 W" b
            使用聚类层计算的软聚类分配+ N( W5 ?% u% X( E/ d) B! T
    Θ ΘΘ        聚类层的参数
    0 {8 H8 f/ ?3 f$ Bp i k p_{ik}p
    + T) x7 K+ h) z! s4 V8 Kik, s- e: l; F0 P# b
    . F8 L+ d2 q3 d( o) \0 b& |
            probability for the i-th sample to be assigned to the k-th cluster. l  n( I& J4 W0 ~$ l

    % x) q, r& {/ b. L: `+ j# u& z: I& p! }  s( j6 d
    我们采用[32]提出的聚类目标和优化算法。聚类目标是最小化当前模型概率聚类预测P和目标分布Q之间的KL散度:
      y* o9 W1 v. O7 N0 `4 V
      M" n! P9 o" v) Z
    : f& w- P9 l2 ]7 S1 i8 _目标分布旨在通过标准化和将每个值推到更接近0或1的值来加强当前的群集分配。反复应用将P转换为Q的函数将最终导致硬分配向量。使用以下等式计算目标分布的每个成员:
    9 H# W. g9 R. F$ L" x- L# S6 j6 d) \
    ) f% O( X9 m8 K2 \* q" [
    - S0 p" h  S6 R1 L4 T9 Y聚类层由为编码训练集计算的K均值质心初始化。优化以期望最大化(EM)的方式进行。( }% P$ a- F7 d* M- ]+ ]
    在期望步骤期间,整个模型是固定的,并且目标分布Q被更新。在最大化阶段,优化模型以最小化聚类损失Lcluster。
    . O; |3 G5 f  n3 ^; I8 I0 u( Y3 q# C
    $ i3 ~# W" k+ |3 w3.4. Normality Scoring; r2 [6 c  t$ w2 s
    该模型支持两种类型的多模分布。一个是集群分配级别;另一个是在软分配向量级别。例如,一个动作可能被分配给多个集群(集群级分配),导致多模式软分配向量。9 [5 p! m7 T9 ^0 v) d9 W
    软分配向量本身(捕获动作)也可以通过多模态分布建模。
    + s3 ]) K/ O  Z+ C6 B; }* ^
    0 U) y  s9 U( s: E: R9 w0 UDirichlet过程混合模型(DPMM)是评估比例数据分布的一种有效方法。它满足我们所需的设置:(i)估计(拟合)阶段,在此阶段,一组分布参数为评估,和(ii)推理阶段,为每个嵌入样本使用拟合模型。彻底的Blei和Jordan[4]给出了该模型的概述。
      P9 T9 I! \! R+ Z8 x
    8 q8 a" Z' J0 ?7 q' _8 v& c- nDirichlet过程混合模型(DPMM)是评估比例数据分布的有效方法。它符合我们要求的设置:$ a' o2 o7 }  P; d  D: }! i
    (i) 估计(拟合)阶段,在此期间评估一组分布参数,以及$ F( \) {' A$ X; o2 U4 G1 }
    (ii)推理阶段,使用拟合模型为每个嵌入样本提供分数。Blei和Jordan[4]对模型进行了全面概述。
    ; o% a* ~4 h, ^& d* @# L% {
    $ ]# ]! n# \+ x; F8 Y8 UDPMM是单峰Dirichlet分布的常见混合扩展,并使用Dirichllet过程,这DirichletDistribution的无限维扩展。该模型是多模态的,能够将每个模式捕获为混合成分。拟合模型具有多个模式,每个模式表示对应于一个正常行为的一组比例。在测试时,使用拟合模型通过其对数概率对每个样本进行评分。[4,8]中提供了关于DPMM使用的进一步解释和讨论。7 F; g5 _) Z5 q8 T. k3 m8 H! h
      k( Q- k5 K" F+ Y
    3.5. Training
    1 n# a  Y( Z) G* N$ u6 o, K' p, C2 Q该模型的训练阶段包括两个阶段,一个是自动编码器的预训练阶段,其中网络的聚类分支保持不变,另一个是微调阶段,其中嵌入和聚类都得到优化。具体而言:
      L$ Q) x# w% e
    ; \4 W, Z: x# `- C% lPre-Training: 该模型通过最小化重建损失(表示为Lrec)来学习编码和重建序列,Lrec是原始瞬时位姿图和ST-GCAE重建的位姿图之间的L2损失
    : `% \% J% s: Y6 O  A4 s" U  d3 w. K9 c2 _. K
    Fine-Tuning:6 T. _/ ]) E) z7 M2 m; A
    该模型优化了由重建损失和聚类损失组成的组合损失函数。9 A5 I9 I% d, e% |( e/ {/ Q
    进行优化,使得聚类层优化为w.r.t.Lcluster,解码器优化为w.r.t.Lrec,编码器优化为w.r.t.两者。
      t2 N  l: Y; _& [( O* z+ E  o4 O集群层的初始化是通过Kmeans完成的。如[9]所示,当编码器针对这两种损失进行优化时,解码器保持不变,并充当正则化器,以保持编码器的嵌入质量。
      a) D9 S, i5 a& _本阶段的综合损失为:' z' v3 K- X6 y* r& E% Z# j

    - n1 Q2 Q2 c1 y* y' E  _% h$ P& X4 Q, N( T

    ) O9 }; R  w$ s  g/ |  t0 g实现细节
    # \& R7 Q/ a: j2 r5 ]& l2 U1 |* S8 D5 h3 e& T. x; m2 f& Q1 D% Q

    4 F+ L% _- w8 Z# b- p* R  e# P' K* N% [; o% e1 u
    def calc_reg_loss(model, reg_type='l2', avg=True):: O- s) @. l8 I- Q$ u- ?
        reg_loss = None
    3 J+ M# M9 Q# U" w; P1 ]' w    parameters = list(param for name, param in model.named_parameters() if 'bias' not in name)
    * I) N! a8 s) Q6 |    num_params = len(parameters)
    5 ?9 K- e/ ?8 x& s    if reg_type.lower() == 'l2':3 [" ?/ L- M8 ?
            for param in parameters:
    - ]2 Q( W  b1 I            if reg_loss is None:
    ' S; D2 _1 l# i0 i) A  @" l                reg_loss = 0.5 * torch.sum(param ** 2)1 f, G8 i# Q" `  v
                else:
    ; A, E# K- N7 T/ c6 Q                reg_loss = reg_loss + 0.5 * param.norm(2) ** 24 _* Y& F- R% m0 I5 q
    ) t7 n: X( T: q# l
            if avg:6 w4 d+ r. }# Q' q0 z. u  M/ [
                reg_loss /= num_params* [- }4 t) J# n% q6 y6 f
            return reg_loss
    % T9 Q. i: |$ B    else:0 Z: U% a: {0 D; j- C
            return torch.tensor(0.0, device=model.device)/ a9 @( N# ~- N" V1 C- l' n: A' K
    10 S- Q( d1 |  E: b8 r
    2
    ) A. o( {% a4 m+ a& {/ f3$ m. _4 s$ h1 h3 @
    41 G) e' _, G  d: I6 @
    5
      [* a6 a4 B8 k/ |3 K: n; `64 Y% V% i, I' K
    7
    ' A- B0 }9 _% o  }8/ u. x* X& n; ~# a% S$ \8 f
    99 _( }2 v% @9 n
    101 `& @. w- r1 o2 F9 t
    11
    # O& E6 ^1 s  F& L0 \; L4 Q* }! \3 S127 N' E2 U' M$ ?$ R
    13. e) z8 R; \8 p3 D/ F
    14
    ' @- d3 Y' {/ }: I7 I150 N( W0 [  n# C. P7 r
    168 v1 r+ R8 p) s5 a1 y6 E

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

    4 V3 e1 R9 R$ ^/ n0 W' z1 n- f9 c: o& C5 Y7 c
    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-21 20:08 , Processed in 0.395180 second(s), 50 queries .

    回顶部