QQ登录

只需要一步,快速开始

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

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

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

5273

主题

82

听众

17万

积分

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

    [LV.4]偶尔看看III

    网络挑战赛参赛者

    网络挑战赛参赛者

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

    群组2018美赛大象算法课程

    群组2018美赛护航培训课程

    群组2019年 数学中国站长建

    群组2019年数据分析师课程

    群组2018年大象老师国赛优

    跳转到指定楼层
    1#
    发表于 2022-9-5 15:49 |只看该作者 |倒序浏览
    |招呼Ta 关注Ta
    骨架图算法Graph Embedded Pose Clustering% e- _9 Y: r7 F' r. K- H* C
    1 T  a4 |* V% \. V; z1 _1 g
    骨架图算法
    5 L+ J" ^0 U: p4 j! p0 e6 m9 R* t( Q7 o4 m8 z
    $ @3 b! N: X' ?$ I2 ?( u  A( u: m
    Graph Embedded Pose Clustering for Anomaly Detection
    - V0 i2 {$ @( p9 n# U- I# d: g' Ppaper        code/ T% r: ]) s2 N( `4 a% ?
    https://arxiv.org/abs/1912.11850        https://github.com/amirmk89/gepc6 d" T# q3 @- S7 M' X
    我们提出了一种用于人类行为异常检测的新方法。我们的方法直接适用于可以从输入视频序列计算的人体姿势图。这使得分析独立于扰动参数,如视点或照明。我们将这些图映射到一个潜在空间并将它们聚类。然后,每个操作都由其对每个聚类的软赋值来表示。这为数据提供了一种“词袋”表示,其中每个动作都由其与一组基本动作词的相似性来表示。然后,我们使用基于狄利克雷过程的混合物,这对于处理比例数据(例如我们的软赋值向量)很有用,以确定一个动作是否正常。
    8 L5 p% x$ d* n8 z0 G  W
    1 g# @% M) f/ s. w1 g# @4 M首先,我们对输入数据使用人体姿态检测器。这抽象了问题,并防止下一步处理诸如视点或照明变化等有害参数。人的行为被表示为时空图,我们将其嵌入(第3.1、3.2小节)并聚类(第3.3小节)到一些潜在空间中。现在,每个动作都表示为一组基本动作的软分配向量。这抽象了动作的基本类型(即细粒度或粗粒度),从而进入学习其分布的最后阶段。我们用于学习软分配向量分布的工具是Dirichlet过程混合(第3.4小节),我们将模型拟合到数据中。然后使用该模型确定动作是否正常。
    7 V- L/ R0 G: e1 S9 z$ }% Z8 J
    3 w9 `. L3 R* j& s/ [$ r图的每个节点对应于一个关键点、一个身体关节,每个边表示两个节点之间的某种关系。 存在许多"关键点关系",如解剖学上定义的物理关系(例如,左手腕和肘部连接)和由运动定义的动作关系,这些运动往往在特定动作的上下文中高度相关(例如,跑步时左右膝盖倾向于朝相反方向移动)。图的方向来自于这样一个事实,即一些关系是在优化过程中学习的,并且不是对称的。这种表示的一个好处是紧凑,这对于高效的视频分析非常重要。
    / P7 t8 f0 _& Q- s, @8 j9 T, r为了在时间上扩展,将从视频序列中提取的姿势关键点表示为姿势图的时间序列。 时间姿势图是人体关节位置的时间序列。时域邻接可以类似地通过连接连续帧中的关节来定义,允许我们利用姿势图序列的空间和时间维度执行图卷积运算
    0 t- j4 H( D! Q
    * P4 r) g! j# l1 Z& z* t& j我们提出了一种基于深度时态图自动编码器的结构,用于嵌入时态姿态图。 基于图2所示ST-GCN的基本块设计,我们将基本GCN算子替换为新的空间注意力图卷积,如下所示。
    ! _$ _5 p  H( r. ^3 A' Y
    / M  P( ~) o. L9 H! Q* ?6 @3.2. Spatial Attention Graph Convolution8 |5 b- v1 e' L( u" ^7 I
    我们提出了一个新的图算子,如图3所示,它使用三种类型的邻接矩阵:静态、全局学习和推断(基于注意力)。每个邻接类型使用单独的权重应用其自己的GCN。
    5 u& L% w2 c; u( H7 u0 n0 A* s% U% U6 h* I# g; L
    GCN的输出按通道维度堆叠。采用1×1卷积作为加权叠加输出的可学习缩减度量,并提供所需的输出信道数。
    $ L% U1 `' ~/ P+ o% V) x. a" W2 {* Q$ B( M. i, }6 R
    三个邻接矩阵捕捉了模型的不同方面:( R9 ^) X& {: w, V- M
    (i)使用身体部位连通性作为优先于节点关系,使用静态邻接矩阵表示。, I8 @! H5 }- w: y! B5 J
    (ii)由全局邻接矩阵捕获的数据集级关键点关系,以及
    & G. s' r$ r+ R8 I(iii)由推断邻接矩阵获取的样本特定关系。最后,可学习约简度量对不同的输出进行加权
    ' I4 w$ N  [" f% c- p( I' j9 @/ \! i8 o" I# Y/ E/ X

    7 g* b& D0 u8 \) @. i& p6 g9 a后续段落介绍了静态、全局学习和推断的邻接矩阵的设置方法,即图3中的A,B和C,在此略过。
    8 a4 P) A- X0 F* v1 j3.3. Deep Embedded Clustering
    ) `, k6 M# T8 l5 b$ C* E0 O  k, V为了构建我们的底层动作词典,我们采用训练集样本,并将它们联合嵌入和聚类到一些潜在空间中。然后,每个样本由其分配给每个底层聚类的概率表示。选择目标是为了提供不同的潜在集群,这些集群上存在动作。9 X! _2 G# e5 v: e" E& u5 l

    : d2 c' C* O: K' P$ Z我们采用了深嵌入聚类的概念[32],用我们的ST-GCAE架构对时间图进行聚类。所提出的聚类模型由编码器、解码器和软聚类层三部分组成。, @( j/ `+ A" \4 B1 `* m; R. N, W: e
    % T& G- I& U& y  P' ], R& {
    具体地说,我们的ST-GCAE模型保持了图的结构,但使用了较大的时间步长和不断增加的通道数来将输入序列压缩为潜在向量。解码器使用时间上采样层和额外的图卷积块,用于逐渐恢复原始信道计数和时间维度。
    " k6 c; I7 W7 k9 q
    , w0 t; `( @6 u2 j2 w( bST-GCAE的嵌入是数据聚类的起点。在我们的聚类优化阶段,对基于重构的初始嵌入进行微调,以达到最终的聚类优化嵌入。$ c4 D% T$ Q. s: ?

    " H7 f8 j; L% I. v符号        表示9 ?" m+ ?, o+ A+ ^: y9 c' B, B
    x i x_ix
    0 H3 C4 B* x( j% ]/ w$ Xi; k! z% N1 J9 j2 ^& U
    : g$ P0 U$ M# b0 v( w! `9 E
            输入示例$ w$ y# [* U. n; ]; w
    z i z_iz % @" s1 g/ s. ?* f, R9 J
    i, B6 ]2 d; b  Q7 S2 H
    : V) i( ~+ w3 x. W1 [6 v- a
            编码器的潜在嵌入
    2 I! R* H+ c' C* C4 {$ dy i y_iy
    : }$ z) H3 S: w% Y) @+ K$ si. b: D: h6 N7 S

    . z& `) ?! Y8 `         使用聚类层计算的软聚类分配. n+ N& S. I' [
    Θ ΘΘ        聚类层的参数8 u& u0 ]0 P4 q  t! [% p, e
    p i k p_{ik}p $ _+ d) Z6 @! _0 _  l. Q% @
    ik
    ! {" B0 p+ f* t$ P8 k
    + ?$ w  }8 M9 i' |         probability for the i-th sample to be assigned to the k-th cluster
    ; w3 O! [: e. c6 E% U
    4 g: z+ h7 R" Z- R% u
    , z0 K; Q3 `9 e  m; D我们采用[32]提出的聚类目标和优化算法。聚类目标是最小化当前模型概率聚类预测P和目标分布Q之间的KL散度:
    & j+ p' H/ ]2 e; t; V" E
    ; i7 C$ B" U! c
    9 e3 h* w+ z* B+ i' g目标分布旨在通过标准化和将每个值推到更接近0或1的值来加强当前的群集分配。反复应用将P转换为Q的函数将最终导致硬分配向量。使用以下等式计算目标分布的每个成员:; v2 L6 m$ I# V
    % v. s2 s- t" W& y* ?

    ) E6 `. b0 z3 u' Z/ {6 ]2 {聚类层由为编码训练集计算的K均值质心初始化。优化以期望最大化(EM)的方式进行。; d) {) P/ X1 Z. F
    在期望步骤期间,整个模型是固定的,并且目标分布Q被更新。在最大化阶段,优化模型以最小化聚类损失Lcluster。/ ~8 n2 ^/ x+ M) L
    - O/ }$ v3 |  m. F
    3.4. Normality Scoring
    & q9 o5 K. ^- u该模型支持两种类型的多模分布。一个是集群分配级别;另一个是在软分配向量级别。例如,一个动作可能被分配给多个集群(集群级分配),导致多模式软分配向量。+ f) y  S2 g  J
    软分配向量本身(捕获动作)也可以通过多模态分布建模。
    ! x7 m. |' E. ]% v% v: w% W7 C: v: ^+ H: S
    Dirichlet过程混合模型(DPMM)是评估比例数据分布的一种有效方法。它满足我们所需的设置:(i)估计(拟合)阶段,在此阶段,一组分布参数为评估,和(ii)推理阶段,为每个嵌入样本使用拟合模型。彻底的Blei和Jordan[4]给出了该模型的概述。4 \9 a. s/ _7 V& v# y% R+ u5 Q6 _
    ' B0 ^: d& }: a% E; e
    Dirichlet过程混合模型(DPMM)是评估比例数据分布的有效方法。它符合我们要求的设置:
    % m/ G) |6 U( @(i) 估计(拟合)阶段,在此期间评估一组分布参数,以及' \8 R8 u6 @( f) E/ _, C) X
    (ii)推理阶段,使用拟合模型为每个嵌入样本提供分数。Blei和Jordan[4]对模型进行了全面概述。
    , x* n2 }: D, U: R! N. v
    9 [, g9 Y4 A6 FDPMM是单峰Dirichlet分布的常见混合扩展,并使用Dirichllet过程,这DirichletDistribution的无限维扩展。该模型是多模态的,能够将每个模式捕获为混合成分。拟合模型具有多个模式,每个模式表示对应于一个正常行为的一组比例。在测试时,使用拟合模型通过其对数概率对每个样本进行评分。[4,8]中提供了关于DPMM使用的进一步解释和讨论。" h$ c) b8 `8 A; x5 g; ^  j6 v: [) |

    6 U' l1 Q  r" V. S3.5. Training
    ' w6 ?/ o" Y9 v! \0 w该模型的训练阶段包括两个阶段,一个是自动编码器的预训练阶段,其中网络的聚类分支保持不变,另一个是微调阶段,其中嵌入和聚类都得到优化。具体而言:# ~8 v  y9 g. a7 D5 N8 W- n2 D
    4 m) ]3 [; g' w1 V" _& e, B
    Pre-Training: 该模型通过最小化重建损失(表示为Lrec)来学习编码和重建序列,Lrec是原始瞬时位姿图和ST-GCAE重建的位姿图之间的L2损失0 q( ~  r3 u9 q
    ' N8 G: E% Y# _
    Fine-Tuning:
    3 B" R! T6 H$ `$ v6 O该模型优化了由重建损失和聚类损失组成的组合损失函数。0 a( A9 H& R* `5 X# z- j+ n
    进行优化,使得聚类层优化为w.r.t.Lcluster,解码器优化为w.r.t.Lrec,编码器优化为w.r.t.两者。
    3 w# |) ^2 J+ q1 y集群层的初始化是通过Kmeans完成的。如[9]所示,当编码器针对这两种损失进行优化时,解码器保持不变,并充当正则化器,以保持编码器的嵌入质量。: Z  Z* g  s) ?9 ]9 k
    本阶段的综合损失为:
    3 p: c+ n8 O$ l; W5 l& e) R0 ^, `6 ?- t2 E  y5 E
    % ~& ]# [8 ]: n/ g, n# [6 U; z

    1 a' ], x6 O/ y+ [+ m2 Z+ r实现细节
    # i8 W; j; t, @; }" b2 h' @# H' Q; v

    / t0 F0 B* V0 @! r  q2 n1 h8 c' m, Q/ |
    def calc_reg_loss(model, reg_type='l2', avg=True):' W  i6 _! ^) l' p9 x" G
        reg_loss = None
    & `; T( O1 X5 ^/ W  k    parameters = list(param for name, param in model.named_parameters() if 'bias' not in name)( m. B3 M% f  @- d1 l: s7 I; W: x
        num_params = len(parameters)
    / b; G) ]3 \$ N0 p2 @( c6 L    if reg_type.lower() == 'l2':
    5 e$ _. Y6 X) X/ k! t) t        for param in parameters:& O- c7 i+ P( h! T% I' M
                if reg_loss is None:
    . u0 Y* {2 e' B$ p5 a2 t* S- {7 V                reg_loss = 0.5 * torch.sum(param ** 2)
    " x- b5 t( Z9 {2 ?/ x) t$ z" y            else:2 N$ {) z" o- B7 `' Q6 R$ U
                    reg_loss = reg_loss + 0.5 * param.norm(2) ** 2
    % j% l- k$ B+ x& w4 _% i7 o& ~0 n) d4 Y5 ?  U& c+ b
            if avg:, |( l) h, O: ^- I
                reg_loss /= num_params
    * w6 [0 U6 @, D! ]        return reg_loss
    9 p5 r" k( T" o! J; m& A9 |    else:
    - D1 }3 j" y* C, {1 h        return torch.tensor(0.0, device=model.device)$ C7 I! _9 k) W# v" Z6 `1 K# w- V
    1
    0 Y1 t; r  h) y/ n  u25 P- S7 a7 M" c# e) E( k
    35 ~9 |; V* n4 F6 B% F; y
    4
    % r" k& S& V, z# u59 J; A# {" Z. G0 h+ Z
    69 t/ f7 L' ]8 Y5 M
    7
    ' x! m. x8 A; r7 L" J7 U: i" C. Y8' f  D! @- h' K( \/ d  O% R
    9: Z8 t5 }9 q  Y8 Z! l: N2 X
    10
    * g0 u; o1 q6 _/ d; u11- M. s8 Y; _! Q- Q
    12) @# O* d& W6 n: q
    13' \! E( k9 F: \$ f) T; D) M
    14
    ; m1 b7 d3 b8 b. @- S158 O: K" L0 y* j2 h1 A& e/ ^3 E
    16+ i& c# {7 q$ u

    1 A8 A2 b( G) c3 X% \- u# \2 U! P3 Y3 w

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

    4 E- [& t2 _6 [  A) A' @2 T
    zan
    转播转播0 分享淘帖0 分享分享0 收藏收藏0 支持支持0 反对反对0 微信微信
    您需要登录后才可以回帖 登录 | 注册地址

    qq
    收缩
    • 电话咨询

    • 04714969085
    fastpost

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

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

    蒙公网安备 15010502000194号

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

    GMT+8, 2026-8-5 14:56 , Processed in 0.392196 second(s), 51 queries .

    回顶部