QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 3061|回复: 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( m) P. q2 b# s
    & b$ c) ^2 z$ s- _4 t
    骨架图算法& H! L; u; J! Q. M) W7 K' Q1 b
    % f9 o. G: k/ G( m

    2 e6 t3 \/ F( ^+ [Graph Embedded Pose Clustering for Anomaly Detection7 z) U: _, }0 `" A( i6 j
    paper        code
    + `" Z+ J! s' y1 Y/ z: Q) Q1 ?https://arxiv.org/abs/1912.11850        https://github.com/amirmk89/gepc# E. @- @3 K/ a
    我们提出了一种用于人类行为异常检测的新方法。我们的方法直接适用于可以从输入视频序列计算的人体姿势图。这使得分析独立于扰动参数,如视点或照明。我们将这些图映射到一个潜在空间并将它们聚类。然后,每个操作都由其对每个聚类的软赋值来表示。这为数据提供了一种“词袋”表示,其中每个动作都由其与一组基本动作词的相似性来表示。然后,我们使用基于狄利克雷过程的混合物,这对于处理比例数据(例如我们的软赋值向量)很有用,以确定一个动作是否正常。
    , g8 `" [  D6 B' V" @: e( x9 U8 y+ u: A7 e' T% B7 N
    首先,我们对输入数据使用人体姿态检测器。这抽象了问题,并防止下一步处理诸如视点或照明变化等有害参数。人的行为被表示为时空图,我们将其嵌入(第3.1、3.2小节)并聚类(第3.3小节)到一些潜在空间中。现在,每个动作都表示为一组基本动作的软分配向量。这抽象了动作的基本类型(即细粒度或粗粒度),从而进入学习其分布的最后阶段。我们用于学习软分配向量分布的工具是Dirichlet过程混合(第3.4小节),我们将模型拟合到数据中。然后使用该模型确定动作是否正常。
    ! y& C) u+ Z0 s# ^. M8 r
    ' _" J7 A" Z! e$ f& f+ p2 c图的每个节点对应于一个关键点、一个身体关节,每个边表示两个节点之间的某种关系。 存在许多"关键点关系",如解剖学上定义的物理关系(例如,左手腕和肘部连接)和由运动定义的动作关系,这些运动往往在特定动作的上下文中高度相关(例如,跑步时左右膝盖倾向于朝相反方向移动)。图的方向来自于这样一个事实,即一些关系是在优化过程中学习的,并且不是对称的。这种表示的一个好处是紧凑,这对于高效的视频分析非常重要。" \6 ~8 ^1 Q+ I
    为了在时间上扩展,将从视频序列中提取的姿势关键点表示为姿势图的时间序列。 时间姿势图是人体关节位置的时间序列。时域邻接可以类似地通过连接连续帧中的关节来定义,允许我们利用姿势图序列的空间和时间维度执行图卷积运算6 `, P; E/ \: `' o4 X: J( `

    1 b, ^! _. n7 s& ]$ J我们提出了一种基于深度时态图自动编码器的结构,用于嵌入时态姿态图。 基于图2所示ST-GCN的基本块设计,我们将基本GCN算子替换为新的空间注意力图卷积,如下所示。
    2 f# M! U9 Z) x0 ]5 @; f- w! Y
    4 I* h3 E3 f% y" E3.2. Spatial Attention Graph Convolution# v  p& F) P8 N9 z# M6 l
    我们提出了一个新的图算子,如图3所示,它使用三种类型的邻接矩阵:静态、全局学习和推断(基于注意力)。每个邻接类型使用单独的权重应用其自己的GCN。
    2 n: W& p, b5 A! f' Z
    . l9 \! m1 V& [( _' XGCN的输出按通道维度堆叠。采用1×1卷积作为加权叠加输出的可学习缩减度量,并提供所需的输出信道数。
    9 @" R1 N6 |9 F" K
    # b8 ^7 a6 B5 }1 \/ q三个邻接矩阵捕捉了模型的不同方面:4 O* }1 u  C( K9 h" \0 {7 j
    (i)使用身体部位连通性作为优先于节点关系,使用静态邻接矩阵表示。" d# U1 u0 Y( N! t7 a. f* c
    (ii)由全局邻接矩阵捕获的数据集级关键点关系,以及
    9 }/ \' Z# e0 W(iii)由推断邻接矩阵获取的样本特定关系。最后,可学习约简度量对不同的输出进行加权/ N! |1 S- D# `: Z' {- m3 a1 \

    % {: @$ q& l9 ?1 [/ q* X+ W" K2 Z, H" w2 X$ e/ I
    后续段落介绍了静态、全局学习和推断的邻接矩阵的设置方法,即图3中的A,B和C,在此略过。% E3 R9 U1 l/ j4 I  s
    3.3. Deep Embedded Clustering0 D- h5 A5 P$ F6 {; [
    为了构建我们的底层动作词典,我们采用训练集样本,并将它们联合嵌入和聚类到一些潜在空间中。然后,每个样本由其分配给每个底层聚类的概率表示。选择目标是为了提供不同的潜在集群,这些集群上存在动作。
    * X5 p# L6 h: q0 U9 `+ c7 d1 r0 U# x. a6 v- t: b. }
    我们采用了深嵌入聚类的概念[32],用我们的ST-GCAE架构对时间图进行聚类。所提出的聚类模型由编码器、解码器和软聚类层三部分组成。
    ; T3 L9 x/ p8 S6 I" s+ R% b" g& |/ W* D6 W; E& T; P) ?
    具体地说,我们的ST-GCAE模型保持了图的结构,但使用了较大的时间步长和不断增加的通道数来将输入序列压缩为潜在向量。解码器使用时间上采样层和额外的图卷积块,用于逐渐恢复原始信道计数和时间维度。. {( w% u' f; U1 L; X/ R) D5 d
    ! h! Z& I# Z" `" r' F1 d
    ST-GCAE的嵌入是数据聚类的起点。在我们的聚类优化阶段,对基于重构的初始嵌入进行微调,以达到最终的聚类优化嵌入。
    0 _( r6 h! ~6 A7 g
    & N* }! k$ j& \7 Q符号        表示) ~. b! x; T: T& N& }
    x i x_ix
    & W8 N" {$ v# e6 W2 Bi1 h8 z3 L3 X9 g# W" b6 r, ~
    7 z1 Q+ G$ p4 U  M% m/ A! y' L; n) g' d
            输入示例
    / N* ]* K  R, d  b, q* Qz i z_iz   ~; T7 B9 _- l+ O: p& i- L4 I
    i* y; z% }. ?, p. V- b4 J- `) X
    8 q2 Z1 _% l1 Y& @
            编码器的潜在嵌入2 v6 W, D  z: a
    y i y_iy 8 x& F. T/ g1 E
    i* C9 ~( R& E$ B+ k

    3 Y# S$ e8 |7 M: Z2 V  R' N4 |2 j         使用聚类层计算的软聚类分配7 O2 W0 ]+ b6 ]! q$ O2 i/ R; }
    Θ ΘΘ        聚类层的参数
      T; T" z; q$ f: }- pp i k p_{ik}p 3 i' n2 J$ C/ j/ s. x$ `6 L
    ik! O; V+ k. k# E9 B" y9 W# L
    4 q3 r% q, k$ u
            probability for the i-th sample to be assigned to the k-th cluster/ S) n# F) N; G! L

    % [% c9 [) }) ?3 F9 N( l: M" j5 v1 ]- C4 y* ?2 y
    我们采用[32]提出的聚类目标和优化算法。聚类目标是最小化当前模型概率聚类预测P和目标分布Q之间的KL散度:
    " Z" z" B. \1 F1 {' Q! _" T: h% X6 T( B' q/ N

    ' R4 l! A0 j6 o7 v7 M1 i; p8 W目标分布旨在通过标准化和将每个值推到更接近0或1的值来加强当前的群集分配。反复应用将P转换为Q的函数将最终导致硬分配向量。使用以下等式计算目标分布的每个成员:1 Y7 E" f" D" m  P7 }7 m

    : t4 N$ z! M' F. `( s
    3 b5 e  b. B' _5 F聚类层由为编码训练集计算的K均值质心初始化。优化以期望最大化(EM)的方式进行。+ F. m9 M. D! ^$ y5 ?+ K- V6 u
    在期望步骤期间,整个模型是固定的,并且目标分布Q被更新。在最大化阶段,优化模型以最小化聚类损失Lcluster。
    ' U, |5 q) R7 `) ^& Q
    % S. r0 _3 S2 h1 n9 n3.4. Normality Scoring
    1 f2 H/ d) k7 g- T; V0 t( Y% y  f6 L该模型支持两种类型的多模分布。一个是集群分配级别;另一个是在软分配向量级别。例如,一个动作可能被分配给多个集群(集群级分配),导致多模式软分配向量。( S5 m9 P% ~# A, b% e
    软分配向量本身(捕获动作)也可以通过多模态分布建模。
    7 X: _3 ^  H+ L% K& c
    4 p+ e4 P( `( r+ q! w0 ~Dirichlet过程混合模型(DPMM)是评估比例数据分布的一种有效方法。它满足我们所需的设置:(i)估计(拟合)阶段,在此阶段,一组分布参数为评估,和(ii)推理阶段,为每个嵌入样本使用拟合模型。彻底的Blei和Jordan[4]给出了该模型的概述。. S- Q+ ~2 l* P6 w

    ! a# `  w2 [4 a, h0 O# jDirichlet过程混合模型(DPMM)是评估比例数据分布的有效方法。它符合我们要求的设置:- d6 p+ N* A! I4 ?1 j" J
    (i) 估计(拟合)阶段,在此期间评估一组分布参数,以及
    2 A; I6 Y! J# ~0 ?7 L+ s(ii)推理阶段,使用拟合模型为每个嵌入样本提供分数。Blei和Jordan[4]对模型进行了全面概述。; k" _  N8 Z# m( l0 V
    7 B3 |7 }& z4 D1 p6 N. u* J- B
    DPMM是单峰Dirichlet分布的常见混合扩展,并使用Dirichllet过程,这DirichletDistribution的无限维扩展。该模型是多模态的,能够将每个模式捕获为混合成分。拟合模型具有多个模式,每个模式表示对应于一个正常行为的一组比例。在测试时,使用拟合模型通过其对数概率对每个样本进行评分。[4,8]中提供了关于DPMM使用的进一步解释和讨论。
    ! X& t. a  h/ p% @4 k6 g, {
    4 ]8 {4 M$ M6 H. p$ h) L3.5. Training
    8 W1 k% S* G% j- E0 c6 A1 \该模型的训练阶段包括两个阶段,一个是自动编码器的预训练阶段,其中网络的聚类分支保持不变,另一个是微调阶段,其中嵌入和聚类都得到优化。具体而言:- j; Z7 P7 c* S+ C. S6 S" q
    : \0 _* T7 e& E' C& r0 W
    Pre-Training: 该模型通过最小化重建损失(表示为Lrec)来学习编码和重建序列,Lrec是原始瞬时位姿图和ST-GCAE重建的位姿图之间的L2损失% F6 b2 K5 w/ l
      d% ?/ ]6 K. `: j& ]
    Fine-Tuning:$ ], X' T+ X: @9 C" B
    该模型优化了由重建损失和聚类损失组成的组合损失函数。
    0 D' a3 n- \7 `9 V6 i进行优化,使得聚类层优化为w.r.t.Lcluster,解码器优化为w.r.t.Lrec,编码器优化为w.r.t.两者。: U7 X0 Y& c7 ]. R# r
    集群层的初始化是通过Kmeans完成的。如[9]所示,当编码器针对这两种损失进行优化时,解码器保持不变,并充当正则化器,以保持编码器的嵌入质量。+ Y0 y1 q$ |* u
    本阶段的综合损失为:4 x4 U9 j& w5 G4 ~5 ^
    : S' c$ y" q8 h' b
    # \& Z# p$ G5 G& t# e# F

    - B% x1 {) a# h' ?1 X' }% i实现细节1 e8 H* v3 Q9 l5 M9 b

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

    回顶部