QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 3131|回复: 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
    # o5 e: c- _- y3 O8 y: w! a: V! I5 r! l" G) q. t3 k
    骨架图算法) ]2 S8 q7 a3 n' i4 \2 ^

    ) d# B7 ?  M% e' z, ^
    $ {/ d! R7 u# u; t# I7 UGraph Embedded Pose Clustering for Anomaly Detection" r4 s1 `; `: i) }% ^/ r( L' `( z
    paper        code6 A1 \* @4 H0 }3 F0 a' [
    https://arxiv.org/abs/1912.11850        https://github.com/amirmk89/gepc& X, F4 `. S" ]' i5 Z
    我们提出了一种用于人类行为异常检测的新方法。我们的方法直接适用于可以从输入视频序列计算的人体姿势图。这使得分析独立于扰动参数,如视点或照明。我们将这些图映射到一个潜在空间并将它们聚类。然后,每个操作都由其对每个聚类的软赋值来表示。这为数据提供了一种“词袋”表示,其中每个动作都由其与一组基本动作词的相似性来表示。然后,我们使用基于狄利克雷过程的混合物,这对于处理比例数据(例如我们的软赋值向量)很有用,以确定一个动作是否正常。
    4 P5 u, t: p, t2 s2 u4 `& e! P! J1 p' H" r
    首先,我们对输入数据使用人体姿态检测器。这抽象了问题,并防止下一步处理诸如视点或照明变化等有害参数。人的行为被表示为时空图,我们将其嵌入(第3.1、3.2小节)并聚类(第3.3小节)到一些潜在空间中。现在,每个动作都表示为一组基本动作的软分配向量。这抽象了动作的基本类型(即细粒度或粗粒度),从而进入学习其分布的最后阶段。我们用于学习软分配向量分布的工具是Dirichlet过程混合(第3.4小节),我们将模型拟合到数据中。然后使用该模型确定动作是否正常。& N( F9 G; \6 s6 N- W
    + |0 M9 l1 i% Z
    图的每个节点对应于一个关键点、一个身体关节,每个边表示两个节点之间的某种关系。 存在许多"关键点关系",如解剖学上定义的物理关系(例如,左手腕和肘部连接)和由运动定义的动作关系,这些运动往往在特定动作的上下文中高度相关(例如,跑步时左右膝盖倾向于朝相反方向移动)。图的方向来自于这样一个事实,即一些关系是在优化过程中学习的,并且不是对称的。这种表示的一个好处是紧凑,这对于高效的视频分析非常重要。2 g- y* e+ ~9 ?5 J) n+ N+ A( v9 L
    为了在时间上扩展,将从视频序列中提取的姿势关键点表示为姿势图的时间序列。 时间姿势图是人体关节位置的时间序列。时域邻接可以类似地通过连接连续帧中的关节来定义,允许我们利用姿势图序列的空间和时间维度执行图卷积运算
    9 B. W( M% Y5 X$ t  r/ z, c5 m0 l2 Z, _4 H1 O  C
    我们提出了一种基于深度时态图自动编码器的结构,用于嵌入时态姿态图。 基于图2所示ST-GCN的基本块设计,我们将基本GCN算子替换为新的空间注意力图卷积,如下所示。; H& g% N% W  k) w+ C

    7 u3 Y' q  G2 a% Y2 N( q$ ?. |* z3.2. Spatial Attention Graph Convolution
    - ~$ }8 ?8 J8 F我们提出了一个新的图算子,如图3所示,它使用三种类型的邻接矩阵:静态、全局学习和推断(基于注意力)。每个邻接类型使用单独的权重应用其自己的GCN。8 D+ d" ?* S# j& z7 \! h

    7 F% f! Q) o5 B9 Y2 p- gGCN的输出按通道维度堆叠。采用1×1卷积作为加权叠加输出的可学习缩减度量,并提供所需的输出信道数。9 y; F" {& O' R2 ]* B* M! f- Z, Q( U

    - g. s0 E' G1 Q  R5 R三个邻接矩阵捕捉了模型的不同方面:# y* u3 q$ N3 Y" ?  R) d
    (i)使用身体部位连通性作为优先于节点关系,使用静态邻接矩阵表示。8 B2 Y9 ~  O) e( H' z. E( n% R
    (ii)由全局邻接矩阵捕获的数据集级关键点关系,以及9 m$ c$ K+ D+ {' h0 X& A
    (iii)由推断邻接矩阵获取的样本特定关系。最后,可学习约简度量对不同的输出进行加权  \7 m! F9 A; [% d/ ~6 q

    , F+ q/ r, ?! Q0 V# Q, O% a$ |* _0 U1 e! i
    后续段落介绍了静态、全局学习和推断的邻接矩阵的设置方法,即图3中的A,B和C,在此略过。, I1 B. E) y( y/ [9 M! u
    3.3. Deep Embedded Clustering1 y# @# _2 p' K4 o8 k
    为了构建我们的底层动作词典,我们采用训练集样本,并将它们联合嵌入和聚类到一些潜在空间中。然后,每个样本由其分配给每个底层聚类的概率表示。选择目标是为了提供不同的潜在集群,这些集群上存在动作。
    9 D  ^9 P4 E1 h
    ! J* [8 s8 l2 s1 o% |( d7 v7 ~我们采用了深嵌入聚类的概念[32],用我们的ST-GCAE架构对时间图进行聚类。所提出的聚类模型由编码器、解码器和软聚类层三部分组成。
    5 z; r$ r# F! _4 z* s. k/ [0 f$ L; R1 K/ r% F6 S. H3 K. Q3 i
    具体地说,我们的ST-GCAE模型保持了图的结构,但使用了较大的时间步长和不断增加的通道数来将输入序列压缩为潜在向量。解码器使用时间上采样层和额外的图卷积块,用于逐渐恢复原始信道计数和时间维度。
    % o) {3 A' s" g4 o3 V# U. K
    % |! j* P8 s" g. hST-GCAE的嵌入是数据聚类的起点。在我们的聚类优化阶段,对基于重构的初始嵌入进行微调,以达到最终的聚类优化嵌入。. p  J1 v; s% i5 u1 {. L6 g

    1 V# o' V4 T6 k4 X3 j2 G* a' l符号        表示: W! o& D( [2 ?1 I  e
    x i x_ix
    ) Y/ _9 S4 o$ X/ \! A& Mi+ f) ?1 i; I8 e0 e: h
    1 q; F+ h0 h: O- t8 Z3 Q; ?) J  ~
            输入示例. L' n, O  l! w7 ^8 h( `: t! |
    z i z_iz 6 ?' U4 r; x1 K# B6 _2 `
    i! s/ V" T  A8 r& o3 O/ m
    5 f, p1 A; a' `7 a' }& z2 u# h
            编码器的潜在嵌入
    # |. Q6 G+ `" s5 ~5 A1 z* c$ gy i y_iy . n2 P! e: C1 t+ ]4 s
    i  b: X# m6 U- a' s; G& g
    + t" C8 M  `' j
            使用聚类层计算的软聚类分配
    3 Y$ y' D0 }4 y2 bΘ ΘΘ        聚类层的参数) z! P/ F" [5 i- M4 |6 P0 K
    p i k p_{ik}p ; A  n$ r5 r0 P( O0 \
    ik$ v/ [0 d! A* A0 n  {8 B% W
    $ H" l) d8 W7 H9 ?" x/ J" f! y
            probability for the i-th sample to be assigned to the k-th cluster2 j( Z* T2 x6 N" P8 C! T" Q

    ! u& s5 J* K6 k& s/ D0 a7 `8 W) \4 B
    $ q0 G9 T5 `4 p# o我们采用[32]提出的聚类目标和优化算法。聚类目标是最小化当前模型概率聚类预测P和目标分布Q之间的KL散度:5 B  Q6 M. Q3 w7 s4 b

    + }: O- v7 p1 H3 ^% G: O% ]9 D0 j4 L: t& S
    目标分布旨在通过标准化和将每个值推到更接近0或1的值来加强当前的群集分配。反复应用将P转换为Q的函数将最终导致硬分配向量。使用以下等式计算目标分布的每个成员:
    ) [; f7 f  z9 x; {; [$ X; h
    9 i3 c2 \1 y  ]% S* o# N( _$ k) q
    聚类层由为编码训练集计算的K均值质心初始化。优化以期望最大化(EM)的方式进行。
    8 Z$ S$ P0 T  @  \7 B在期望步骤期间,整个模型是固定的,并且目标分布Q被更新。在最大化阶段,优化模型以最小化聚类损失Lcluster。
    ) Q8 O& P. t; o6 }# R* \8 C, k  c. @2 O/ w( e5 N
    3.4. Normality Scoring  _/ T* U9 S% H+ n) F! x9 ~  C
    该模型支持两种类型的多模分布。一个是集群分配级别;另一个是在软分配向量级别。例如,一个动作可能被分配给多个集群(集群级分配),导致多模式软分配向量。7 [/ K8 k' l) j
    软分配向量本身(捕获动作)也可以通过多模态分布建模。
    & @* H$ K7 e0 u' h6 T9 Z6 a1 V! d& S! j% F% ?' C
    Dirichlet过程混合模型(DPMM)是评估比例数据分布的一种有效方法。它满足我们所需的设置:(i)估计(拟合)阶段,在此阶段,一组分布参数为评估,和(ii)推理阶段,为每个嵌入样本使用拟合模型。彻底的Blei和Jordan[4]给出了该模型的概述。
    0 `4 S) R- T7 Q2 e1 k9 h
    ! o1 o5 O7 j9 H! G' kDirichlet过程混合模型(DPMM)是评估比例数据分布的有效方法。它符合我们要求的设置:4 x  u4 C8 Q: e* G, S
    (i) 估计(拟合)阶段,在此期间评估一组分布参数,以及' v* k; k8 F4 t/ l' z9 J, g
    (ii)推理阶段,使用拟合模型为每个嵌入样本提供分数。Blei和Jordan[4]对模型进行了全面概述。
    + U5 D1 h* x% ]7 h3 V# y# H/ v6 B! \/ W
    DPMM是单峰Dirichlet分布的常见混合扩展,并使用Dirichllet过程,这DirichletDistribution的无限维扩展。该模型是多模态的,能够将每个模式捕获为混合成分。拟合模型具有多个模式,每个模式表示对应于一个正常行为的一组比例。在测试时,使用拟合模型通过其对数概率对每个样本进行评分。[4,8]中提供了关于DPMM使用的进一步解释和讨论。
    ! K$ }3 ]3 ^6 |9 @) w- s6 R1 I8 G+ \  u/ h
    3.5. Training, q6 a" V! A5 |
    该模型的训练阶段包括两个阶段,一个是自动编码器的预训练阶段,其中网络的聚类分支保持不变,另一个是微调阶段,其中嵌入和聚类都得到优化。具体而言:7 J; J1 N4 P; y+ o( _

    - a6 m7 _2 o# t9 oPre-Training: 该模型通过最小化重建损失(表示为Lrec)来学习编码和重建序列,Lrec是原始瞬时位姿图和ST-GCAE重建的位姿图之间的L2损失
    0 i% @+ G  H: d" l4 @, _$ Z* W, |  \+ H9 `* D) c$ y+ K
    Fine-Tuning:
    ; W) \* _. s* ?2 B0 y5 t( `% M) H该模型优化了由重建损失和聚类损失组成的组合损失函数。% K4 D3 m7 e; z9 H5 H1 m/ n5 V3 o
    进行优化,使得聚类层优化为w.r.t.Lcluster,解码器优化为w.r.t.Lrec,编码器优化为w.r.t.两者。
    - m2 {* Z# M4 q, }集群层的初始化是通过Kmeans完成的。如[9]所示,当编码器针对这两种损失进行优化时,解码器保持不变,并充当正则化器,以保持编码器的嵌入质量。8 {! @9 B: z) P9 }$ z2 J
    本阶段的综合损失为:) T6 O( ]. p4 [+ A: K

    : u" U' `% h' m2 e# c0 A0 k! j$ \4 w- m$ a$ c% ^! P
    % ]0 K+ L/ z/ E, g1 A5 n
    实现细节  w0 ]/ c/ e1 }) g! Y8 l- U& P) a  I
    9 m# l" g. h8 w  y+ W- W& X6 w
    : B# t, C* A2 l2 c) r. N
    8 s( k8 `7 q+ a1 j. K6 N+ l7 W6 }
    def calc_reg_loss(model, reg_type='l2', avg=True):+ L+ Q* _' j  p5 N& x9 Z8 ]. U
        reg_loss = None
    ' b. B& q1 z% s, u1 P) q    parameters = list(param for name, param in model.named_parameters() if 'bias' not in name)9 J. O" o; r% U$ |# G
        num_params = len(parameters). g7 A5 u- N, ~% T& n3 S5 M
        if reg_type.lower() == 'l2':
    , n6 p  Q9 j. E( n+ C- y" r3 Q        for param in parameters:
    ! O- p) i$ [3 [; P            if reg_loss is None:- W9 W8 c3 \  r  J3 Y) T
                    reg_loss = 0.5 * torch.sum(param ** 2)
    & Y3 X9 r7 S5 S) `! p            else:
    # `! m/ S* t9 K, ?, z4 P3 j                reg_loss = reg_loss + 0.5 * param.norm(2) ** 2' f9 m$ g$ G7 ?8 X5 r% B9 W" T
    3 {8 A) g5 h+ w0 Z
            if avg:
      r. l# a  F& ?5 y$ c" ^            reg_loss /= num_params, u5 G; ?9 C" X5 u' g. z, q
            return reg_loss% z8 s4 D7 D6 W3 N; M. D
        else:
    ( Z1 Y4 k' b' _$ p. O        return torch.tensor(0.0, device=model.device)
    8 P$ w/ X" x/ w  ^4 V1  _- q5 Z6 v2 h: `' E& v
    23 e- o" Z* p+ o3 w4 a' m( y
    3; U; C# p$ r1 w" N" B* e% q
    4* o1 N' C: Z. v" T+ c9 @" j
    5
    0 R, j; v9 i' g9 n) S$ h) y6
    7 }2 R+ A$ [. m: T1 I, m6 E6 L. l7
    " B) M! J$ k; H9 `" ?8
    # U7 F- v! C8 |( A  F9& O0 a5 F9 P( z# H# [. Y0 p
    103 U- l6 F: g, O) G% u
    11) E( W" t, G0 e% g# S+ T
    12
    ) S7 ^9 V& z' [13
    ; H- T. T( f! \6 F2 K$ B# ~14$ k( T# O0 m2 s
    15* ]: r5 ?* U2 L! T2 J: Z: _, o4 h5 o6 v
    166 }# k' [2 T! y# g: @3 \
    , G6 \7 t' d9 S8 O* p

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

    ; F1 S) t6 u% [5 O* B2 D2 E* I$ c" o1 K/ r3 b
    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-9-13 13:11 , Processed in 0.486071 second(s), 51 queries .

    回顶部