QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 3091|回复: 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
    2 p6 U' }4 @) _/ o7 t3 H7 N8 f: _2 i+ j$ G
    骨架图算法
    : }! @8 I5 `: @7 D: V/ B" w; Z! ]% ~5 b. v/ J) J+ s
    % x& ^% j/ E/ A$ q
    Graph Embedded Pose Clustering for Anomaly Detection  V0 X3 T0 M# M% Y2 L
    paper        code
    & F3 b4 X! ?( w  L& r4 S0 }! ~https://arxiv.org/abs/1912.11850        https://github.com/amirmk89/gepc
    2 Y3 Z7 W4 W. X9 i我们提出了一种用于人类行为异常检测的新方法。我们的方法直接适用于可以从输入视频序列计算的人体姿势图。这使得分析独立于扰动参数,如视点或照明。我们将这些图映射到一个潜在空间并将它们聚类。然后,每个操作都由其对每个聚类的软赋值来表示。这为数据提供了一种“词袋”表示,其中每个动作都由其与一组基本动作词的相似性来表示。然后,我们使用基于狄利克雷过程的混合物,这对于处理比例数据(例如我们的软赋值向量)很有用,以确定一个动作是否正常。
    3 D* ~% `% `( n
    $ X& _1 ?& |: h+ Q首先,我们对输入数据使用人体姿态检测器。这抽象了问题,并防止下一步处理诸如视点或照明变化等有害参数。人的行为被表示为时空图,我们将其嵌入(第3.1、3.2小节)并聚类(第3.3小节)到一些潜在空间中。现在,每个动作都表示为一组基本动作的软分配向量。这抽象了动作的基本类型(即细粒度或粗粒度),从而进入学习其分布的最后阶段。我们用于学习软分配向量分布的工具是Dirichlet过程混合(第3.4小节),我们将模型拟合到数据中。然后使用该模型确定动作是否正常。' x+ K& N: ^- \, L6 e& O3 a

    9 {4 z, j: U/ U图的每个节点对应于一个关键点、一个身体关节,每个边表示两个节点之间的某种关系。 存在许多"关键点关系",如解剖学上定义的物理关系(例如,左手腕和肘部连接)和由运动定义的动作关系,这些运动往往在特定动作的上下文中高度相关(例如,跑步时左右膝盖倾向于朝相反方向移动)。图的方向来自于这样一个事实,即一些关系是在优化过程中学习的,并且不是对称的。这种表示的一个好处是紧凑,这对于高效的视频分析非常重要。4 V, C7 Q/ g! m8 E5 T
    为了在时间上扩展,将从视频序列中提取的姿势关键点表示为姿势图的时间序列。 时间姿势图是人体关节位置的时间序列。时域邻接可以类似地通过连接连续帧中的关节来定义,允许我们利用姿势图序列的空间和时间维度执行图卷积运算  H, {2 P- b& n7 R) P' c

    : ]& H$ p1 _0 \( ]- R我们提出了一种基于深度时态图自动编码器的结构,用于嵌入时态姿态图。 基于图2所示ST-GCN的基本块设计,我们将基本GCN算子替换为新的空间注意力图卷积,如下所示。6 U9 f8 x/ D9 e5 x2 i

    ! v1 j; F# s; p6 [/ [3.2. Spatial Attention Graph Convolution1 D' v7 c8 V3 `2 y6 E5 {
    我们提出了一个新的图算子,如图3所示,它使用三种类型的邻接矩阵:静态、全局学习和推断(基于注意力)。每个邻接类型使用单独的权重应用其自己的GCN。
    8 x3 m3 X  ]; m4 d* x& ^6 a. ]& ^9 z8 B5 J
    GCN的输出按通道维度堆叠。采用1×1卷积作为加权叠加输出的可学习缩减度量,并提供所需的输出信道数。
    # b; _6 g5 U& ]8 P, Y4 t  |6 _, x+ w8 e7 P9 l
    三个邻接矩阵捕捉了模型的不同方面:( V# V& s. N& P" y* ]
    (i)使用身体部位连通性作为优先于节点关系,使用静态邻接矩阵表示。; c9 w( q$ D* l0 t" P. M. ^( j
    (ii)由全局邻接矩阵捕获的数据集级关键点关系,以及
      b; s$ l/ ~. ]2 H(iii)由推断邻接矩阵获取的样本特定关系。最后,可学习约简度量对不同的输出进行加权0 t" A# H4 Q# _/ \7 Y( v  Y1 M
    / x4 W) ^1 P& T4 I: `
    . D$ V0 \. f  g( [( X) e
    后续段落介绍了静态、全局学习和推断的邻接矩阵的设置方法,即图3中的A,B和C,在此略过。
    - J5 h$ R- H3 L3.3. Deep Embedded Clustering
    8 P: {& }5 T+ O0 ], g为了构建我们的底层动作词典,我们采用训练集样本,并将它们联合嵌入和聚类到一些潜在空间中。然后,每个样本由其分配给每个底层聚类的概率表示。选择目标是为了提供不同的潜在集群,这些集群上存在动作。6 Q- l  B: z/ p+ x
    3 v* X4 y, \9 s8 x5 W" |& e7 c( n
    我们采用了深嵌入聚类的概念[32],用我们的ST-GCAE架构对时间图进行聚类。所提出的聚类模型由编码器、解码器和软聚类层三部分组成。8 j7 g+ }7 v( R" E. |
    1 S0 Q; A( K- }
    具体地说,我们的ST-GCAE模型保持了图的结构,但使用了较大的时间步长和不断增加的通道数来将输入序列压缩为潜在向量。解码器使用时间上采样层和额外的图卷积块,用于逐渐恢复原始信道计数和时间维度。
    , t8 {$ H2 w5 p8 _# U* c6 F, {; l% M" F+ V; U8 P2 E& t
    ST-GCAE的嵌入是数据聚类的起点。在我们的聚类优化阶段,对基于重构的初始嵌入进行微调,以达到最终的聚类优化嵌入。
      ^$ j! L3 S+ C" O2 ^5 ^) s1 \4 t& M. b* n8 \! l
    符号        表示( j3 v1 n' K0 V8 N% P/ x% o
    x i x_ix
    ' j' l1 _! J0 G: L  \2 `$ oi$ C+ E0 P& T! b: v3 J
    7 T! T& u$ a. h2 j3 v9 T) Y: h
            输入示例$ f0 V1 q# L4 K" x: ~5 v3 y' C* [
    z i z_iz
    5 p* c* Q0 o9 r" ^5 @! Mi# U% _$ }, E9 L  w
      V" a  L) {3 D6 ]
            编码器的潜在嵌入& l: r) T  Z" r$ d
    y i y_iy
    8 V% B/ p" |9 zi/ V$ {% q5 K/ H" J

    / V- c8 k! D! t7 s  a9 m  Z         使用聚类层计算的软聚类分配; N# _) [3 K3 x3 T- z$ L) K2 u# Y4 [
    Θ ΘΘ        聚类层的参数
    4 {0 ^! Z; `2 f9 a2 Zp i k p_{ik}p ; a* Z- B; ^% S, A0 j$ ]' n
    ik
    9 B+ S, n7 o$ `- X6 q* _  Q  d5 L7 D# r; b3 g/ Q6 s
            probability for the i-th sample to be assigned to the k-th cluster& E9 {# U4 Q1 B' v4 @' r

    9 y& d' c3 p, j0 b" l, j1 n4 J
    6 N2 X9 N8 q4 q/ E0 o我们采用[32]提出的聚类目标和优化算法。聚类目标是最小化当前模型概率聚类预测P和目标分布Q之间的KL散度:
    ! Z8 t! b( R2 L' Y, W0 v5 R! T/ i! }1 d8 g4 q8 b5 g
    1 j, ?- K- K  n& @0 \, R7 W% F, U
    目标分布旨在通过标准化和将每个值推到更接近0或1的值来加强当前的群集分配。反复应用将P转换为Q的函数将最终导致硬分配向量。使用以下等式计算目标分布的每个成员:9 i* A& T* _! P+ d. q6 U

    6 E) G& c2 ~+ n7 u1 @3 w% g! w' b$ M4 P% u# o, b5 {
    聚类层由为编码训练集计算的K均值质心初始化。优化以期望最大化(EM)的方式进行。
    / z4 n% ?6 S: ?8 V& U/ c3 E在期望步骤期间,整个模型是固定的,并且目标分布Q被更新。在最大化阶段,优化模型以最小化聚类损失Lcluster。4 q- i% h% I8 F; Z7 y6 z# Q+ ?4 @
    , u, h; w# Y, ]0 ~7 q' P% ]
    3.4. Normality Scoring; `6 V# P% a, |3 W, M* T, x: ^* O
    该模型支持两种类型的多模分布。一个是集群分配级别;另一个是在软分配向量级别。例如,一个动作可能被分配给多个集群(集群级分配),导致多模式软分配向量。( n2 r! A3 ?$ {, X0 S5 C
    软分配向量本身(捕获动作)也可以通过多模态分布建模。+ T4 d6 j8 L; M0 G
    $ }7 O- I7 K+ |5 \
    Dirichlet过程混合模型(DPMM)是评估比例数据分布的一种有效方法。它满足我们所需的设置:(i)估计(拟合)阶段,在此阶段,一组分布参数为评估,和(ii)推理阶段,为每个嵌入样本使用拟合模型。彻底的Blei和Jordan[4]给出了该模型的概述。* G0 c1 Q) l3 s5 m1 H: Z! v

    8 L0 I3 n" ~* C  g) t. rDirichlet过程混合模型(DPMM)是评估比例数据分布的有效方法。它符合我们要求的设置:6 P0 u" \0 F3 m4 g
    (i) 估计(拟合)阶段,在此期间评估一组分布参数,以及, ^6 T+ c- J* R9 p9 q' E
    (ii)推理阶段,使用拟合模型为每个嵌入样本提供分数。Blei和Jordan[4]对模型进行了全面概述。$ c( W5 e+ ]/ u4 X7 [# T& p& `

    ' Q, A+ v& B) Y, R5 n  `- l9 R. U9 p+ p0 aDPMM是单峰Dirichlet分布的常见混合扩展,并使用Dirichllet过程,这DirichletDistribution的无限维扩展。该模型是多模态的,能够将每个模式捕获为混合成分。拟合模型具有多个模式,每个模式表示对应于一个正常行为的一组比例。在测试时,使用拟合模型通过其对数概率对每个样本进行评分。[4,8]中提供了关于DPMM使用的进一步解释和讨论。
    ; P4 P; \+ J2 O& J4 P, m! n! v7 u: k. |) F
    3.5. Training
      P  E+ k9 P1 G" r( M, a该模型的训练阶段包括两个阶段,一个是自动编码器的预训练阶段,其中网络的聚类分支保持不变,另一个是微调阶段,其中嵌入和聚类都得到优化。具体而言:5 s; L4 f; y" C; b4 X; ~% K# p& ?
    0 x' Q% m7 }5 I* a  _5 k$ r! L
    Pre-Training: 该模型通过最小化重建损失(表示为Lrec)来学习编码和重建序列,Lrec是原始瞬时位姿图和ST-GCAE重建的位姿图之间的L2损失+ P# T& _/ v  y) M- l7 G# _

    ! E1 u: O( Y9 v$ H: u$ @Fine-Tuning:" {8 }6 ^) y3 A8 Q* ~
    该模型优化了由重建损失和聚类损失组成的组合损失函数。
    * W  u$ V8 U2 }. @4 ~进行优化,使得聚类层优化为w.r.t.Lcluster,解码器优化为w.r.t.Lrec,编码器优化为w.r.t.两者。
    ) W) T1 B0 s2 b! S2 P集群层的初始化是通过Kmeans完成的。如[9]所示,当编码器针对这两种损失进行优化时,解码器保持不变,并充当正则化器,以保持编码器的嵌入质量。
    , R  F" s( s; b8 @9 U本阶段的综合损失为:
    7 U3 x# C* m  W# A* K9 y
    ! `/ r1 e0 B$ \: G0 K) [. P3 H. s
    ! a) [3 ]8 S; [; m+ p% K
    1 V' D/ t  L) n# v' P& R0 V" L实现细节
    ! {* |: z  E$ |5 T: z9 v2 \/ p3 H& {" |2 q

    5 E, n+ }, W! ~+ _4 {7 H: h$ ?3 j$ _9 o6 ]0 _2 C" Z
    def calc_reg_loss(model, reg_type='l2', avg=True):
    ! k" u6 s+ N! Q/ S" M    reg_loss = None
    6 I1 S& L+ t4 T' \    parameters = list(param for name, param in model.named_parameters() if 'bias' not in name)( b; I( J* P# d# p  S, e
        num_params = len(parameters)
    4 _% l3 ^, w+ C( v) r' D    if reg_type.lower() == 'l2':
    4 y- M' J7 L* e# i% J* ~# v        for param in parameters:
    3 `+ `% h2 E$ G1 ]8 Y6 y- p            if reg_loss is None:4 g. O& F; I% N1 A) D
                    reg_loss = 0.5 * torch.sum(param ** 2)
    9 T/ T9 n0 P( W* U            else:  v" d( f% I: ^+ j
                    reg_loss = reg_loss + 0.5 * param.norm(2) ** 2
    + f: L$ L. J' i2 T; G& ]  k# L9 w4 D0 s( {( P2 h" J
            if avg:
    " ]6 _- ], h' H7 i, ]9 I' B' }6 R            reg_loss /= num_params
    / i( l5 F) B# `* c        return reg_loss) m$ r* d( Z) X# O& ^
        else:/ k6 r1 a5 q# U* j: D1 F
            return torch.tensor(0.0, device=model.device)- f5 [7 _3 h  q0 G+ x  |
    1+ V2 B! |2 g* V% o6 s
    2
    $ ~5 H5 a1 A( Z; ~, f39 Z' o3 L$ q1 J$ H5 F+ J' e
    4
    / @  d5 b" v- ~" u- X; r5
    5 u3 a* X3 o* [" @, \- i" C6
    ) r8 i" f5 {/ h4 I' o; r0 m. C. o7% x1 {5 J7 z5 m1 a% Y. C" e: E- [& A
    8
    ; M1 y$ S+ d2 E9 l9; A- A5 q, a% O/ [; R% w, L
    108 _% n) F0 G6 E& a
    11
    ' Q6 _% _# B  I12
    ' W2 ~( v  M3 A4 Z* N3 ~13
    " H8 d" ?- D) v2 D( y14, X: W* [3 D" b6 [+ h. o2 c. b
    15
    & P' q0 C  B0 L16
    * q. u0 s8 m8 e0 D1 H0 j8 f/ L9 q# w# D$ z( k; s* ]" ?

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

    qq
    收缩
    • 电话咨询

    • 04714969085
    fastpost

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

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

    蒙公网安备 15010502000194号

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

    GMT+8, 2026-8-5 08:53 , Processed in 0.448472 second(s), 51 queries .

    回顶部