QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 3173|回复: 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+ l% V1 J' Q' @) j  }2 N
    . }( W% J) L! W4 g) T
    骨架图算法. v5 B( I0 S$ B: _0 X
    7 a5 o9 v5 h% R/ M. S

    2 t( I$ V6 [/ [. \# mGraph Embedded Pose Clustering for Anomaly Detection& l% B: M8 z7 s; Y  o6 Y
    paper        code3 G& U+ A* m& t5 o
    https://arxiv.org/abs/1912.11850        https://github.com/amirmk89/gepc
    6 ?1 M( h' {( M8 T1 ]我们提出了一种用于人类行为异常检测的新方法。我们的方法直接适用于可以从输入视频序列计算的人体姿势图。这使得分析独立于扰动参数,如视点或照明。我们将这些图映射到一个潜在空间并将它们聚类。然后,每个操作都由其对每个聚类的软赋值来表示。这为数据提供了一种“词袋”表示,其中每个动作都由其与一组基本动作词的相似性来表示。然后,我们使用基于狄利克雷过程的混合物,这对于处理比例数据(例如我们的软赋值向量)很有用,以确定一个动作是否正常。
    6 @; L5 t( S3 |# U3 c8 @6 S- v2 ^* ~5 T
    首先,我们对输入数据使用人体姿态检测器。这抽象了问题,并防止下一步处理诸如视点或照明变化等有害参数。人的行为被表示为时空图,我们将其嵌入(第3.1、3.2小节)并聚类(第3.3小节)到一些潜在空间中。现在,每个动作都表示为一组基本动作的软分配向量。这抽象了动作的基本类型(即细粒度或粗粒度),从而进入学习其分布的最后阶段。我们用于学习软分配向量分布的工具是Dirichlet过程混合(第3.4小节),我们将模型拟合到数据中。然后使用该模型确定动作是否正常。1 o8 q+ F/ n0 K, A/ U  T% e

    - s1 g7 q( f" |3 K  c/ r/ S2 T( W图的每个节点对应于一个关键点、一个身体关节,每个边表示两个节点之间的某种关系。 存在许多"关键点关系",如解剖学上定义的物理关系(例如,左手腕和肘部连接)和由运动定义的动作关系,这些运动往往在特定动作的上下文中高度相关(例如,跑步时左右膝盖倾向于朝相反方向移动)。图的方向来自于这样一个事实,即一些关系是在优化过程中学习的,并且不是对称的。这种表示的一个好处是紧凑,这对于高效的视频分析非常重要。
    ! A1 @, i9 I  I0 Z为了在时间上扩展,将从视频序列中提取的姿势关键点表示为姿势图的时间序列。 时间姿势图是人体关节位置的时间序列。时域邻接可以类似地通过连接连续帧中的关节来定义,允许我们利用姿势图序列的空间和时间维度执行图卷积运算! S; e  e- `) @4 Q+ J& G  G5 F

    9 g0 r1 t* V$ N0 F9 u6 ]( l我们提出了一种基于深度时态图自动编码器的结构,用于嵌入时态姿态图。 基于图2所示ST-GCN的基本块设计,我们将基本GCN算子替换为新的空间注意力图卷积,如下所示。& f; P5 m* A" o/ n$ L8 l

    ) p3 B% G7 p9 |  }3 O7 _5 T# ~# _3.2. Spatial Attention Graph Convolution6 }  s  q+ ~* h1 U! ?% q6 a# m
    我们提出了一个新的图算子,如图3所示,它使用三种类型的邻接矩阵:静态、全局学习和推断(基于注意力)。每个邻接类型使用单独的权重应用其自己的GCN。
      S1 l% m. i6 N1 B4 B, k4 \& O9 T* J7 d1 s, \
    GCN的输出按通道维度堆叠。采用1×1卷积作为加权叠加输出的可学习缩减度量,并提供所需的输出信道数。
    5 L, B7 ~) w$ D( E: V! J( @- Y2 D, I, c' d
    三个邻接矩阵捕捉了模型的不同方面:
      d4 {  O# T0 h$ x- t(i)使用身体部位连通性作为优先于节点关系,使用静态邻接矩阵表示。
    , l# A/ i: S2 w/ l" ](ii)由全局邻接矩阵捕获的数据集级关键点关系,以及: b* N3 d, S! }
    (iii)由推断邻接矩阵获取的样本特定关系。最后,可学习约简度量对不同的输出进行加权
    % g( t& u# Y6 @! E( {
    + d; y- V+ x+ h" q/ {+ H( h, ?- s# d# _/ B) V- d
    后续段落介绍了静态、全局学习和推断的邻接矩阵的设置方法,即图3中的A,B和C,在此略过。, ]" e4 L# n" V1 V
    3.3. Deep Embedded Clustering8 Q' t6 S/ ]  J& h% g- A
    为了构建我们的底层动作词典,我们采用训练集样本,并将它们联合嵌入和聚类到一些潜在空间中。然后,每个样本由其分配给每个底层聚类的概率表示。选择目标是为了提供不同的潜在集群,这些集群上存在动作。
    ! `6 n0 u4 Y! C' z
    0 L9 t. n* q6 _* M我们采用了深嵌入聚类的概念[32],用我们的ST-GCAE架构对时间图进行聚类。所提出的聚类模型由编码器、解码器和软聚类层三部分组成。# {, m+ ]! w) l) `% L% f
      q' D/ @2 U8 m& M7 U9 b, U" k: w7 H
    具体地说,我们的ST-GCAE模型保持了图的结构,但使用了较大的时间步长和不断增加的通道数来将输入序列压缩为潜在向量。解码器使用时间上采样层和额外的图卷积块,用于逐渐恢复原始信道计数和时间维度。
    ) D+ L/ V* J' l( Y' f0 g% U9 h6 X
    8 o0 o9 `3 C$ m& s1 J7 D" TST-GCAE的嵌入是数据聚类的起点。在我们的聚类优化阶段,对基于重构的初始嵌入进行微调,以达到最终的聚类优化嵌入。$ d3 G; g. @" b. Y7 C

    4 W3 Y2 i9 s* y4 w& b' j% }符号        表示; F4 r$ v. U, E( G- y) {
    x i x_ix
    & G( a, |# b5 Ci% n% L3 a: C5 Z, I0 ~" F1 z) r
    ​
    2 u+ Q- K' ]  }4 F1 D         输入示例8 m, i$ `) `* p' n
    z i z_iz 9 I, p5 ~6 T* v# E+ M
    i
    5 [0 o7 R% K3 R​3 }0 f3 ^  G# U  R0 q
            编码器的潜在嵌入
    8 w" X8 N5 W5 O1 ]1 d2 {6 P, xy i y_iy , t+ }% t8 ^. @% r: u1 L1 o5 A
    i
    - {* m' x0 U6 ?' w​1 P7 K& u- |3 O. ~
            使用聚类层计算的软聚类分配
    3 G2 u1 O2 B7 |* X7 f/ y  [( hΘ ΘΘ        聚类层的参数, I3 b* a5 O% B
    p i k p_{ik}p / N) B* L: J5 r4 {+ l6 Y7 A
    ik
    . ?: J3 m: J0 f1 Q4 |9 ?​
    ' R) \- e6 F6 s" B( q2 Y# R7 M* z         probability for the i-th sample to be assigned to the k-th cluster; r: u* j+ L+ K& u
    : A4 G! ]- c5 X# r4 S0 X& M
    6 Q' ~& O$ Z0 o/ m; d( s# D
    我们采用[32]提出的聚类目标和优化算法。聚类目标是最小化当前模型概率聚类预测P和目标分布Q之间的KL散度:" C$ M5 M: y$ R* K0 d* U! l7 O
    % q3 F' L. ]/ B( `+ B& k7 W1 y3 v# x
    & A; x. ^( j! n. E% t' }; P* R. g- B1 i
    目标分布旨在通过标准化和将每个值推到更接近0或1的值来加强当前的群集分配。反复应用将P转换为Q的函数将最终导致硬分配向量。使用以下等式计算目标分布的每个成员:4 g+ V- v2 X3 |& Y& b8 E

    1 t; Q- d; s0 }
    & ]' e( @8 B$ @- \' ]聚类层由为编码训练集计算的K均值质心初始化。优化以期望最大化(EM)的方式进行。
    $ `8 [0 K* p/ O9 @+ l6 ?  o在期望步骤期间,整个模型是固定的,并且目标分布Q被更新。在最大化阶段,优化模型以最小化聚类损失Lcluster。
    3 I! ]' G6 J& Q0 X! ?- C# z$ n4 _: c. R2 ~4 p" [
    3.4. Normality Scoring
    ' \2 g3 F7 L& g; r该模型支持两种类型的多模分布。一个是集群分配级别;另一个是在软分配向量级别。例如,一个动作可能被分配给多个集群(集群级分配),导致多模式软分配向量。) t) T# \! l; S, d+ z- P
    软分配向量本身(捕获动作)也可以通过多模态分布建模。
    6 [9 t9 h. _. L# ~
    9 ~5 O. Q+ {+ A' q, w; [& tDirichlet过程混合模型(DPMM)是评估比例数据分布的一种有效方法。它满足我们所需的设置:(i)估计(拟合)阶段,在此阶段,一组分布参数为评估,和(ii)推理阶段,为每个嵌入样本使用拟合模型。彻底的Blei和Jordan[4]给出了该模型的概述。- w$ }2 O. h1 k% A8 Q; @
    ) x- d' x3 v7 r
    Dirichlet过程混合模型(DPMM)是评估比例数据分布的有效方法。它符合我们要求的设置:' r3 B" Y- c# L, Z" M9 Y
    (i) 估计(拟合)阶段,在此期间评估一组分布参数,以及4 t: v. o; ]; Q6 o
    (ii)推理阶段,使用拟合模型为每个嵌入样本提供分数。Blei和Jordan[4]对模型进行了全面概述。
    , W7 v& z5 B9 h* s7 J9 o# \
    ) {+ Z: S  Q; `/ m: SDPMM是单峰Dirichlet分布的常见混合扩展,并使用Dirichllet过程,这DirichletDistribution的无限维扩展。该模型是多模态的,能够将每个模式捕获为混合成分。拟合模型具有多个模式,每个模式表示对应于一个正常行为的一组比例。在测试时,使用拟合模型通过其对数概率对每个样本进行评分。[4,8]中提供了关于DPMM使用的进一步解释和讨论。  U7 F2 [+ V1 c6 W3 Q

    7 l( w8 g( H. _* x* K* D0 U% ]7 Y3.5. Training' S7 g' o$ n! E0 t3 `5 K) Z
    该模型的训练阶段包括两个阶段,一个是自动编码器的预训练阶段,其中网络的聚类分支保持不变,另一个是微调阶段,其中嵌入和聚类都得到优化。具体而言:* A) Z5 V  S  {  e

      {* @- s, A0 dPre-Training: 该模型通过最小化重建损失(表示为Lrec)来学习编码和重建序列,Lrec是原始瞬时位姿图和ST-GCAE重建的位姿图之间的L2损失
    . Y/ m6 C/ u! a0 b4 q3 p# v0 P' y% y" y0 C5 ]; ~$ p% I! k# r4 o! u
    Fine-Tuning:
    3 a1 I. f; n4 y0 d) |$ @该模型优化了由重建损失和聚类损失组成的组合损失函数。
    % a5 z& [9 Z! L4 O2 u" S  k进行优化,使得聚类层优化为w.r.t.Lcluster,解码器优化为w.r.t.Lrec,编码器优化为w.r.t.两者。1 J; {  u1 P: c* g7 B9 h
    集群层的初始化是通过Kmeans完成的。如[9]所示,当编码器针对这两种损失进行优化时,解码器保持不变,并充当正则化器,以保持编码器的嵌入质量。
    4 ]7 \' w3 |/ n$ k  F4 X: L$ g( n本阶段的综合损失为:+ n9 z. Z1 A/ N% Z7 E" x# C
    3 r4 i( n+ b+ A- O) r2 @
    * V- c1 {: E; Q# g3 c% l
    6 g8 n3 k6 K" U  v" n
    实现细节# |: W& p) _1 X' F6 N

    6 f0 u% J+ m" ^* b, ^" {! r
    * p) Q7 {) H& l( I* }# y  O. V# b0 {, b) u
    def calc_reg_loss(model, reg_type='l2', avg=True):% @8 d2 a7 d8 q" n5 e! e8 a- E
        reg_loss = None
    # w  y4 V4 J, s. i    parameters = list(param for name, param in model.named_parameters() if 'bias' not in name)
    ; X8 D8 a: Z! x+ |! k) @    num_params = len(parameters)2 g! @0 _1 U. w' E2 L5 N
        if reg_type.lower() == 'l2':* `" i, L$ I3 |! W4 P* T/ b9 \3 P
            for param in parameters:  A2 D) B* ?! y; V
                if reg_loss is None:
    " a, D- c8 `. }: u" ~3 G' H' A                reg_loss = 0.5 * torch.sum(param ** 2)
    . w) j; U1 ]# J& H1 X            else:! ?5 }$ y4 U9 j0 Q, ^! M
                    reg_loss = reg_loss + 0.5 * param.norm(2) ** 26 S; i! c6 I$ o: `7 N8 ]

    ( P$ c% {/ M" H$ e- q        if avg:
    " a- P2 t: ]4 Y            reg_loss /= num_params2 s6 X, E$ f; |& \0 |
            return reg_loss
    # V" E$ q# g, d; l; y3 ]) U) ]    else:
    9 S( @. l5 c! D( H% O1 V# f, {0 x        return torch.tensor(0.0, device=model.device)
    5 g% V  A5 Q& h4 z' V1! J8 G7 Z/ \5 ?2 c# J. o
    2
    + [8 V7 ]) d+ x6 V  C$ |34 s; `; V/ J* _& Y. a
    4
    + `& r" a0 ^3 D$ r5
    ! n0 h2 I7 X2 U+ g( Z" r65 _: f# O* `( ~! U
    70 C( M& V" S3 ^# ^# J' s
    8
    8 i6 ?8 g, u% F5 t# H: l/ i9% B5 y3 Q' I1 p) H& B0 {) P
    102 ^6 Q+ s0 r+ C3 y4 \7 Q4 p
    11
    % y) c' c2 Y. \6 |* B! f. e' I12
    7 b; b6 y& q3 L& ]: N, z: s+ x: ?13
    * U- W( |! |# n7 j: u14
    8 q1 }% \1 P. e, `15
    # m, k. |7 y8 s5 d5 |. Q9 o) W168 Y3 T, j4 I" s2 L( G
    ! i0 M" I5 Z! n4 v/ J2 ?9 a& a

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

    回顶部