QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 3090|回复: 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* ]( d" k4 a/ S& f) y( S$ w

    8 ^* a8 K% O' U8 N骨架图算法6 {/ Q! ?/ M1 i' d
      s$ @4 h- A0 w1 C8 C
    7 Z& ~& ?! U% Q+ L
    Graph Embedded Pose Clustering for Anomaly Detection
    4 k* I, X  f: c3 d: F1 lpaper        code9 ~! z) {2 U6 {& U7 _  ]) `
    https://arxiv.org/abs/1912.11850        https://github.com/amirmk89/gepc
    6 G+ f/ J- ?6 G; U4 B  Z$ C我们提出了一种用于人类行为异常检测的新方法。我们的方法直接适用于可以从输入视频序列计算的人体姿势图。这使得分析独立于扰动参数,如视点或照明。我们将这些图映射到一个潜在空间并将它们聚类。然后,每个操作都由其对每个聚类的软赋值来表示。这为数据提供了一种“词袋”表示,其中每个动作都由其与一组基本动作词的相似性来表示。然后,我们使用基于狄利克雷过程的混合物,这对于处理比例数据(例如我们的软赋值向量)很有用,以确定一个动作是否正常。
    4 [: q3 T. D4 c+ s
    , ~8 z8 a8 i, Q0 ~* X: R; {首先,我们对输入数据使用人体姿态检测器。这抽象了问题,并防止下一步处理诸如视点或照明变化等有害参数。人的行为被表示为时空图,我们将其嵌入(第3.1、3.2小节)并聚类(第3.3小节)到一些潜在空间中。现在,每个动作都表示为一组基本动作的软分配向量。这抽象了动作的基本类型(即细粒度或粗粒度),从而进入学习其分布的最后阶段。我们用于学习软分配向量分布的工具是Dirichlet过程混合(第3.4小节),我们将模型拟合到数据中。然后使用该模型确定动作是否正常。. x2 B) j* Q+ j5 q$ e3 ^

    : m8 l8 C# o. n2 _" {2 r图的每个节点对应于一个关键点、一个身体关节,每个边表示两个节点之间的某种关系。 存在许多"关键点关系",如解剖学上定义的物理关系(例如,左手腕和肘部连接)和由运动定义的动作关系,这些运动往往在特定动作的上下文中高度相关(例如,跑步时左右膝盖倾向于朝相反方向移动)。图的方向来自于这样一个事实,即一些关系是在优化过程中学习的,并且不是对称的。这种表示的一个好处是紧凑,这对于高效的视频分析非常重要。3 j3 H5 p5 O" ]3 k( J6 x& ~
    为了在时间上扩展,将从视频序列中提取的姿势关键点表示为姿势图的时间序列。 时间姿势图是人体关节位置的时间序列。时域邻接可以类似地通过连接连续帧中的关节来定义,允许我们利用姿势图序列的空间和时间维度执行图卷积运算
    " ]0 F8 @3 I  ~+ O4 Q7 v# m& ]! o  W$ V
    我们提出了一种基于深度时态图自动编码器的结构,用于嵌入时态姿态图。 基于图2所示ST-GCN的基本块设计,我们将基本GCN算子替换为新的空间注意力图卷积,如下所示。
    : }' Y/ m( J) [3 ]  S# R) ^, Z& y1 e
    9 x7 ~$ u& `3 n% r6 {: U/ g3.2. Spatial Attention Graph Convolution' _; z$ p" s; Q; V5 a1 z# Y
    我们提出了一个新的图算子,如图3所示,它使用三种类型的邻接矩阵:静态、全局学习和推断(基于注意力)。每个邻接类型使用单独的权重应用其自己的GCN。
    ! C- G) ^3 f+ M- e! L* Q5 b8 {; ?* g% P' B0 }
    GCN的输出按通道维度堆叠。采用1×1卷积作为加权叠加输出的可学习缩减度量,并提供所需的输出信道数。+ g* O4 k0 @* Z. G  P

    ! q( y  o7 k" c# d) }% V4 W三个邻接矩阵捕捉了模型的不同方面:$ `1 Q+ b& A% [. ^  d
    (i)使用身体部位连通性作为优先于节点关系,使用静态邻接矩阵表示。& x2 \) Q1 Y2 M4 P
    (ii)由全局邻接矩阵捕获的数据集级关键点关系,以及8 l$ [6 P/ ~9 Z) o# r: e
    (iii)由推断邻接矩阵获取的样本特定关系。最后,可学习约简度量对不同的输出进行加权
    - m' U2 p+ L9 w, \3 k$ `
    / F  \6 W7 D: ~2 j5 `% B
    1 Q- y! c" X0 k2 t" Z7 ]  _后续段落介绍了静态、全局学习和推断的邻接矩阵的设置方法,即图3中的A,B和C,在此略过。
    % C6 v, C- H/ u# l# b" T# f3.3. Deep Embedded Clustering: O4 H+ u( \  Y
    为了构建我们的底层动作词典,我们采用训练集样本,并将它们联合嵌入和聚类到一些潜在空间中。然后,每个样本由其分配给每个底层聚类的概率表示。选择目标是为了提供不同的潜在集群,这些集群上存在动作。
    - i, X  q4 _) ]5 t' j) i0 G) M  p* s! x+ t0 @
    我们采用了深嵌入聚类的概念[32],用我们的ST-GCAE架构对时间图进行聚类。所提出的聚类模型由编码器、解码器和软聚类层三部分组成。* c1 ]9 J! n: K$ [4 K* X- J
    - E, d$ _; _0 ^7 d
    具体地说,我们的ST-GCAE模型保持了图的结构,但使用了较大的时间步长和不断增加的通道数来将输入序列压缩为潜在向量。解码器使用时间上采样层和额外的图卷积块,用于逐渐恢复原始信道计数和时间维度。
    * E( v! K$ c# ~% E. H$ X- b
    $ z3 A1 L3 Y: B- RST-GCAE的嵌入是数据聚类的起点。在我们的聚类优化阶段,对基于重构的初始嵌入进行微调,以达到最终的聚类优化嵌入。9 m- F8 Q$ o- m1 D
    ! Q; W: X1 }- \8 Q/ o6 B; ~
    符号        表示
    ( p/ h: E: Q9 Z' [/ j) gx i x_ix
    8 H% f, h" z2 w2 M, ai
    ; `1 E3 J6 B% C6 t; Z, S4 h
    3 F$ {7 ^6 X$ @/ I7 S         输入示例
    ' a0 \) t0 E. R8 ^5 r8 y8 I+ A( az i z_iz
    0 ^0 [/ j5 }$ ?6 b: oi# @# A  q* s! D1 V/ i

    1 o5 v( ~$ P" e5 y8 q* |/ N3 I: C         编码器的潜在嵌入4 [0 d, q, p" }
    y i y_iy
    . f8 {2 k& d3 d, y9 O; fi/ z- m% L9 m$ n% U5 h! N

    3 \/ z, N; C6 Q3 V5 m9 S         使用聚类层计算的软聚类分配" g& Y; R, L' Z$ C. b/ K. L
    Θ ΘΘ        聚类层的参数6 b) \  f" h  B3 p
    p i k p_{ik}p / F* j5 R( {* @( u
    ik. D: z" L. j9 a' f

    - ?& \. R# b. r1 {9 }# q         probability for the i-th sample to be assigned to the k-th cluster: o4 \. O1 Q: i% z- C. R& r. B# @

    " \5 T( d  H& Q! ~- P/ x( T& ?! Q; U$ G( x/ H- E
    我们采用[32]提出的聚类目标和优化算法。聚类目标是最小化当前模型概率聚类预测P和目标分布Q之间的KL散度:9 i6 r9 v- u# b1 L
    # L9 {: K  Z- v8 A/ u

    " z! u8 J0 `3 G% g目标分布旨在通过标准化和将每个值推到更接近0或1的值来加强当前的群集分配。反复应用将P转换为Q的函数将最终导致硬分配向量。使用以下等式计算目标分布的每个成员:
    / S, }- C6 t- s4 B8 E  o4 c7 L. G. x0 |8 s, r# l: F5 i3 s8 D

    : S7 c- e0 R8 @' m* x# j8 N" ~/ B/ Q聚类层由为编码训练集计算的K均值质心初始化。优化以期望最大化(EM)的方式进行。
    % E9 z$ {, u, Q/ q$ p  O8 I在期望步骤期间,整个模型是固定的,并且目标分布Q被更新。在最大化阶段,优化模型以最小化聚类损失Lcluster。
    * }: {7 ]" f" p. Q) b% Y& Q* r
    ) W& ]; ^! c( K8 i3 J& ^3.4. Normality Scoring/ p' M3 n2 @/ ~) r
    该模型支持两种类型的多模分布。一个是集群分配级别;另一个是在软分配向量级别。例如,一个动作可能被分配给多个集群(集群级分配),导致多模式软分配向量。
    , w4 n5 P  L1 }软分配向量本身(捕获动作)也可以通过多模态分布建模。
    0 _9 v) h; j: [. M/ W3 C* ~
    7 z0 R- E; u' U, k* c- ]Dirichlet过程混合模型(DPMM)是评估比例数据分布的一种有效方法。它满足我们所需的设置:(i)估计(拟合)阶段,在此阶段,一组分布参数为评估,和(ii)推理阶段,为每个嵌入样本使用拟合模型。彻底的Blei和Jordan[4]给出了该模型的概述。
    1 o5 S# u9 @( R  P' w5 M
    $ j! R, n# e: @* @Dirichlet过程混合模型(DPMM)是评估比例数据分布的有效方法。它符合我们要求的设置:/ ], E# D5 B1 v1 @+ m1 y
    (i) 估计(拟合)阶段,在此期间评估一组分布参数,以及" p/ v, h* l& ^) ~" a4 i. W8 [
    (ii)推理阶段,使用拟合模型为每个嵌入样本提供分数。Blei和Jordan[4]对模型进行了全面概述。& l; y+ d, u" a3 u6 ]" {. R

    , Y. M' i1 ~9 O# Z0 cDPMM是单峰Dirichlet分布的常见混合扩展,并使用Dirichllet过程,这DirichletDistribution的无限维扩展。该模型是多模态的,能够将每个模式捕获为混合成分。拟合模型具有多个模式,每个模式表示对应于一个正常行为的一组比例。在测试时,使用拟合模型通过其对数概率对每个样本进行评分。[4,8]中提供了关于DPMM使用的进一步解释和讨论。, C. Q+ k$ J7 t5 o* W
      l* g( w- Q  X& Y. ^9 r7 X' i
    3.5. Training3 B% _/ X+ T3 W% i) t
    该模型的训练阶段包括两个阶段,一个是自动编码器的预训练阶段,其中网络的聚类分支保持不变,另一个是微调阶段,其中嵌入和聚类都得到优化。具体而言:- S8 H, d2 L  l: e8 s, ^! X

    - Z- U( A7 O& [( G5 `" mPre-Training: 该模型通过最小化重建损失(表示为Lrec)来学习编码和重建序列,Lrec是原始瞬时位姿图和ST-GCAE重建的位姿图之间的L2损失+ s% M" W( j% T+ s

    / f. `4 ?3 Q3 W4 V) EFine-Tuning:2 v# o9 X: @# P
    该模型优化了由重建损失和聚类损失组成的组合损失函数。
    4 t  ]! M" p3 d进行优化,使得聚类层优化为w.r.t.Lcluster,解码器优化为w.r.t.Lrec,编码器优化为w.r.t.两者。9 D1 H+ z  ]3 L5 B' A  J& o
    集群层的初始化是通过Kmeans完成的。如[9]所示,当编码器针对这两种损失进行优化时,解码器保持不变,并充当正则化器,以保持编码器的嵌入质量。5 x. d9 X# \  L+ g0 t' ]0 }
    本阶段的综合损失为:% H3 a; }( Q9 H/ f8 ?2 v
    1 d0 n0 }9 n+ c* O9 m8 P
    * n  ~! d2 U  L' u
    0 x% v$ s+ l$ y% F' @
    实现细节: S% G, _1 L, M: C& _/ T# L( X; X& f
    0 J$ B8 X9 S" ]) @
    " S% W+ U; Y8 q8 x. F( P
    ' k" j, q7 b' E* R" C6 k
    def calc_reg_loss(model, reg_type='l2', avg=True):5 O  K2 Y8 \: s% O# g
        reg_loss = None
    $ L( v8 ]* B  U0 a! o# a    parameters = list(param for name, param in model.named_parameters() if 'bias' not in name)
    2 J5 e1 T! z1 \& Q0 G    num_params = len(parameters)
    ( E7 H: f) N% t- C! ?    if reg_type.lower() == 'l2':1 K) G+ \4 o% C- N
            for param in parameters:
      f! ]. m% k  O: L            if reg_loss is None:* \% @/ `- P7 `7 I3 J* ^; {- P! J
                    reg_loss = 0.5 * torch.sum(param ** 2)
    9 g% q) J! _/ u! {            else:
    * h- d7 O3 D3 I                reg_loss = reg_loss + 0.5 * param.norm(2) ** 26 a2 x0 N* L& o& |7 r
    * B6 N& O. M; f5 o" t
            if avg:
    - H  L, j$ Y( a            reg_loss /= num_params
    9 @4 V: \$ r/ a. ?        return reg_loss
    ) f% g' i6 [. G. n& }4 Q4 Z  H$ E    else:- i1 R- R! m) z2 s3 i0 `/ ^
            return torch.tensor(0.0, device=model.device)
    ) t* x# s( U3 g) U1/ {6 `* T- F; }
    2: E2 i- r( ?- v& ]
    3- v/ }/ B5 N4 c5 G! J* a. p- z# v+ k
    4
    / t; @/ T& L' @+ K5 g  P5% N: Y) O4 r* S
    68 [, m( D4 D) w- r
    7
    - z- }: M2 x! a! O8' x9 a; K0 A5 p0 i
    90 @3 o" F) G6 F. b- _- c+ c! b3 ]
    10+ V: C/ r) P; s3 D) I- ?+ @( Z
    11* {3 d, \) x: R' \3 l
    12
    + @1 z! I. U1 s/ E13
      u0 [0 D1 S2 T140 A7 [0 @# w! A3 z0 d; I5 u
    15
    , K% m% H. c- x& s0 v: S7 r( R# U166 d3 j9 g; i$ z- j, ^% K: w

    : }# Y% X2 n* A$ @" i4 U0 d% X, l1 [1 l( a. {2 w! k8 e* k
    6 [/ `( Z, V/ k

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

    回顶部