QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 3174|回复: 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/ r- E" V( @- r! d. K6 M: E
    2 s8 \; Z3 w9 a7 o1 e% K7 G
    骨架图算法6 K) M; u3 _& u" r4 X
    / W' M0 W& q, I5 R/ n$ k

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

    ; E, u% E! K$ W$ u. b+ M! u4 N我们提出了一种基于深度时态图自动编码器的结构,用于嵌入时态姿态图。 基于图2所示ST-GCN的基本块设计,我们将基本GCN算子替换为新的空间注意力图卷积,如下所示。7 j, F' V0 U0 P3 [; H3 J$ A" B
    ( n/ b6 a+ o! G. T
    3.2. Spatial Attention Graph Convolution
    , q  L4 q8 L; Z$ q我们提出了一个新的图算子,如图3所示,它使用三种类型的邻接矩阵:静态、全局学习和推断(基于注意力)。每个邻接类型使用单独的权重应用其自己的GCN。
    2 Q4 _2 H; Y. Y0 |9 J6 E' v4 [( G5 |
    GCN的输出按通道维度堆叠。采用1×1卷积作为加权叠加输出的可学习缩减度量,并提供所需的输出信道数。; [  a9 A* o) a$ F, Y- _5 h

    8 I4 _# V1 u1 ^( t* q三个邻接矩阵捕捉了模型的不同方面:7 u) v/ z& n5 Z; Q4 a% v. w  G) u! ~
    (i)使用身体部位连通性作为优先于节点关系,使用静态邻接矩阵表示。% W6 v! M( u8 r. X0 U! I
    (ii)由全局邻接矩阵捕获的数据集级关键点关系,以及
    9 C, |. y( f" T  a0 b(iii)由推断邻接矩阵获取的样本特定关系。最后,可学习约简度量对不同的输出进行加权7 |! p) `0 M5 j. G! i
    ! c7 ?, W7 W2 d0 N9 Y
    # [1 e9 q6 \$ W% O& f' S
    后续段落介绍了静态、全局学习和推断的邻接矩阵的设置方法,即图3中的A,B和C,在此略过。
    . z6 \8 y  H2 y, R# m3 k" W' Z3.3. Deep Embedded Clustering
    & d$ Y  D( ~7 N' p9 q( Y为了构建我们的底层动作词典,我们采用训练集样本,并将它们联合嵌入和聚类到一些潜在空间中。然后,每个样本由其分配给每个底层聚类的概率表示。选择目标是为了提供不同的潜在集群,这些集群上存在动作。& Z& T% t0 v. G" L7 X9 a4 S

    / m/ @% ^4 T4 I0 S% S我们采用了深嵌入聚类的概念[32],用我们的ST-GCAE架构对时间图进行聚类。所提出的聚类模型由编码器、解码器和软聚类层三部分组成。; e: E. i( i, u: G! P

    " h+ w2 s4 y# X! B+ D, f: A具体地说,我们的ST-GCAE模型保持了图的结构,但使用了较大的时间步长和不断增加的通道数来将输入序列压缩为潜在向量。解码器使用时间上采样层和额外的图卷积块,用于逐渐恢复原始信道计数和时间维度。
    , e/ N: O# S) T
    # x3 N/ a$ C9 _0 D! OST-GCAE的嵌入是数据聚类的起点。在我们的聚类优化阶段,对基于重构的初始嵌入进行微调,以达到最终的聚类优化嵌入。
    7 a. Z9 a* l, {* ^
    1 `4 a! W! m( Z( d5 g) Y% ]' |符号        表示
    & h' T' p" P, Y" e6 K  x  yx i x_ix
    0 R, [' _: ~& j1 ^  Ki
    5 l5 D2 ?' Q( b) Z; F- C. U. ^% R​! g' p0 g% V- z4 V+ u
            输入示例1 \8 @4 r7 p/ B" `9 }! T8 t& Y
    z i z_iz : d& F1 _0 I' O! O* i7 r& k
    i
    5 N& m  @4 F# I8 a* E5 ]​: n+ f+ [# U: L0 |& ~8 v1 z
            编码器的潜在嵌入
    + s# d/ O, @' yy i y_iy + b$ f- k6 s, H8 V5 E
    i# x' X$ a: H' Q
    ​
    1 C0 c+ ^! g- o( P/ s6 w         使用聚类层计算的软聚类分配( `8 a+ y7 B+ B2 ]) g, t$ q$ w+ U: b
    Θ ΘΘ        聚类层的参数
    , W3 M* t1 G: R" rp i k p_{ik}p
    2 I  H5 h6 [# c' k# p3 m( Uik, G* h) G9 P0 Z; H( ^9 [
    ​- L' n6 b+ t9 R7 p' T+ ?( j
            probability for the i-th sample to be assigned to the k-th cluster3 L2 Z0 M5 q4 [2 D- B# A
    2 _3 G  S2 Q5 i9 w- P- _
    - v- x: U; T: J& ^: ~
    我们采用[32]提出的聚类目标和优化算法。聚类目标是最小化当前模型概率聚类预测P和目标分布Q之间的KL散度:) A$ |$ B# u4 n! U
    $ ?4 _! S6 c/ `/ W
    * b& [/ y8 G& ~$ X0 j
    目标分布旨在通过标准化和将每个值推到更接近0或1的值来加强当前的群集分配。反复应用将P转换为Q的函数将最终导致硬分配向量。使用以下等式计算目标分布的每个成员:
    6 g/ h: ]' |( u1 R: X9 M5 `0 _
    ) a2 _" ~* k# Y8 S$ H( S1 O+ D( i# c, I2 S, ~  O
    聚类层由为编码训练集计算的K均值质心初始化。优化以期望最大化(EM)的方式进行。
    1 d! @. ?( o2 _& m8 B  s# _) ^在期望步骤期间,整个模型是固定的,并且目标分布Q被更新。在最大化阶段,优化模型以最小化聚类损失Lcluster。
    6 |/ y/ Q3 M) M4 g- ]- ]- ]5 \" K( D3 S: i
    3.4. Normality Scoring% @  u1 Q  I9 J7 `* B6 _4 G" s
    该模型支持两种类型的多模分布。一个是集群分配级别;另一个是在软分配向量级别。例如,一个动作可能被分配给多个集群(集群级分配),导致多模式软分配向量。
    5 @# b; J8 P, F) |软分配向量本身(捕获动作)也可以通过多模态分布建模。
    7 K2 I. B; L  y; ^1 f# T+ I$ g& @( X. E& o& Q0 A
    Dirichlet过程混合模型(DPMM)是评估比例数据分布的一种有效方法。它满足我们所需的设置:(i)估计(拟合)阶段,在此阶段,一组分布参数为评估,和(ii)推理阶段,为每个嵌入样本使用拟合模型。彻底的Blei和Jordan[4]给出了该模型的概述。
    $ ^* R6 h! M! O8 h4 {* Q( S* V: j9 k' @, J& a% e
    Dirichlet过程混合模型(DPMM)是评估比例数据分布的有效方法。它符合我们要求的设置:" |& {* D7 q# u' ]: k2 X3 u! P
    (i) 估计(拟合)阶段,在此期间评估一组分布参数,以及# O8 y: o# g0 K$ p8 ^1 E
    (ii)推理阶段,使用拟合模型为每个嵌入样本提供分数。Blei和Jordan[4]对模型进行了全面概述。* j8 ^# \& t2 z6 R& L) V- M

    ' R2 O' y8 P; \. g( h  qDPMM是单峰Dirichlet分布的常见混合扩展,并使用Dirichllet过程,这DirichletDistribution的无限维扩展。该模型是多模态的,能够将每个模式捕获为混合成分。拟合模型具有多个模式,每个模式表示对应于一个正常行为的一组比例。在测试时,使用拟合模型通过其对数概率对每个样本进行评分。[4,8]中提供了关于DPMM使用的进一步解释和讨论。
    0 _% ?- ^7 Y0 L  i7 @. P% u
    ) z0 _$ R& t" z, s; n3.5. Training
    5 t: D+ H2 K6 \/ M3 I) r2 K该模型的训练阶段包括两个阶段,一个是自动编码器的预训练阶段,其中网络的聚类分支保持不变,另一个是微调阶段,其中嵌入和聚类都得到优化。具体而言:# r2 }: _0 w* A. m& ~8 J# a9 Q

    . ^: t3 h7 Q" E2 ~* m* N7 ]Pre-Training: 该模型通过最小化重建损失(表示为Lrec)来学习编码和重建序列,Lrec是原始瞬时位姿图和ST-GCAE重建的位姿图之间的L2损失$ n: Q& k3 w0 g8 T! {' V9 w

    4 S6 }* {1 [6 v1 |: _- LFine-Tuning:
    ( |7 j& ^' _0 x3 I4 H# a' V! G该模型优化了由重建损失和聚类损失组成的组合损失函数。2 J4 O; ]0 D8 \" @3 c
    进行优化,使得聚类层优化为w.r.t.Lcluster,解码器优化为w.r.t.Lrec,编码器优化为w.r.t.两者。
    & Q. g' |5 i: E1 Y! ~3 R" u' V3 I% u9 n* Y集群层的初始化是通过Kmeans完成的。如[9]所示,当编码器针对这两种损失进行优化时,解码器保持不变,并充当正则化器,以保持编码器的嵌入质量。! O* B1 K& b+ _8 s( B& d3 Y
    本阶段的综合损失为:
    ; m) E4 j- M  X. f7 O$ N3 B7 n3 Q. Z3 {1 `3 k7 r: a
    8 q$ b& A" ?! b9 T& k- N" b

    2 h; \, l8 |4 ^2 E; i8 L实现细节7 w. }- B$ D! _

    7 Z- V& t/ \7 i$ ]- M7 O  @# ?. A! x5 r' Y0 G6 t6 y

    2 N' j4 @% P6 i! udef calc_reg_loss(model, reg_type='l2', avg=True):
    ) X( j5 z# H: [) F! `    reg_loss = None  r8 S' f0 b$ n( I+ o
        parameters = list(param for name, param in model.named_parameters() if 'bias' not in name); k- C2 |+ U' k0 w+ ^. r6 I
        num_params = len(parameters)
    ' Z3 ~' W/ f& y7 w" ?  k    if reg_type.lower() == 'l2':
    9 U' Y9 J$ G- R* `) C4 I4 j7 Y        for param in parameters:
    7 u  \0 a- Q' @7 O1 i; ^5 ]+ a            if reg_loss is None:
    1 j; B: }- U" B0 y: o7 b0 n3 Q                reg_loss = 0.5 * torch.sum(param ** 2)1 x, A' v2 D( [  ^3 T' i
                else:
    & [% |( D# m- C- y; x                reg_loss = reg_loss + 0.5 * param.norm(2) ** 28 O9 h9 e: t. o1 N: U3 y* p2 b

    1 V1 F' t# a$ e        if avg:
    8 g- x: `4 P' O1 {            reg_loss /= num_params% i+ L; y5 \" [) W/ ~. O
            return reg_loss
    2 c4 ^* @1 a% v: ]    else:% y8 S# I% p- j2 }7 r8 {- W: x
            return torch.tensor(0.0, device=model.device)* Y$ g% K* y) A9 e+ u! g
    1, k" ^3 |' E2 ^. s0 [6 n$ U
    2+ d& f+ T( h5 n4 k; d. f
    3
    ( M4 b0 ]: x& F* a* w9 `4
    3 t8 N! n- B2 K- s( @. j& i* Q5
    ; a( j" C' [- u6
    ; U2 p1 k+ l- b* t73 \, R* C3 N; J% v3 c
    8" \3 K$ B* x# n( w/ E: K0 f
    9
    - ^( z9 ?5 L% L- M+ h100 E" C. P) P( n) A: {+ ~. v1 ]0 L
    11
    7 C2 X9 ]' w* M) M+ a0 B+ Y12
    7 A$ D/ x+ B3 n1 O2 w: ]8 b13
    4 c' f; N+ w" T' R. N6 j14
    ' ~! y' A& @2 }* k5 C' T5 R15  l+ S$ L8 b  R( w
    161 S: j( V3 z7 l0 d# N
    ( E' O. o0 ]2 U7 Z' R1 t

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

    - e3 E/ `3 d! r" m: ~* z6 s
    ' k$ W. `& s( H; s
    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:39 , Processed in 0.454056 second(s), 51 queries .

    回顶部