QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 3101|回复: 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( x/ s& d) Y+ B; o) r, s1 [9 M

    1 E, R: `8 @! ]4 b/ z骨架图算法
    , W# U$ K: C5 K! ^( i
    $ ?" }* ~7 p( w
    3 T9 x- j3 \* _/ t. M3 n4 D8 zGraph Embedded Pose Clustering for Anomaly Detection' i) _" d( q; t1 y# M" c
    paper        code
    1 _% X% ~! j1 nhttps://arxiv.org/abs/1912.11850        https://github.com/amirmk89/gepc( W% Y& Q9 s* K
    我们提出了一种用于人类行为异常检测的新方法。我们的方法直接适用于可以从输入视频序列计算的人体姿势图。这使得分析独立于扰动参数,如视点或照明。我们将这些图映射到一个潜在空间并将它们聚类。然后,每个操作都由其对每个聚类的软赋值来表示。这为数据提供了一种“词袋”表示,其中每个动作都由其与一组基本动作词的相似性来表示。然后,我们使用基于狄利克雷过程的混合物,这对于处理比例数据(例如我们的软赋值向量)很有用,以确定一个动作是否正常。, @# Y. \! |& U6 b! H

      M1 I% R$ M+ U8 |* {4 s& [9 s" s首先,我们对输入数据使用人体姿态检测器。这抽象了问题,并防止下一步处理诸如视点或照明变化等有害参数。人的行为被表示为时空图,我们将其嵌入(第3.1、3.2小节)并聚类(第3.3小节)到一些潜在空间中。现在,每个动作都表示为一组基本动作的软分配向量。这抽象了动作的基本类型(即细粒度或粗粒度),从而进入学习其分布的最后阶段。我们用于学习软分配向量分布的工具是Dirichlet过程混合(第3.4小节),我们将模型拟合到数据中。然后使用该模型确定动作是否正常。
    ) R7 S- v9 K1 v, N0 w. `1 v; L2 }9 R7 \- z  x
    图的每个节点对应于一个关键点、一个身体关节,每个边表示两个节点之间的某种关系。 存在许多"关键点关系",如解剖学上定义的物理关系(例如,左手腕和肘部连接)和由运动定义的动作关系,这些运动往往在特定动作的上下文中高度相关(例如,跑步时左右膝盖倾向于朝相反方向移动)。图的方向来自于这样一个事实,即一些关系是在优化过程中学习的,并且不是对称的。这种表示的一个好处是紧凑,这对于高效的视频分析非常重要。
    2 I7 N7 B; `8 g/ U7 X为了在时间上扩展,将从视频序列中提取的姿势关键点表示为姿势图的时间序列。 时间姿势图是人体关节位置的时间序列。时域邻接可以类似地通过连接连续帧中的关节来定义,允许我们利用姿势图序列的空间和时间维度执行图卷积运算9 j0 a, d! T# d" v

    ! O" ~, w# K" o) p我们提出了一种基于深度时态图自动编码器的结构,用于嵌入时态姿态图。 基于图2所示ST-GCN的基本块设计,我们将基本GCN算子替换为新的空间注意力图卷积,如下所示。
    ; ?, i. U" D; l" V3 C7 t9 }4 x8 p# P2 e$ i+ g
    3.2. Spatial Attention Graph Convolution
    . Q& q# F. u$ G1 e. P. Z8 ]: N我们提出了一个新的图算子,如图3所示,它使用三种类型的邻接矩阵:静态、全局学习和推断(基于注意力)。每个邻接类型使用单独的权重应用其自己的GCN。( i- i) C* w2 d  a7 n& @

    ' ~( a) l! ]1 X9 v3 y8 K* }3 `GCN的输出按通道维度堆叠。采用1×1卷积作为加权叠加输出的可学习缩减度量,并提供所需的输出信道数。" F; @+ @+ [$ W- {6 R$ y" v" D

    - ^  {: o& ~* |6 ~" G+ ?三个邻接矩阵捕捉了模型的不同方面:
    : s$ v. V/ `: H0 U) q(i)使用身体部位连通性作为优先于节点关系,使用静态邻接矩阵表示。
    1 X8 q: h- ?$ C" W+ r% F$ w(ii)由全局邻接矩阵捕获的数据集级关键点关系,以及! V, X; M+ `+ o0 d2 u) I
    (iii)由推断邻接矩阵获取的样本特定关系。最后,可学习约简度量对不同的输出进行加权& B5 l- d% ~- l: H( U8 l7 C7 I

    1 B5 t! x4 x, S8 h0 _0 X/ X) p; ]5 m
      I- e  [* i# b, Y) F" R后续段落介绍了静态、全局学习和推断的邻接矩阵的设置方法,即图3中的A,B和C,在此略过。- `  ]9 R: n* O7 f
    3.3. Deep Embedded Clustering
    7 ]1 B  }, h. s1 P5 E" {/ ^为了构建我们的底层动作词典,我们采用训练集样本,并将它们联合嵌入和聚类到一些潜在空间中。然后,每个样本由其分配给每个底层聚类的概率表示。选择目标是为了提供不同的潜在集群,这些集群上存在动作。
    1 J; M. w$ `4 x! t* K+ {
    ! N. ~1 I3 U8 ]3 W, |我们采用了深嵌入聚类的概念[32],用我们的ST-GCAE架构对时间图进行聚类。所提出的聚类模型由编码器、解码器和软聚类层三部分组成。
    " H( k4 z& l% t6 f& {. l. Z2 A% ?* K* ^1 a- l$ o
    具体地说,我们的ST-GCAE模型保持了图的结构,但使用了较大的时间步长和不断增加的通道数来将输入序列压缩为潜在向量。解码器使用时间上采样层和额外的图卷积块,用于逐渐恢复原始信道计数和时间维度。
    % w9 W  c* i2 \4 L" }" P' i1 R# _6 z
    : ?4 k% p0 q2 t, MST-GCAE的嵌入是数据聚类的起点。在我们的聚类优化阶段,对基于重构的初始嵌入进行微调,以达到最终的聚类优化嵌入。
    3 D, w8 v3 h( t  S( L
    ! Q7 J! P1 `0 q+ h4 o6 p  h符号        表示; ~1 f2 E, }: F0 H  i
    x i x_ix
    ! `  o4 a4 I3 h1 q6 m; Vi: P4 |) b, L: O) Z1 m

    . T! m! x0 U* [; E         输入示例
    3 D, H  c( x( |0 z6 W1 m9 a, Vz i z_iz
    + M( J# @% N3 r; g; xi0 O- A- b5 G2 @) ^+ ~/ ]$ R2 Y6 _1 ^

    + e  x/ N: t! x         编码器的潜在嵌入1 }9 c9 M' P1 p) F
    y i y_iy 2 j* t3 H( u( F& S7 }/ _
    i+ G/ N$ [/ O4 Z( q' g$ [* T
    7 x- ^2 r  E: Z( b7 k7 Y6 R. s3 J
            使用聚类层计算的软聚类分配
    , W: G7 J8 C/ z! _! T* XΘ ΘΘ        聚类层的参数
    ) g" B4 C0 y& i3 ~- Z+ {. a8 ]4 tp i k p_{ik}p
    8 M" ]; e( Y9 r9 w" K2 uik
    ) V% S: G1 j  `$ ~4 r# B0 ?
    . c2 V  n" }0 V4 E         probability for the i-th sample to be assigned to the k-th cluster) H2 P  u3 w! n) e8 d- F

    - L% u/ g' ^: Q7 U* x4 s- y8 M6 h$ m' C# _8 P1 f: q
    我们采用[32]提出的聚类目标和优化算法。聚类目标是最小化当前模型概率聚类预测P和目标分布Q之间的KL散度:, o) z) g+ f7 A  q  x2 ?1 f. r) U( }$ x
    7 Q, |! s  H% n0 A; Q/ `
    6 n! n  C6 ]3 ~6 D1 H0 @# ]/ r, {
    目标分布旨在通过标准化和将每个值推到更接近0或1的值来加强当前的群集分配。反复应用将P转换为Q的函数将最终导致硬分配向量。使用以下等式计算目标分布的每个成员:
    8 m2 F5 H9 R, j! }
    * O- Y( I7 e; Q+ @5 A( U  J; l
    6 V2 f+ T; U' j2 O聚类层由为编码训练集计算的K均值质心初始化。优化以期望最大化(EM)的方式进行。
    . m8 u5 W( O  S1 a; t7 M8 D+ V9 h在期望步骤期间,整个模型是固定的,并且目标分布Q被更新。在最大化阶段,优化模型以最小化聚类损失Lcluster。/ J& q" s; H6 {! w8 U3 r+ |; R

    8 ?7 }, o$ R7 k2 T3.4. Normality Scoring
    ) i9 F, T% Z  `: a8 ?' S+ c该模型支持两种类型的多模分布。一个是集群分配级别;另一个是在软分配向量级别。例如,一个动作可能被分配给多个集群(集群级分配),导致多模式软分配向量。
    : m+ O3 k1 s- i- o# ^软分配向量本身(捕获动作)也可以通过多模态分布建模。
    $ I% V5 i' F0 p! [, h
    . _- Y8 B$ t% ~: ?# F$ ~Dirichlet过程混合模型(DPMM)是评估比例数据分布的一种有效方法。它满足我们所需的设置:(i)估计(拟合)阶段,在此阶段,一组分布参数为评估,和(ii)推理阶段,为每个嵌入样本使用拟合模型。彻底的Blei和Jordan[4]给出了该模型的概述。' X9 H; _- d* ]0 v% W8 v

    " {# A1 q% ~: |* e8 p, x! {Dirichlet过程混合模型(DPMM)是评估比例数据分布的有效方法。它符合我们要求的设置:
    0 S9 E5 r! Y1 c8 t9 `" g( f(i) 估计(拟合)阶段,在此期间评估一组分布参数,以及
    * Y, C! `1 i% E( P( D(ii)推理阶段,使用拟合模型为每个嵌入样本提供分数。Blei和Jordan[4]对模型进行了全面概述。
    ! k8 Q+ H& Y' w2 [6 b3 z1 }6 I, V1 K5 U  q- J
    DPMM是单峰Dirichlet分布的常见混合扩展,并使用Dirichllet过程,这DirichletDistribution的无限维扩展。该模型是多模态的,能够将每个模式捕获为混合成分。拟合模型具有多个模式,每个模式表示对应于一个正常行为的一组比例。在测试时,使用拟合模型通过其对数概率对每个样本进行评分。[4,8]中提供了关于DPMM使用的进一步解释和讨论。
    3 U2 [& i& y; u, B  S# d4 c- w; C( \' {5 d# V
    3.5. Training
    & p4 Z& B; N8 ^7 ~# q7 R! Z该模型的训练阶段包括两个阶段,一个是自动编码器的预训练阶段,其中网络的聚类分支保持不变,另一个是微调阶段,其中嵌入和聚类都得到优化。具体而言:2 [) J/ }  ^& L) b( c

    1 w8 B5 ]. x! F, n' HPre-Training: 该模型通过最小化重建损失(表示为Lrec)来学习编码和重建序列,Lrec是原始瞬时位姿图和ST-GCAE重建的位姿图之间的L2损失' |8 I7 O  }& S2 h
    + Z  E. F' l0 s3 O0 r/ p$ [. P; |
    Fine-Tuning:6 z: A8 d$ F2 C: {$ V! P6 T
    该模型优化了由重建损失和聚类损失组成的组合损失函数。
    . p2 m( k9 K0 Z, K0 V$ l进行优化,使得聚类层优化为w.r.t.Lcluster,解码器优化为w.r.t.Lrec,编码器优化为w.r.t.两者。
    ) o  n- ]. i; c8 n7 K集群层的初始化是通过Kmeans完成的。如[9]所示,当编码器针对这两种损失进行优化时,解码器保持不变,并充当正则化器,以保持编码器的嵌入质量。5 A/ }  Y' |' l4 n* i8 Q
    本阶段的综合损失为:
    ' ?! w) W5 a1 D) l. b  Y
    5 A1 U4 `! c2 j# n. l+ U0 d5 K" I; l& {+ N  N9 N8 U
    5 a! S1 V: b3 I5 N+ h& M
    实现细节( ^* Q. f; ^$ I$ s: ?: b
    / v' [+ ^/ l+ Q5 O

    ' `; ?9 V9 l7 [  W1 Y
    : p7 R9 f8 u! z; Z- ]def calc_reg_loss(model, reg_type='l2', avg=True):
    8 @0 F5 E! U! Q& U( F! ]- p    reg_loss = None
    & V, z/ K0 f! {1 y4 |    parameters = list(param for name, param in model.named_parameters() if 'bias' not in name)3 d- M. W5 ?( I$ _" u
        num_params = len(parameters)8 s+ N2 m* I. ]/ U9 _( F
        if reg_type.lower() == 'l2':
    - h9 p2 F: {3 ^$ l' T        for param in parameters:2 V6 N  h( m- k' J
                if reg_loss is None:
    - d: Z6 z8 n& w+ R                reg_loss = 0.5 * torch.sum(param ** 2): V0 I8 z  P; Q, \4 I" q; W
                else:
    $ V1 {1 @- V) p8 Y                reg_loss = reg_loss + 0.5 * param.norm(2) ** 21 Z% ^, r4 J( \9 l
    3 L+ F' k- X( Q: I
            if avg:
    " K# i: |, A! H/ f3 _' [            reg_loss /= num_params% u; {" k. A' C8 Q/ [  s3 a
            return reg_loss
    " |; p# C7 Z) q- ~- [    else:- b0 m8 b, _+ ]8 d: D
            return torch.tensor(0.0, device=model.device)( ~* w- H: N7 I" b- B  V
    1
    & R& G, x8 l9 ^, W& f" G2' y% F  e% L! k, }* f
    3! `$ g2 j  j  j. \+ ?
    4
    ) z( k  i- Y, a5
    4 j4 ?" y- x$ @! I- u( U6
    6 k" }: z2 \) v8 |- ?' ?7
    , ~: U: k1 N3 K' o9 b1 r8
    0 T7 M% L: O! H( T3 S9/ M" P# |1 W: V' e
    10# W) X; E. `) R- o  @$ s
    116 W  ^! y& @0 a4 b/ c- O( r
    12
    1 H; n' k7 T0 E- {0 T13! \/ L" q) k# P4 n) z* a8 X
    149 I8 L; V) q; |+ }4 }3 a
    15) Q% \1 I  Q7 g: Z9 e* x
    16
    3 k  L6 Y$ F* f
    . O  B' o# t; X- ~! Z6 t. |2 @( X8 Q% k$ a3 v

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

    回顶部