QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 2140|回复: 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
    / P) o$ V! ?7 D( C
    " h! C" Q2 f1 Z7 I; s1 f/ r3 [骨架图算法
    % ?* D5 S# H  I/ L+ X8 Z$ o& H3 P3 q' q

      N  V* P3 _3 I0 O' o4 b" dGraph Embedded Pose Clustering for Anomaly Detection
    , I8 j6 a" f) l3 Rpaper        code& e1 n' `& ]% b& `
    https://arxiv.org/abs/1912.11850        https://github.com/amirmk89/gepc; B9 D: {: X6 F/ o% u3 x
    我们提出了一种用于人类行为异常检测的新方法。我们的方法直接适用于可以从输入视频序列计算的人体姿势图。这使得分析独立于扰动参数,如视点或照明。我们将这些图映射到一个潜在空间并将它们聚类。然后,每个操作都由其对每个聚类的软赋值来表示。这为数据提供了一种“词袋”表示,其中每个动作都由其与一组基本动作词的相似性来表示。然后,我们使用基于狄利克雷过程的混合物,这对于处理比例数据(例如我们的软赋值向量)很有用,以确定一个动作是否正常。9 w; [4 G1 U0 j9 o3 f
    % ~% r" ?* U1 f' w+ m
    首先,我们对输入数据使用人体姿态检测器。这抽象了问题,并防止下一步处理诸如视点或照明变化等有害参数。人的行为被表示为时空图,我们将其嵌入(第3.1、3.2小节)并聚类(第3.3小节)到一些潜在空间中。现在,每个动作都表示为一组基本动作的软分配向量。这抽象了动作的基本类型(即细粒度或粗粒度),从而进入学习其分布的最后阶段。我们用于学习软分配向量分布的工具是Dirichlet过程混合(第3.4小节),我们将模型拟合到数据中。然后使用该模型确定动作是否正常。3 P4 Z# ~9 V6 F0 h9 ^# [0 o
    3 j& K1 ^/ b+ I3 k! l: e1 A$ ~
    图的每个节点对应于一个关键点、一个身体关节,每个边表示两个节点之间的某种关系。 存在许多"关键点关系",如解剖学上定义的物理关系(例如,左手腕和肘部连接)和由运动定义的动作关系,这些运动往往在特定动作的上下文中高度相关(例如,跑步时左右膝盖倾向于朝相反方向移动)。图的方向来自于这样一个事实,即一些关系是在优化过程中学习的,并且不是对称的。这种表示的一个好处是紧凑,这对于高效的视频分析非常重要。; ]" M6 w2 }' T  h
    为了在时间上扩展,将从视频序列中提取的姿势关键点表示为姿势图的时间序列。 时间姿势图是人体关节位置的时间序列。时域邻接可以类似地通过连接连续帧中的关节来定义,允许我们利用姿势图序列的空间和时间维度执行图卷积运算8 j8 h% U! d" O9 d

    0 @; M! Y4 R, U2 r7 T- z6 K我们提出了一种基于深度时态图自动编码器的结构,用于嵌入时态姿态图。 基于图2所示ST-GCN的基本块设计,我们将基本GCN算子替换为新的空间注意力图卷积,如下所示。
    ( x8 M' n0 M4 o$ N, _% u% m4 _. v
    . S* K& g$ R4 C3 `6 v# _3.2. Spatial Attention Graph Convolution; g0 a. l$ ], O, B0 t* q
    我们提出了一个新的图算子,如图3所示,它使用三种类型的邻接矩阵:静态、全局学习和推断(基于注意力)。每个邻接类型使用单独的权重应用其自己的GCN。3 |0 J  }" k0 l8 d" v  a/ Q" R

    # f8 \( i) c+ P- d, {GCN的输出按通道维度堆叠。采用1×1卷积作为加权叠加输出的可学习缩减度量,并提供所需的输出信道数。
    4 _- ~" C/ }" H4 c2 v( t% v/ a# h' G7 x5 B; S
    三个邻接矩阵捕捉了模型的不同方面:% S3 s4 f/ `' }" A1 {5 v
    (i)使用身体部位连通性作为优先于节点关系,使用静态邻接矩阵表示。
    % {, m  ^+ M" c  P% h; @(ii)由全局邻接矩阵捕获的数据集级关键点关系,以及2 A' D+ L% Z8 }1 K- o
    (iii)由推断邻接矩阵获取的样本特定关系。最后,可学习约简度量对不同的输出进行加权
    # a1 d: b3 U( a# l2 J& z! k! J+ V

    2 D, \! e1 N4 o! S- K后续段落介绍了静态、全局学习和推断的邻接矩阵的设置方法,即图3中的A,B和C,在此略过。
    3 f# Z0 o2 K9 X7 q7 Y3.3. Deep Embedded Clustering9 q8 M1 n1 M0 y; |0 R
    为了构建我们的底层动作词典,我们采用训练集样本,并将它们联合嵌入和聚类到一些潜在空间中。然后,每个样本由其分配给每个底层聚类的概率表示。选择目标是为了提供不同的潜在集群,这些集群上存在动作。' ?( f4 y) t& I# ~, O
    , ^2 _- f4 g: c
    我们采用了深嵌入聚类的概念[32],用我们的ST-GCAE架构对时间图进行聚类。所提出的聚类模型由编码器、解码器和软聚类层三部分组成。- ?* m; o. v$ w  ^- W$ f9 n; p
    % O- |' Z' _7 H8 s
    具体地说,我们的ST-GCAE模型保持了图的结构,但使用了较大的时间步长和不断增加的通道数来将输入序列压缩为潜在向量。解码器使用时间上采样层和额外的图卷积块,用于逐渐恢复原始信道计数和时间维度。
    . ], g0 {; r7 R. _1 a% K0 e  k4 f; m
    % J8 C- R1 B! F3 O$ D1 MST-GCAE的嵌入是数据聚类的起点。在我们的聚类优化阶段,对基于重构的初始嵌入进行微调,以达到最终的聚类优化嵌入。& e8 k! B7 i# w$ M8 g' _

    ' P* K2 `2 i/ v' n1 N+ `' E0 I符号        表示
    5 s2 j; D, K4 j! L; `- M: f# y- Px i x_ix
    0 O7 d: `# B# x9 g3 wi, z* w: {* I- t

    ! e' r; V  M' h! k( ~+ ]) p) L         输入示例
    6 T9 a  s: }- u4 p% Y$ Ez i z_iz & Y" v8 A) n# }; ~# U9 V* R
    i
    4 B- O. F" @9 B, u
    ! r6 d" N2 ]) u$ S5 V         编码器的潜在嵌入9 z8 Y5 k. i9 n2 B: k& i$ w
    y i y_iy 3 e# m/ T7 q  m  D& B
    i; l. A& |4 X' M1 _

    : k, U: O; a2 f( t6 F' X         使用聚类层计算的软聚类分配2 I! V% `+ X& h
    Θ ΘΘ        聚类层的参数
    ! `9 {, N, d% p; J" c. e/ d' \' k$ rp i k p_{ik}p 9 F' K/ x2 @8 C" S" C4 o& g$ D
    ik* P# y! N. h1 m; T) p- \
    : m. x- Z* T4 U! @% [! X; ?/ R! t
            probability for the i-th sample to be assigned to the k-th cluster% A5 R0 i; i& n! v* e! v+ t

    * _2 r+ {1 e5 d; P8 f8 Y" x2 x2 ?9 v$ H7 t& j4 L
    我们采用[32]提出的聚类目标和优化算法。聚类目标是最小化当前模型概率聚类预测P和目标分布Q之间的KL散度:  B' Z, ]3 [" O
    ' s! r  Z& H3 F6 x8 k- {* m- T
    & L2 _5 C' x6 b! q: b! y5 ^9 b
    目标分布旨在通过标准化和将每个值推到更接近0或1的值来加强当前的群集分配。反复应用将P转换为Q的函数将最终导致硬分配向量。使用以下等式计算目标分布的每个成员:/ S4 R* Y6 ]* l
    2 i2 [0 g% j8 `

    3 ?( L6 ?7 F3 }聚类层由为编码训练集计算的K均值质心初始化。优化以期望最大化(EM)的方式进行。
    3 T: j+ @9 W+ h8 `" J8 w在期望步骤期间,整个模型是固定的,并且目标分布Q被更新。在最大化阶段,优化模型以最小化聚类损失Lcluster。1 j8 y0 }- T6 f
    % J4 O) \' W; C% o
    3.4. Normality Scoring) g2 W+ s8 f8 N
    该模型支持两种类型的多模分布。一个是集群分配级别;另一个是在软分配向量级别。例如,一个动作可能被分配给多个集群(集群级分配),导致多模式软分配向量。# w4 c8 p9 J# D, r8 _3 ?
    软分配向量本身(捕获动作)也可以通过多模态分布建模。1 o3 v6 J0 U+ M( m
    : R7 U7 d+ X$ ~
    Dirichlet过程混合模型(DPMM)是评估比例数据分布的一种有效方法。它满足我们所需的设置:(i)估计(拟合)阶段,在此阶段,一组分布参数为评估,和(ii)推理阶段,为每个嵌入样本使用拟合模型。彻底的Blei和Jordan[4]给出了该模型的概述。
    ' v$ e; Y$ M& I5 E& C& F/ [. [. j9 ]; _3 B
    Dirichlet过程混合模型(DPMM)是评估比例数据分布的有效方法。它符合我们要求的设置:- N) R7 ~7 k7 v! T
    (i) 估计(拟合)阶段,在此期间评估一组分布参数,以及
    5 l. V0 F$ u, V4 D: V' R  y* o. E6 Z(ii)推理阶段,使用拟合模型为每个嵌入样本提供分数。Blei和Jordan[4]对模型进行了全面概述。
    ' N+ X+ i- `6 ]/ q: a7 Z5 D6 o: `* i1 a1 R* B8 Q
    DPMM是单峰Dirichlet分布的常见混合扩展,并使用Dirichllet过程,这DirichletDistribution的无限维扩展。该模型是多模态的,能够将每个模式捕获为混合成分。拟合模型具有多个模式,每个模式表示对应于一个正常行为的一组比例。在测试时,使用拟合模型通过其对数概率对每个样本进行评分。[4,8]中提供了关于DPMM使用的进一步解释和讨论。& n. g! D* p5 P2 f: q3 h

    / ?, F) b1 M# o- c+ a6 l: F3 [3.5. Training1 W) t- }! W& S: j; ?7 Z! D8 K
    该模型的训练阶段包括两个阶段,一个是自动编码器的预训练阶段,其中网络的聚类分支保持不变,另一个是微调阶段,其中嵌入和聚类都得到优化。具体而言:- P' G) n) _* A# {1 i
    ' h, [8 C1 r1 h+ D
    Pre-Training: 该模型通过最小化重建损失(表示为Lrec)来学习编码和重建序列,Lrec是原始瞬时位姿图和ST-GCAE重建的位姿图之间的L2损失! F# _* i$ }* m* |& c3 t/ @' H

    3 C  A/ ]( Y3 m1 T1 OFine-Tuning:
    3 @2 A* D7 N) f" E1 c该模型优化了由重建损失和聚类损失组成的组合损失函数。
    - T! A/ c1 @3 g7 V( {' [进行优化,使得聚类层优化为w.r.t.Lcluster,解码器优化为w.r.t.Lrec,编码器优化为w.r.t.两者。1 a( z. x" M" V5 ~3 @0 f  a
    集群层的初始化是通过Kmeans完成的。如[9]所示,当编码器针对这两种损失进行优化时,解码器保持不变,并充当正则化器,以保持编码器的嵌入质量。
    # o2 q2 ]$ m1 Q- D5 C$ r本阶段的综合损失为:
    - v' h, C3 E2 l" I3 o! n1 @2 q  D+ E: @. ]! Q' l

    + G+ Z) j( C/ {$ K+ |/ t
    0 u& E: Z  P% M* Y4 n4 L* s  Z6 d) i实现细节7 P3 B9 m+ {. n8 D3 ^

    8 M6 r, M- B2 E2 h, l3 T' X) H0 Q
    . I! |: e0 Z5 k: S8 _7 B# j3 B, t; _- t+ U
    def calc_reg_loss(model, reg_type='l2', avg=True):
    * J; ^# ]) I% G- w9 P    reg_loss = None
    & R6 O# Z2 U/ v3 s3 k    parameters = list(param for name, param in model.named_parameters() if 'bias' not in name)9 w; U* o6 E/ s+ B& a4 ^1 R
        num_params = len(parameters)2 y$ g) G( E8 p# Y3 F! t3 V
        if reg_type.lower() == 'l2':
    : ?5 U6 k: J+ R8 j$ _9 F        for param in parameters:
    / B* V  q* M1 V1 }5 D5 ]' `            if reg_loss is None:
    % {1 {/ \  M) M- L1 V                reg_loss = 0.5 * torch.sum(param ** 2)9 V$ H- V$ r) G8 b8 R( I
                else:# ~1 W( n- F& m/ U
                    reg_loss = reg_loss + 0.5 * param.norm(2) ** 2
    ) j" S. _- i3 q- R4 I4 K. d
    ) n( V- d9 V" P( ]9 p: y" ]+ O        if avg:
    / s1 _2 I2 Z* H0 O8 f0 W5 M            reg_loss /= num_params! l8 f* p+ [' \* G$ C
            return reg_loss( K3 h3 d" v! r# E- ^; u# F/ j5 H
        else:2 S+ O3 @+ |2 U6 I6 b/ r
            return torch.tensor(0.0, device=model.device)! z5 R5 G" U. W" y( i  a
    17 x2 Q, q/ k5 H" l; s% y
    20 j( z. C$ a7 G" c8 p' K8 J
    34 y" X; c% T/ T8 ^
    4/ U$ c8 F: ]/ p2 N
    5
    * L2 z( @  U9 G+ O6. |+ w) Q1 {. Q! ~& p9 l5 @
    7
    0 _, f* i+ |. i7 j8
    & D! v' [$ u" ~( l9% }" Z) |9 w6 I: Y1 _2 B& T3 o% }# k
    100 C5 _6 P; S, G; n- `
    11
    % D- F/ f5 c9 `3 a4 U3 b12
    $ z8 Z" |2 p+ ?$ f( U6 t13$ L- B6 W7 w; {* Y- x5 m  F+ n, d: _
    14
    - X. I" u/ ]( F5 I% j1 c% x  x15
    7 O. \7 ^/ }- a167 u# a. ^) T( x6 ^

    . U, q* ?2 m) N' q
    % P( w) G( O2 y' b+ R/ q# b7 e

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

    & v2 N$ Z& }5 m/ s& }! K! Z2 j+ ?" q/ H" F  ]5 d, L4 V
    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, 2025-6-4 01:54 , Processed in 0.426818 second(s), 50 queries .

    回顶部