- 在线时间
- 1630 小时
- 最后登录
- 2024-1-29
- 注册时间
- 2017-5-16
- 听众数
- 82
- 收听数
- 1
- 能力
- 120 分
- 体力
- 558210 点
- 威望
- 12 点
- 阅读权限
- 255
- 积分
- 172836
- 相册
- 1
- 日志
- 0
- 记录
- 0
- 帖子
- 5313
- 主题
- 5273
- 精华
- 18
- 分享
- 0
- 好友
- 163
TA的每日心情 | 开心 2021-8-11 17:59 |
---|
签到天数: 17 天 [LV.4]偶尔看看III 网络挑战赛参赛者 网络挑战赛参赛者 - 自我介绍
- 本人女,毕业于内蒙古科技大学,担任文职专业,毕业专业英语。
 群组: 2018美赛大象算法课程 群组: 2018美赛护航培训课程 群组: 2019年 数学中国站长建 群组: 2019年数据分析师课程 群组: 2018年大象老师国赛优 |
骨架图算法Graph Embedded Pose Clustering
) z, l J# P- J2 @: c5 ]! S$ D# f, Q4 D
骨架图算法* C$ e% x: K3 p$ H2 l$ s
9 S1 ^: h0 M. ?4 K+ I& B+ E1 N; a- ^
Graph Embedded Pose Clustering for Anomaly Detection. H+ o+ p( f4 @8 t3 c& L6 J r
paper code7 r d, d) h4 d( f: ~
https://arxiv.org/abs/1912.11850 https://github.com/amirmk89/gepc
4 a% `$ F; ?: G% k# u: e我们提出了一种用于人类行为异常检测的新方法。我们的方法直接适用于可以从输入视频序列计算的人体姿势图。这使得分析独立于扰动参数,如视点或照明。我们将这些图映射到一个潜在空间并将它们聚类。然后,每个操作都由其对每个聚类的软赋值来表示。这为数据提供了一种“词袋”表示,其中每个动作都由其与一组基本动作词的相似性来表示。然后,我们使用基于狄利克雷过程的混合物,这对于处理比例数据(例如我们的软赋值向量)很有用,以确定一个动作是否正常。
1 E% n$ R' u* A4 y, ^, U6 ?+ p
8 G, ^2 b, `+ Y首先,我们对输入数据使用人体姿态检测器。这抽象了问题,并防止下一步处理诸如视点或照明变化等有害参数。人的行为被表示为时空图,我们将其嵌入(第3.1、3.2小节)并聚类(第3.3小节)到一些潜在空间中。现在,每个动作都表示为一组基本动作的软分配向量。这抽象了动作的基本类型(即细粒度或粗粒度),从而进入学习其分布的最后阶段。我们用于学习软分配向量分布的工具是Dirichlet过程混合(第3.4小节),我们将模型拟合到数据中。然后使用该模型确定动作是否正常。
! O. B2 u4 j9 B6 k. t( K- A6 q0 T+ G, Z8 G- O% }
图的每个节点对应于一个关键点、一个身体关节,每个边表示两个节点之间的某种关系。 存在许多"关键点关系",如解剖学上定义的物理关系(例如,左手腕和肘部连接)和由运动定义的动作关系,这些运动往往在特定动作的上下文中高度相关(例如,跑步时左右膝盖倾向于朝相反方向移动)。图的方向来自于这样一个事实,即一些关系是在优化过程中学习的,并且不是对称的。这种表示的一个好处是紧凑,这对于高效的视频分析非常重要。! D5 o9 o* H/ o6 Z K, u M
为了在时间上扩展,将从视频序列中提取的姿势关键点表示为姿势图的时间序列。 时间姿势图是人体关节位置的时间序列。时域邻接可以类似地通过连接连续帧中的关节来定义,允许我们利用姿势图序列的空间和时间维度执行图卷积运算
" Q. W7 l1 S, S( F2 a1 }9 V
/ R5 Y+ r& A I. n3 A* f/ k我们提出了一种基于深度时态图自动编码器的结构,用于嵌入时态姿态图。 基于图2所示ST-GCN的基本块设计,我们将基本GCN算子替换为新的空间注意力图卷积,如下所示。
+ m9 {8 c6 w7 y9 K3 H! b( @
7 L ]( ?5 Y/ U) Q$ L" ~3.2. Spatial Attention Graph Convolution2 ^3 f3 f, m4 P; f) W4 f: a
我们提出了一个新的图算子,如图3所示,它使用三种类型的邻接矩阵:静态、全局学习和推断(基于注意力)。每个邻接类型使用单独的权重应用其自己的GCN。' z, V. ? Y, D
+ L/ S- s& D4 s4 a7 z
GCN的输出按通道维度堆叠。采用1×1卷积作为加权叠加输出的可学习缩减度量,并提供所需的输出信道数。9 H/ @8 o' o. H( o3 u# G
* ~3 I- H5 R4 W9 g+ w h. Q& l三个邻接矩阵捕捉了模型的不同方面:
7 E& R$ }5 N# t* V: \(i)使用身体部位连通性作为优先于节点关系,使用静态邻接矩阵表示。) t6 x i# q* c+ Y4 x# X
(ii)由全局邻接矩阵捕获的数据集级关键点关系,以及
3 |1 m. n" O4 C/ n" S# w( Z(iii)由推断邻接矩阵获取的样本特定关系。最后,可学习约简度量对不同的输出进行加权
* v b$ f$ e( e9 e0 M1 a$ Y! A% j' A! v' W# G
4 ~; s' l1 I4 O# t5 h; z后续段落介绍了静态、全局学习和推断的邻接矩阵的设置方法,即图3中的A,B和C,在此略过。( Q) d% ^1 d. |" ] `' C
3.3. Deep Embedded Clustering
9 M8 s5 R7 l, c$ g) i为了构建我们的底层动作词典,我们采用训练集样本,并将它们联合嵌入和聚类到一些潜在空间中。然后,每个样本由其分配给每个底层聚类的概率表示。选择目标是为了提供不同的潜在集群,这些集群上存在动作。
4 Y- L/ O; G5 B4 g {4 z& ]9 [- J1 c
我们采用了深嵌入聚类的概念[32],用我们的ST-GCAE架构对时间图进行聚类。所提出的聚类模型由编码器、解码器和软聚类层三部分组成。
' [& L( r; v4 s! W# x3 q
7 i* L& l- O( i. m. B& O具体地说,我们的ST-GCAE模型保持了图的结构,但使用了较大的时间步长和不断增加的通道数来将输入序列压缩为潜在向量。解码器使用时间上采样层和额外的图卷积块,用于逐渐恢复原始信道计数和时间维度。
$ R) H# j9 i4 ~3 @
7 I/ }4 w' `/ x+ |0 ~8 X! }9 _" ?ST-GCAE的嵌入是数据聚类的起点。在我们的聚类优化阶段,对基于重构的初始嵌入进行微调,以达到最终的聚类优化嵌入。/ v3 y- K& T' W1 ^0 c: U
0 _0 v+ @$ F3 `# S符号 表示# c$ ^" b& B Q8 V6 H* G
x i x_ix " c% ]# s8 y- f) K n3 d
i$ S$ `; E: Y$ j; |
* I! t! A) R5 [. n$ T, M* c
输入示例: {" U) @7 f3 W6 E# S2 m+ C
z i z_iz
! ^4 i# g- y$ M! Ki
4 a" v/ d* Q' l0 Y( U4 e- l, C
& `7 z' S a/ d1 C 编码器的潜在嵌入
; G P) v4 s$ d" ~( [5 {8 hy i y_iy
+ U$ `2 I6 S# {i
7 X) o' p1 Q$ @9 y' _" o L
. m2 U5 e) Z. B1 t5 x. U9 W 使用聚类层计算的软聚类分配
3 m2 m- t" x0 t0 D- k+ x+ GΘ ΘΘ 聚类层的参数& N+ F# }! V' ]/ d9 Y
p i k p_{ik}p
& T" x, g" u! k; o9 i6 Fik
+ [+ H6 v4 L1 ^8 V" F0 G
3 P# K7 `0 b. G probability for the i-th sample to be assigned to the k-th cluster$ ^8 y6 b( _7 J# \: ? \/ E& Q
8 j& K- v5 n/ ?# A; y$ ]) D6 D8 ^* k _# C
我们采用[32]提出的聚类目标和优化算法。聚类目标是最小化当前模型概率聚类预测P和目标分布Q之间的KL散度:
8 Z+ s- b$ Z; [7 M6 T* b6 d1 i( ?8 \3 a4 s# o" N6 c# p
# a" G, J* f5 p: S/ L: f+ I
目标分布旨在通过标准化和将每个值推到更接近0或1的值来加强当前的群集分配。反复应用将P转换为Q的函数将最终导致硬分配向量。使用以下等式计算目标分布的每个成员:
! z; C& M( }0 c7 w) H$ C! `/ ?) a7 i6 [) F1 c
+ b+ y5 y. c0 m5 t: p5 e/ d聚类层由为编码训练集计算的K均值质心初始化。优化以期望最大化(EM)的方式进行。% g( E! U2 n# h+ m" g, c6 E( G
在期望步骤期间,整个模型是固定的,并且目标分布Q被更新。在最大化阶段,优化模型以最小化聚类损失Lcluster。
' u' ^" i$ Q& O6 q/ [% t, o
" P2 Z1 U; j% A9 r9 ?9 _3 u( ?9 j3.4. Normality Scoring
q, P5 v$ k. C* G5 E( [( Q3 `) f3 _该模型支持两种类型的多模分布。一个是集群分配级别;另一个是在软分配向量级别。例如,一个动作可能被分配给多个集群(集群级分配),导致多模式软分配向量。
) O( C: G! i% h软分配向量本身(捕获动作)也可以通过多模态分布建模。
, ~6 j" ~4 s2 v S7 {$ {$ K2 r! S( l6 I, x
Dirichlet过程混合模型(DPMM)是评估比例数据分布的一种有效方法。它满足我们所需的设置:(i)估计(拟合)阶段,在此阶段,一组分布参数为评估,和(ii)推理阶段,为每个嵌入样本使用拟合模型。彻底的Blei和Jordan[4]给出了该模型的概述。
5 U% v0 x. G5 G
/ o$ ~& I) v9 g/ tDirichlet过程混合模型(DPMM)是评估比例数据分布的有效方法。它符合我们要求的设置:( e4 F$ K5 n- m- _' t- N8 q
(i) 估计(拟合)阶段,在此期间评估一组分布参数,以及
" u. J8 Y7 o0 V0 C, b: e(ii)推理阶段,使用拟合模型为每个嵌入样本提供分数。Blei和Jordan[4]对模型进行了全面概述。
( G: f+ g8 N" R: J# d) [9 E# i% ]5 P4 K
DPMM是单峰Dirichlet分布的常见混合扩展,并使用Dirichllet过程,这DirichletDistribution的无限维扩展。该模型是多模态的,能够将每个模式捕获为混合成分。拟合模型具有多个模式,每个模式表示对应于一个正常行为的一组比例。在测试时,使用拟合模型通过其对数概率对每个样本进行评分。[4,8]中提供了关于DPMM使用的进一步解释和讨论。
! }& m! k, r4 z+ m7 P# p% q0 N) k h# H' W" C2 x, F7 d
3.5. Training
) V4 R" F/ c) ?/ A+ o7 W该模型的训练阶段包括两个阶段,一个是自动编码器的预训练阶段,其中网络的聚类分支保持不变,另一个是微调阶段,其中嵌入和聚类都得到优化。具体而言:9 r& }; G- q h% }
9 W4 w; S1 X- F' W' WPre-Training: 该模型通过最小化重建损失(表示为Lrec)来学习编码和重建序列,Lrec是原始瞬时位姿图和ST-GCAE重建的位姿图之间的L2损失
+ [, h# R2 P& ~5 w+ Y& _7 V$ R+ V, x$ E/ L i: _% O
Fine-Tuning:
0 @- C: U5 e1 [( V3 t该模型优化了由重建损失和聚类损失组成的组合损失函数。 b# p- |" P. k2 h# I! A
进行优化,使得聚类层优化为w.r.t.Lcluster,解码器优化为w.r.t.Lrec,编码器优化为w.r.t.两者。
* f( q' ~) ]/ M B. n2 ?* w% P集群层的初始化是通过Kmeans完成的。如[9]所示,当编码器针对这两种损失进行优化时,解码器保持不变,并充当正则化器,以保持编码器的嵌入质量。9 b) V! P& D0 M1 ]. A
本阶段的综合损失为:+ J/ A! F& x8 Z. k) K; f
! @! l* j& E5 ]1 W( `8 ~% v
6 V+ {& f' w9 x; C1 t* f" I! E
- R$ |' R7 [! T) d: F6 E$ V
实现细节
5 c' I% t) {: v; s! j/ Q" x6 @. m2 g( }# |4 f
3 [5 _+ s, ~/ M' z
; Z7 |: g9 k0 H8 o6 A8 @5 ~def calc_reg_loss(model, reg_type='l2', avg=True):; o7 O" ~4 O2 c9 @; x
reg_loss = None
& }0 p( h( Z+ r. x3 @; i parameters = list(param for name, param in model.named_parameters() if 'bias' not in name)
5 F0 n( d( p2 B4 @ num_params = len(parameters)
; e( i" j, }6 ~+ |" Q if reg_type.lower() == 'l2':
$ \+ ]2 U/ L$ ~ for param in parameters:
# Z( b" m- q; b+ g$ g4 F if reg_loss is None:
" a: N) v% E( N0 K reg_loss = 0.5 * torch.sum(param ** 2)
6 A6 h0 u( v' m; i7 E! @ else:
0 Q, }% u: ]5 O reg_loss = reg_loss + 0.5 * param.norm(2) ** 2. y7 u a. v! A: I' J8 n
$ Y, Y8 a( x, c# Z* I if avg:* S# o8 Z: x. ^6 ^
reg_loss /= num_params6 |8 l/ x% o$ V
return reg_loss6 ~ y5 M: z9 Z+ [8 ^. e( I- l
else:
^4 V/ U6 }# n6 d return torch.tensor(0.0, device=model.device)
# y4 q# `9 G8 x( I1
+ r0 [& h+ j- H0 f- \& n2
( q' l% f0 ~, b l9 ^0 }3
A8 Z7 W& C/ v3 A4 x40 L; d1 k9 Z/ i/ L* ?
5
, V! c' {7 v5 n4 v' @. d: k6, j+ Q# \$ l# g' C
7
0 z# Z7 [- t" {4 B! s8
2 b& p2 q- b- M6 t( L$ b2 B* Q9
/ t2 v; t2 i) h4 O: x5 ~: @* s% n10
( j( ]2 Q9 R; l% |6 R11
' H2 k2 x0 B1 H6 ^& a12
4 [% P4 C' W6 a' v3 k8 a4 f0 s13) o1 f) y0 T- t( l+ |8 B& }, w
14, I! ^ p3 t* J
15
% P- E3 I' W' `( \( d0 z16) ]/ O0 W( f% d7 P. K
I3 N* h% o2 N$ N5 N
6 k* w+ M8 @+ }. s. {% F' l
0 f8 t9 J: C9 t5 b1 `3 V
3 V! U* }3 `2 C8 S/ g1 H0 d/ cPatchModel(
- ? c7 c4 g3 L+ T (patch_fe): Identity()
! R& Q; @# L6 J0 v) P (gcae): GCAE(7 h- F& N* a- ~# d4 E0 i2 E
(data_bn): BatchNorm1d(54, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)5 S0 k! V6 E4 J/ s" T% l' _5 \
(act): ReLU(inplace=True)* i! V$ ^/ L, b- s( h7 m5 z
(st_gcn_enc): ModuleList(
+ K" `5 Z% @6 Y2 z d' A& } (0): ConvBlock(
1 n% I Z* E; v4 ?) z' u (act): ReLU(inplace=True)
9 B( @9 n. |7 w5 i# `: H; @, L (gcn): PyGeoConv(* p0 V7 ?: i0 R. j# J
(g_conv): SAGC(
+ O9 Z4 ^: e; u+ } (conv_a): ModuleList(6 D9 ?- w- b% b. \5 Y7 C* x
(0): Conv2d(3, 8, kernel_size=(1, 1), stride=(1, 1))) Z! m: r+ y0 _4 T' d5 i: E* x1 l
(1): Conv2d(3, 8, kernel_size=(1, 1), stride=(1, 1))5 }) a; V( n/ |8 R. g
(2): Conv2d(3, 8, kernel_size=(1, 1), stride=(1, 1))
7 V3 H! W& a) x3 q$ K )
/ m0 z% d; N/ l9 w (conv_b): ModuleList(
4 c( I3 Y* ?% V (0): Conv2d(3, 8, kernel_size=(1, 1), stride=(1, 1))& X* s6 g5 E* `, Z
(1): Conv2d(3, 8, kernel_size=(1, 1), stride=(1, 1))" }# g$ u' Y! W
(2): Conv2d(3, 8, kernel_size=(1, 1), stride=(1, 1))
+ C8 O3 m H" h% D$ e2 Q) Y )
/ `5 K' w# T3 W (gconv): ModuleList(
+ a: r Z6 F+ k( a2 T (0): GraphConvBR(
5 g @6 a7 H( v& M( z0 p z; }$ F$ e (bn): BatchNorm2d(32, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
; Z) l& y" w/ d- \, {8 q (act): ReLU(inplace=True): F; l2 y! {3 H% u- X( P
)
* S* `1 X% `- d# E, z" w (1): GraphConvBR(5 U) D! }& O. _% ]( P
(bn): BatchNorm2d(32, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)& ] ?' ?8 {3 v. D0 _* E
(act): ReLU(inplace=True)
) x; b9 Z) u* F- [ )1 e c) ? I& d
(2): GraphConvBR(/ e) e. t5 O3 b5 Z6 N* c
(bn): BatchNorm2d(32, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
& j" B; J- v- |3 P8 F (act): ReLU(inplace=True)8 n% ~* K4 ^; b' n; D0 N
)/ [8 }5 ^% ?6 f
)
' A( |# `! C$ L' s7 a (down): Sequential(
0 S$ [6 f! c; y# H1 s7 ` (0): Conv2d(3, 32, kernel_size=(1, 1), stride=(1, 1))5 D. X9 A p( m7 f. m
(1): BatchNorm2d(32, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
0 f# _3 W* J1 k2 w) f )
/ a) Q. g9 C( A' u4 L% `* B (bn): BatchNorm2d(32, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
+ g) N4 h0 n2 K (soft): Softmax(dim=-2)8 O" Z+ P6 g: m" ^9 y
(relu): CELU(alpha=0.01)
4 R. t# n6 K6 M$ u- n (expanding_conv): Conv2d(3, 288, kernel_size=(1, 1), stride=(1, 1), bias=False)6 v5 s9 B; t% E7 j# A
(reduction_conv): Conv2d(96, 32, kernel_size=(1, 1), stride=(1, 1), bias=False)
/ U: t6 A( C) c9 C7 W )
5 r. b+ s# m8 z; i, q/ C3 ?, R$ h )
2 U+ o) e' ]; T (tcn): Sequential(; t2 J$ |0 o/ A
(0): BatchNorm2d(32, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)% Q- P7 C. x( Y d( o. R
(1): ReLU(inplace=True)
/ Q% W; o! A: V4 Z) i& k0 K (2): Conv2d(32, 32, kernel_size=(9, 1), stride=(1, 1), padding=(4, 0))
% c& O" [' s6 y (3): BatchNorm2d(32, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)5 `6 r1 E, \: \
(4): Dropout(p=0.3, inplace=True); N) P, B# J% a: c. [
)
" k: ^* @8 _$ ^: v: ]1 ? )
* U4 Q; q8 X" ^ (1): ConvBlock(, k9 d- @7 ^2 e) l5 s0 m& t3 L% v6 a
(act): ReLU(inplace=True). }7 |2 F, s5 G1 M2 N- y. i
(gcn): PyGeoConv(
" ]7 O: M, k0 v2 f/ ?( I7 p4 b; |) o (g_conv): SAGC(
( ?! t+ G' Z$ l& s7 G& ? (conv_a): ModuleList(% X$ x$ W4 M1 q; t* F( P3 [
(0): Conv2d(32, 8, kernel_size=(1, 1), stride=(1, 1))* C# T8 P! X, C# y' C& F
(1): Conv2d(32, 8, kernel_size=(1, 1), stride=(1, 1))4 m$ s6 l& W8 G# @- z0 \
(2): Conv2d(32, 8, kernel_size=(1, 1), stride=(1, 1))8 O8 B3 l% j( ~% ^+ f9 R6 W
)8 w |4 c j# k: R, T! `
(conv_b): ModuleList(' m Z* T" b; Q8 m1 ~
(0): Conv2d(32, 8, kernel_size=(1, 1), stride=(1, 1))
: |8 j/ f3 e, m% g9 y (1): Conv2d(32, 8, kernel_size=(1, 1), stride=(1, 1))1 x# g8 y4 I* W
(2): Conv2d(32, 8, kernel_size=(1, 1), stride=(1, 1))
8 R" }; J$ T; s% r0 v2 m4 W/ s )
: A9 s+ ~& S# f0 Y7 J5 o (gconv): ModuleList(0 }- N. ~ w, C4 [' a6 u
(0): GraphConvBR(
$ F) e% u! O, v- ~9 P/ R (bn): BatchNorm2d(32, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
/ o6 e+ j: m* W (act): ReLU(inplace=True)% M1 O' f$ h& I1 D- e- B) o. M
)
9 l, Q3 o8 q3 L0 {5 t$ b o; v (1): GraphConvBR(" c* J1 h: S" z6 S
(bn): BatchNorm2d(32, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)3 H4 v- q4 X: z& a6 x+ V# E
(act): ReLU(inplace=True)3 d# N( j- C+ k$ P, N5 F4 u6 @/ s: s
)$ \$ @% P1 Q5 s2 |* i2 g1 j, e
(2): GraphConvBR(
' t6 b6 d9 q3 ] (bn): BatchNorm2d(32, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
$ K# I( T5 y3 {% I+ A3 a# E (act): ReLU(inplace=True)
8 S9 U3 c) o7 R6 ~) w. p: | )# k! e7 [ _" w8 d
)3 c: ?9 {2 D' G' t4 n. A# o
(bn): BatchNorm2d(32, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)8 s3 {( ^+ m6 c/ k: ?2 h, v
(soft): Softmax(dim=-2)
* ]1 ] p! U. R1 } (relu): CELU(alpha=0.01)( z, Y& J2 j# L' r/ }/ e! \
(expanding_conv): Conv2d(32, 288, kernel_size=(1, 1), stride=(1, 1), bias=False)
( \) C% o" a9 R3 [8 G6 ~. Z (reduction_conv): Conv2d(96, 32, kernel_size=(1, 1), stride=(1, 1), bias=False)) ?% f0 b! G% ] e6 u/ |' D* X
)0 Q; v7 v7 R7 F2 |& o
)
- I9 D" V5 r/ u) @7 L (tcn): Sequential(- N1 g& G: m! t/ C2 i! V
(0): BatchNorm2d(32, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
1 x: c5 N& V- T (1): ReLU(inplace=True)
4 f! G: S& f. d# a! A B3 a7 ~ (2): Conv2d(32, 32, kernel_size=(9, 1), stride=(1, 1), padding=(4, 0))8 H: c6 \5 ~ t" D% X/ w& c% G
(3): BatchNorm2d(32, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)! S$ N5 m! S1 Z6 l/ m h
(4): Dropout(p=0.3, inplace=True)6 ]7 E8 D c7 X2 W7 X4 r( [
)+ \9 U" }0 \5 \/ l
), l5 t6 S3 R7 E% e4 Q$ E' ?" d
(2): ConvBlock(
. {6 u3 `- ?, X: s- b9 ~ (act): ReLU(inplace=True)' ]! }) d, W' J3 Q6 Y
(gcn): PyGeoConv(
" m. E) M- v5 k7 n (g_conv): SAGC(
+ e6 B( s4 R( x0 m1 J (conv_a): ModuleList(
' c X* A5 a/ u$ w8 e$ D4 q (0): Conv2d(32, 8, kernel_size=(1, 1), stride=(1, 1))
/ E- s" r8 \, Y$ d; w9 I (1): Conv2d(32, 8, kernel_size=(1, 1), stride=(1, 1))
" P: L; P& F6 U7 ]6 H7 Z (2): Conv2d(32, 8, kernel_size=(1, 1), stride=(1, 1)). ^! _' w& @# M- X' `: z
)
% y3 F$ @* j) M (conv_b): ModuleList(2 D# t' v! B+ m2 ]
(0): Conv2d(32, 8, kernel_size=(1, 1), stride=(1, 1))5 z0 @. [! n2 H: c2 p" S
(1): Conv2d(32, 8, kernel_size=(1, 1), stride=(1, 1))
- r. x1 p2 H Y (2): Conv2d(32, 8, kernel_size=(1, 1), stride=(1, 1))9 x; p! r, v/ E) Z1 q; X
)
* q7 J8 m, U2 V6 p$ z" \ (gconv): ModuleList(* N# D$ Q( ~) f1 `4 I
(0): GraphConvBR(
: `, Q; i" I$ C) A3 N (bn): BatchNorm2d(32, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
/ u2 \, B8 g7 \6 I, T+ n7 W/ A (act): ReLU(inplace=True)
. B' r, s& M+ w) Q; e )
! V4 b& n0 ^! l+ C7 T9 s0 e (1): GraphConvBR(
+ d6 [. B: a0 _( H (bn): BatchNorm2d(32, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
$ a% G( W2 e: L( Q' \) Z3 c (act): ReLU(inplace=True)
$ O5 z8 p# F) ]* \! z' M2 \1 l2 p/ Q )( n! @% [0 q8 c2 x: `' A, D
(2): GraphConvBR(2 w. V: {1 b6 X% _
(bn): BatchNorm2d(32, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
- r0 w1 s5 N4 H' J5 }$ K, @! O (act): ReLU(inplace=True)
2 z" G: E# j6 | Z B3 P+ x )
; E4 b* A( ~) X5 K1 m )
& ?: |. X. ^3 l7 J. j# E (bn): BatchNorm2d(32, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
* U+ {$ s1 z. A' Y( R7 J- T (soft): Softmax(dim=-2)" Z( ^; T1 i9 ?& B7 s
(relu): CELU(alpha=0.01)/ u6 m& }* {9 ^" p1 O* v% Y2 A" \6 R
(expanding_conv): Conv2d(32, 288, kernel_size=(1, 1), stride=(1, 1), bias=False)
$ L6 @- K% k5 w (reduction_conv): Conv2d(96, 32, kernel_size=(1, 1), stride=(1, 1), bias=False)* ~ {$ k' C4 X& i7 t T
)2 x- ^: S& j" X- Q, U8 U g' a6 R
)
: d: b" l# O: X% P' J( { (tcn): Sequential(3 ^7 n9 [; g4 d3 r
(0): BatchNorm2d(32, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)8 Z% ^( M7 ]1 w+ Q( E% p
(1): ReLU(inplace=True)9 ~; m, J/ c- Q8 }- F( D* w
(2): Conv2d(32, 32, kernel_size=(9, 1), stride=(2, 1), padding=(4, 0))
' ~1 f% c. Q' X& F (3): BatchNorm2d(32, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
1 B8 B1 }' ?& G: Q" } (4): Dropout(p=0.3, inplace=True)* }3 |1 L$ p; c, n9 {
)
' U+ k' v( }# s$ p7 M4 m (residual): Sequential(
& G) F- ~ }6 ~4 L c (0): Conv2d(32, 32, kernel_size=(1, 1), stride=(2, 1))
2 |& ` g" C) l, v; k (1): BatchNorm2d(32, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)6 {* y w, t+ ]* R0 ^* n5 s9 p) E
)
3 Z9 D3 c+ {8 ]% q: b )
6 A: R. H% {+ Y* a3 u1 _ (3): ConvBlock(6 _4 a- w8 C7 B
(act): ReLU(inplace=True)
! g1 F! |6 v: T* o (gcn): PyGeoConv(# }3 o6 ~! ~" Y! x4 D
(g_conv): SAGC(( ], T" K, u4 A
(conv_a): ModuleList(+ Y* t; ?6 X2 ^8 [
(0): Conv2d(32, 12, kernel_size=(1, 1), stride=(1, 1))2 \% Q. H, D; [$ ?
(1): Conv2d(32, 12, kernel_size=(1, 1), stride=(1, 1))
9 Y7 i2 P0 X9 ^- B (2): Conv2d(32, 12, kernel_size=(1, 1), stride=(1, 1))2 H+ K- i( f/ I& O# q
)
, V- A8 \5 G# ?7 W (conv_b): ModuleList(/ n5 \7 a0 u( x& G. B
(0): Conv2d(32, 12, kernel_size=(1, 1), stride=(1, 1))* I4 W _7 l7 t! _$ V+ s; t. b' i8 a
(1): Conv2d(32, 12, kernel_size=(1, 1), stride=(1, 1))- q4 ^: ?; y$ k3 Z4 O& g4 U
(2): Conv2d(32, 12, kernel_size=(1, 1), stride=(1, 1))1 X+ S3 g2 O; T6 a0 w
)- e0 s. f- x! [# e) y( q7 f
(gconv): ModuleList(
' k5 S# i: B. {4 M" I (0): GraphConvBR(
% R9 @% p0 Y" n2 \- m9 u (bn): BatchNorm2d(48, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
: \( g3 |- F4 X4 W9 `. @7 { (act): ReLU(inplace=True)
, B- J9 v* j6 D& G# o ); B7 [( Z& X2 a
(1): GraphConvBR(
6 `: V' C7 s; m! a2 ]9 Y# m (bn): BatchNorm2d(48, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
8 K6 i: l! U* H3 | (act): ReLU(inplace=True)
, r6 y7 ?/ w5 [* [ )
6 Y' ^$ r |' o& ?- B) y$ g/ Y (2): GraphConvBR( `+ e1 e: q2 S* O' t4 a6 s
(bn): BatchNorm2d(48, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
& l- ?: {8 r# C5 H2 _ (act): ReLU(inplace=True)
7 G$ c, W% W. v) x )
( ]% W9 u+ W' w3 ^ )+ I' @: X4 h) b, v
(down): Sequential(( X* N0 Q8 l1 l& D3 A
(0): Conv2d(32, 48, kernel_size=(1, 1), stride=(1, 1))5 m: r% ]3 o& C7 E9 j% p1 l
(1): BatchNorm2d(48, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
. J O5 j0 Y9 P$ l )
- P6 { H0 Y5 f( A (bn): BatchNorm2d(48, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)6 q r" q" \4 a
(soft): Softmax(dim=-2)
+ ~ l9 @, V& G k |/ T( d (relu): CELU(alpha=0.01)+ t1 x- z x# t
(expanding_conv): Conv2d(32, 432, kernel_size=(1, 1), stride=(1, 1), bias=False)0 b. l( j0 u9 P! s. l
(reduction_conv): Conv2d(144, 48, kernel_size=(1, 1), stride=(1, 1), bias=False)
" V9 K. B9 W, i$ a0 E4 `* J )0 t `! E5 Z+ H# ?- z2 b
)) h7 c7 u/ s9 z6 g' i: d( P
(tcn): Sequential(, P* F! j( R4 A/ `
(0): BatchNorm2d(48, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
5 C! \/ a9 i% R1 [# e9 V- v8 C (1): ReLU(inplace=True)
3 w" ]) b4 ?; e (2): Conv2d(48, 48, kernel_size=(9, 1), stride=(1, 1), padding=(4, 0))- J d9 R; {7 Z& Y0 L2 d5 R
(3): BatchNorm2d(48, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
- o. r5 u* x" u2 a ]5 s (4): Dropout(p=0.3, inplace=True)
8 I9 O( s! r9 B' s2 E1 m. @ ); F8 B0 q9 M; \1 W
(residual): Sequential(3 i, n7 A+ E/ m: l
(0): Conv2d(32, 48, kernel_size=(1, 1), stride=(1, 1))8 E4 _( \& B& a+ j& z+ m1 ^0 K
(1): BatchNorm2d(48, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
F7 I3 ]- n/ M1 ]$ i9 y/ d )& }7 p' i, q9 E+ F+ G% [& G
)
+ I; n- l; q0 g9 W; H" J9 Z (4): ConvBlock(( n4 W3 N6 q3 O+ k( R, r, T
(act): ReLU(inplace=True)
: \4 T4 b0 f$ \ i) o6 R# H (gcn): PyGeoConv(- g; F; A$ ?1 q9 M; m0 _7 B9 [
(g_conv): SAGC(
# l" c0 b' ]1 B' ]2 ~1 k, o (conv_a): ModuleList(- Y$ j& m! y4 P7 T
(0): Conv2d(48, 12, kernel_size=(1, 1), stride=(1, 1))
6 u V( ?0 _3 @5 B; L* }$ K (1): Conv2d(48, 12, kernel_size=(1, 1), stride=(1, 1))# W- ^3 l9 M9 k9 C; A
(2): Conv2d(48, 12, kernel_size=(1, 1), stride=(1, 1))9 H* u \+ T8 k- G; r8 Q. I
)
$ @$ K" g1 Q* [5 ^ (conv_b): ModuleList(! c, p; p6 `# C6 v e2 n+ h
(0): Conv2d(48, 12, kernel_size=(1, 1), stride=(1, 1))
! Y2 k* c+ C8 c: H; I/ v) V# g (1): Conv2d(48, 12, kernel_size=(1, 1), stride=(1, 1)). @; [8 b0 \ h) H( |9 }
(2): Conv2d(48, 12, kernel_size=(1, 1), stride=(1, 1))" f7 ^, k! M. Z& m2 g; i
)
- B% S( a. B& n2 t% D9 ^ (gconv): ModuleList(0 D% U( Z. R0 L H
(0): GraphConvBR(
h# {/ ~( e! p0 l) W5 Z6 }# F (bn): BatchNorm2d(48, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
q& e e" I0 T- [! G: _6 w6 ]& w+ a (act): ReLU(inplace=True)8 E4 L! s3 O, q0 S
)
" ]3 y% f% ?+ o" D7 j; V (1): GraphConvBR(2 T6 b3 e7 }6 V8 m2 l8 P t
(bn): BatchNorm2d(48, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)3 S( T4 M2 Z; n, Q
(act): ReLU(inplace=True). c4 C. w# w& T* C
)
; r9 x7 z! j3 B' e, j; k (2): GraphConvBR(+ W V% ^% S% m- I
(bn): BatchNorm2d(48, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
/ }1 Q6 V0 k& E$ k6 v (act): ReLU(inplace=True)$ q& [$ q: Q. A: I
), t: s- `" N' t' O, [" g
)
5 t8 j3 H4 Z+ |6 r (bn): BatchNorm2d(48, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
" ?2 H) y2 M; q' |4 X* t (soft): Softmax(dim=-2) \, y+ }, ]8 _8 I3 D5 p# T) I; U6 O
(relu): CELU(alpha=0.01)2 x2 \# O! Y2 V5 d& ~) ~
(expanding_conv): Conv2d(48, 432, kernel_size=(1, 1), stride=(1, 1), bias=False)
% e5 ]) g' v$ X4 B (reduction_conv): Conv2d(144, 48, kernel_size=(1, 1), stride=(1, 1), bias=False)9 _/ v- K k8 H6 h! \
)
/ Z! \" z3 F _$ z: I# t ), M5 Z; R3 Q! l( }' ]) F
(tcn): Sequential(
+ e- J1 Z+ T1 l5 e+ d& {2 A (0): BatchNorm2d(48, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True): F% C4 N4 C4 Y) [
(1): ReLU(inplace=True)7 ^0 o8 {4 {, f, F3 r* E7 |
(2): Conv2d(48, 48, kernel_size=(9, 1), stride=(1, 1), padding=(4, 0))8 X* n* g3 {# `, w( M# A) h8 N
(3): BatchNorm2d(48, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
0 }! s4 c* s8 m& m1 d4 a' h$ T (4): Dropout(p=0.3, inplace=True)
4 I- h( A% x3 L3 h6 G9 u" j/ Q )
- k+ i: i ]7 ~* x% z& \6 g )$ _' h4 V+ }7 ^
(5): ConvBlock(# p( E: U: L$ ~5 _1 r$ d( J3 r
(act): ReLU(inplace=True)
1 s- J$ ?' P! X (gcn): PyGeoConv(
- @+ I& G- d& C. ` (g_conv): SAGC(' V: Q) P5 v1 ?0 Q& S
(conv_a): ModuleList(
6 U+ z/ C- a3 C% W (0): Conv2d(48, 12, kernel_size=(1, 1), stride=(1, 1))
+ P( W3 r) G6 T" z2 u% B (1): Conv2d(48, 12, kernel_size=(1, 1), stride=(1, 1))
) ^0 i2 g2 S& V+ L* D; g+ ? (2): Conv2d(48, 12, kernel_size=(1, 1), stride=(1, 1))
8 [0 m1 d# W, X( X) R )
% H @4 b3 H* Z% T U (conv_b): ModuleList(
2 E4 U* C% @6 J (0): Conv2d(48, 12, kernel_size=(1, 1), stride=(1, 1))
1 a9 O5 X& ]+ Z" U% `4 Z (1): Conv2d(48, 12, kernel_size=(1, 1), stride=(1, 1)) x( [) K0 H; B8 W
(2): Conv2d(48, 12, kernel_size=(1, 1), stride=(1, 1)) n& X4 D! f; D9 P. |
)5 B" ]: W4 X$ R6 W" z
(gconv): ModuleList() w+ ~2 k" d! i
(0): GraphConvBR(
, {3 n. f+ |: u, U7 | (bn): BatchNorm2d(48, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
1 r' V; @' G: F) y0 ^ (act): ReLU(inplace=True)
, t5 g* _% i9 a" |: h/ V3 C )
9 [( v! e* Z9 S3 G3 f6 S+ Y* }3 v (1): GraphConvBR(
4 t- ?# [2 V @ B$ d (bn): BatchNorm2d(48, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)& Z, a8 g6 m* r, L
(act): ReLU(inplace=True)
& z# ?1 G( ~+ Z )9 `+ C0 G6 M9 g: O+ L
(2): GraphConvBR(
) O4 z8 W; L6 ?; _2 B. @ (bn): BatchNorm2d(48, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
1 r8 F$ G7 b* T9 {" ^; W (act): ReLU(inplace=True)
, E: t5 Y/ K8 a6 y* l ). ?6 @$ E @6 e( t
)8 }7 F9 p3 M% ^7 f% O% S
(bn): BatchNorm2d(48, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
! D% n' |+ h4 Z (soft): Softmax(dim=-2)
' X- } C* U7 \) h) t (relu): CELU(alpha=0.01)& p! D( J$ g4 V: w
(expanding_conv): Conv2d(48, 432, kernel_size=(1, 1), stride=(1, 1), bias=False)
; ?2 v0 c: P% D, J/ k" J" Q8 P4 `# ] (reduction_conv): Conv2d(144, 48, kernel_size=(1, 1), stride=(1, 1), bias=False)5 W3 c( h! B- O) R% }( @
)1 f7 \9 l5 n$ D
)6 V3 q b7 @0 C; q) T
(tcn): Sequential(
$ }. L- S% h3 r8 L. q (0): BatchNorm2d(48, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
k7 _. g5 Y ~* k (1): ReLU(inplace=True). B2 S9 e- C _$ s& C, C1 Q8 \
(2): Conv2d(48, 48, kernel_size=(9, 1), stride=(3, 1), padding=(4, 0))
6 a) M6 P- ~8 I* @, g( n" { (3): BatchNorm2d(48, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
$ u: s4 p+ U9 E# g (4): Dropout(p=0.3, inplace=True)' ~3 V8 t: k$ ~1 ]0 I9 A* G4 ?8 `
) J& ]. T; S* L$ k2 V4 k
(residual): Sequential(* k0 J; O ^7 Q7 s% X( c' e! {
(0): Conv2d(48, 48, kernel_size=(1, 1), stride=(3, 1))
3 y) E; \( n0 ~) V (1): BatchNorm2d(48, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)5 y8 r6 w8 I" g* A
)6 \. t: e& I* f$ c
)
2 f1 T/ a( ~5 f" s- J' m: R9 u, x (6): ConvBlock(# ~ H9 w) Y9 d
(act): ReLU(inplace=True)+ U; Q. r& N" _5 r# H ]- ^$ {
(gcn): PyGeoConv(; @; O+ U3 d$ ^; V0 _
(g_conv): SAGC(
# F& T& G" Q! |& o0 P! }: K, } (conv_a): ModuleList(
7 Y1 f$ V2 h0 r* }( F; o1 o. w5 R (0): Conv2d(48, 16, kernel_size=(1, 1), stride=(1, 1))# ]1 n! M7 x6 J) H0 D
(1): Conv2d(48, 16, kernel_size=(1, 1), stride=(1, 1))
, t/ H2 J- M. f0 A. a (2): Conv2d(48, 16, kernel_size=(1, 1), stride=(1, 1))
0 p2 ?3 d( ?5 K2 B9 X) x )' M4 H( E1 Z; [! _! A! f
(conv_b): ModuleList(
- q% k- F* ]) X6 O$ ]" l7 ^' K (0): Conv2d(48, 16, kernel_size=(1, 1), stride=(1, 1))8 O6 G4 ]: j. S P3 l' v6 a }
(1): Conv2d(48, 16, kernel_size=(1, 1), stride=(1, 1))
2 O( h' w' t0 o (2): Conv2d(48, 16, kernel_size=(1, 1), stride=(1, 1))1 x3 z3 q+ U1 H% e" t& t/ H V
)/ g, K, y' w; S& `
(gconv): ModuleList(4 i" m3 f4 R( [8 n* A
(0): GraphConvBR(
8 X# B; h4 ]% y (bn): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)! ]+ b! `( z1 Y3 r2 l, h e3 x* }9 s- u
(act): ReLU(inplace=True)7 L, T; o9 o( D7 {8 l1 W& B
)
& `3 M: F) v% W) z0 f (1): GraphConvBR(# z: R' t) m' C
(bn): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
# O) n- i7 k5 O% A: \4 X e( S j (act): ReLU(inplace=True) ^ ?( {1 X" V; V! x2 p. N
), F3 l2 [) a- g) z( b& p6 T% J8 v+ ]
(2): GraphConvBR(
! M& t6 `; N; K& |6 h( N; \2 r (bn): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True): H+ V5 D: X4 S) Q0 R8 `1 y' _
(act): ReLU(inplace=True)' h. o% U4 W* b+ W- ~. I& m* s$ C
)4 C) K0 G4 S6 k6 a, C# ~
)
9 L$ I( [/ k2 l, [: v0 f/ e (down): Sequential(3 W, ^5 ~4 J+ r& h7 j3 C6 X F
(0): Conv2d(48, 64, kernel_size=(1, 1), stride=(1, 1))
* V p8 \9 }. X7 t2 x6 b (1): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
1 w& Y. [" e, J; P9 Q7 O' G )+ k1 n# S5 j) R6 I V
(bn): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
9 Z g' i# w! y! x8 p* E5 F (soft): Softmax(dim=-2)& @' H: n: k+ i; \! @3 P
(relu): CELU(alpha=0.01)3 E* f4 V/ ~, |; ^& Y
(expanding_conv): Conv2d(48, 576, kernel_size=(1, 1), stride=(1, 1), bias=False)
: h. ~9 I& j" \" Z' o1 \ (reduction_conv): Conv2d(192, 64, kernel_size=(1, 1), stride=(1, 1), bias=False)
. F) x9 x1 H! g$ t )9 r8 o* {6 S9 X& I
)
' A$ E3 z) ` ^6 q$ m+ Q' T# E1 Y! m (tcn): Sequential(
3 B# [, E1 F& o1 E8 T (0): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
8 S; e t' k: S1 f" }) C (1): ReLU(inplace=True)- B8 @* Z8 \% k- b
(2): Conv2d(64, 64, kernel_size=(9, 1), stride=(1, 1), padding=(4, 0))" L4 {7 z. b, V6 G7 G/ ~: M* C% y2 F
(3): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
C7 y( K, ]9 t) e# X (4): Dropout(p=0.3, inplace=True)- Z9 c7 ]6 ]: I9 p# V
)
7 r& P* }- T }! \% o- M$ H( |! L4 Z (residual): Sequential(9 \; O. c- z9 }3 a
(0): Conv2d(48, 64, kernel_size=(1, 1), stride=(1, 1))/ [6 A& l) k) U& \
(1): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)- v O# p6 o& \' K: Q
)+ d- D+ |2 s4 N+ g3 T9 Q
)1 `# u S$ D" p
(7): ConvBlock(; R" N6 h) v) b2 D* J& F( T
(act): ReLU(inplace=True)) k' F$ X" }% r& P8 c
(gcn): PyGeoConv() H- ~9 m3 W3 S; P( w2 R3 p7 m
(g_conv): SAGC(2 z, q( ?9 R9 d8 f2 I S
(conv_a): ModuleList(, h3 a$ a# r# y0 j1 {6 x
(0): Conv2d(64, 16, kernel_size=(1, 1), stride=(1, 1))
* V* f8 f5 V/ o (1): Conv2d(64, 16, kernel_size=(1, 1), stride=(1, 1))
! Z" h1 o1 H+ ]/ t% s& A (2): Conv2d(64, 16, kernel_size=(1, 1), stride=(1, 1))
3 i! x4 w7 \: i; g' E( x0 F9 L+ }; r )
5 x' N" |0 {1 @1 k& t* g+ \7 @" h- X (conv_b): ModuleList(
E" n% k* {, l/ t9 ]1 g, x0 T* B (0): Conv2d(64, 16, kernel_size=(1, 1), stride=(1, 1))" d: ^, @7 q& Z2 v! Y
(1): Conv2d(64, 16, kernel_size=(1, 1), stride=(1, 1))
. V* l5 g4 ~# q0 K5 ]; T+ D% J- N (2): Conv2d(64, 16, kernel_size=(1, 1), stride=(1, 1))) Q; {) }+ U; P7 z9 @! l
)
& K% S: h* Z* ~& Y3 X+ R4 p (gconv): ModuleList(' ^0 k! A5 i( m
(0): GraphConvBR(
# y# x7 d0 W$ |. \' G (bn): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)3 ?8 R. E$ ^: `: r
(act): ReLU(inplace=True)
3 d! j1 o% f1 Y, ^! w5 ? |, b )
2 A% r2 T' R" L (1): GraphConvBR(
2 ]' q7 D: \8 ^; g1 a2 k" T6 n (bn): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)% h- f5 m# C. A( _: n% y% r
(act): ReLU(inplace=True)1 c; Q* u4 F+ i& k
)
5 a5 I. ]) t9 F1 t7 J& ]& D6 T (2): GraphConvBR(2 j2 w* Y i, e
(bn): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)) S! E: T$ n+ {! V; a# |$ V
(act): ReLU(inplace=True)
* F! F* C- K3 ?2 Y& h X; k )
; V, Q$ b9 f/ e& X )8 B! r1 \" ]- u( Z8 Z8 z0 e8 G
(bn): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)! t% Z% S0 W' t( W# n
(soft): Softmax(dim=-2)% @- y* q9 N$ I- L8 T. ?1 B# _2 F
(relu): CELU(alpha=0.01)& v7 c- {$ `/ _( c; {" S" a- g
(expanding_conv): Conv2d(64, 576, kernel_size=(1, 1), stride=(1, 1), bias=False)4 y. s/ ~, Y. B# m% [0 D0 ^
(reduction_conv): Conv2d(192, 64, kernel_size=(1, 1), stride=(1, 1), bias=False)
# J9 k7 t: O- v1 f, @( p2 `9 n& j )
" L2 a+ w# j, z )
- P: u2 ~; y; l8 g1 f (tcn): Sequential(
C3 c5 @- R. J& x2 D (0): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
; Y* r* o( y) }0 P" O& y0 R (1): ReLU(inplace=True); ?: j0 y5 r( a6 z% l6 [; C
(2): Conv2d(64, 64, kernel_size=(9, 1), stride=(1, 1), padding=(4, 0))" O* M+ ~( K8 `! a2 j6 v
(3): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
) [* t9 @- V# s g# p (4): Dropout(p=0.3, inplace=True)
" k# y' h& ^2 c& g3 G )+ H2 l1 E0 f: j3 }8 y2 G4 ?, @' \
)
; Q% k! E" q; N& w( ]/ C+ \ (8): ConvBlock(
8 q( \$ y4 o6 S3 Q4 `% F* T (act): ReLU(inplace=True)$ z9 B+ h$ r7 o, \; O
(gcn): PyGeoConv(
8 v* x) S8 j# A4 k (g_conv): SAGC(
$ _$ O9 ^: u9 S( Q4 Y (conv_a): ModuleList() ]& P) k7 E6 `9 i: v
(0): Conv2d(64, 8, kernel_size=(1, 1), stride=(1, 1))
" S- q9 x- |9 O0 R, c+ |4 @ (1): Conv2d(64, 8, kernel_size=(1, 1), stride=(1, 1))
9 q& I4 K6 f' o8 i L- F7 { (2): Conv2d(64, 8, kernel_size=(1, 1), stride=(1, 1))
! c7 Z6 c& M2 G# K )
/ e; i0 w+ R' k' c+ Q (conv_b): ModuleList(
% c6 W2 Q! P/ ~* R6 H; X (0): Conv2d(64, 8, kernel_size=(1, 1), stride=(1, 1))# n- u, h9 ` m$ W# Z- }
(1): Conv2d(64, 8, kernel_size=(1, 1), stride=(1, 1))
) y! `3 v5 A1 F Y (2): Conv2d(64, 8, kernel_size=(1, 1), stride=(1, 1))3 W0 }0 j4 n/ a2 J
)
# k$ n r; X$ i9 d0 C (gconv): ModuleList(4 j- f5 E- B3 S7 j
(0): GraphConvBR(
& m& W. B& E9 T) A8 f; t (bn): BatchNorm2d(32, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)1 r% i* l; ^! R: _# J
(act): ReLU(inplace=True); f' f* g/ }9 ^# v
); r3 j- S4 T5 r
(1): GraphConvBR(
' f0 B% E/ V9 k* b" M& _& ]( F' o (bn): BatchNorm2d(32, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
; ]. \+ A- Z5 |- G! W: N (act): ReLU(inplace=True)1 `0 s: d$ S# U. H. D, ?: [
)3 Y7 O( E( H* C& |$ \& z
(2): GraphConvBR(
! n ]% h7 Y- Q# ^$ v (bn): BatchNorm2d(32, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)0 R& R, d& p+ O+ i3 M- q
(act): ReLU(inplace=True)5 ^2 r( w) {! q9 d7 E9 a
)
/ d N, O5 X8 q0 A )
+ ^( \; ^6 e8 R7 C+ b* s (down): Sequential(, z4 j. |, v+ t: ]" a/ H0 C5 A, k" b
(0): Conv2d(64, 32, kernel_size=(1, 1), stride=(1, 1))* B) E. @( x6 @( d9 \1 }$ q
(1): BatchNorm2d(32, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)4 D/ Q' I& K& S( J8 a7 H. B! N
)
0 K p* M6 b* u2 a (bn): BatchNorm2d(32, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True) z$ g* S- y# ^: l
(soft): Softmax(dim=-2)
% r! H9 U8 B; W# J7 a k4 D; G (relu): CELU(alpha=0.01)
/ f6 ?# `" \3 n" z" g m (expanding_conv): Conv2d(64, 288, kernel_size=(1, 1), stride=(1, 1), bias=False)
% `/ j- T" S8 W1 D (reduction_conv): Conv2d(96, 32, kernel_size=(1, 1), stride=(1, 1), bias=False)
5 u* _3 M5 P3 b$ u( m6 O )
5 X6 O) W& c1 t- n# r/ u% ? )" A) j0 L! U/ K
(tcn): Sequential(
t5 [3 _/ C( [ B0 b9 W* h+ T0 B (0): BatchNorm2d(32, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True) P2 n' J' P4 I
(1): ReLU(inplace=True)
, o' I: s6 F# R3 X. D (2): Conv2d(32, 32, kernel_size=(9, 1), stride=(1, 1), padding=(4, 0))6 {3 w$ c D5 J( ^' n4 q% d# d
(3): BatchNorm2d(32, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)+ F% R1 h6 l. W/ O- O
(4): Dropout(p=0.3, inplace=True)
% X8 B6 ?3 p1 o) Z) p0 n9 x )* i# Y" {) Z7 x8 I: {
(residual): Sequential(+ G% L( o2 x. h4 x* z2 k, |9 A
(0): Conv2d(64, 32, kernel_size=(1, 1), stride=(1, 1))2 |+ n* p. ?& K( D
(1): BatchNorm2d(32, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
* C5 r; q/ J4 N& {$ C )
( e" {2 i* X4 J/ C! P, v4 v: a2 o! m )
( M3 L( k% l, p( ?1 |5 ^$ j* K )
0 `4 d% _% D2 R5 ^, S# k( W (dec_final_gcn): ConvBlock(
6 o& y0 ?5 v+ z; K3 L7 ? (act): ReLU(inplace=True)
, ^ |) M$ F% K& R" @: e* ] (gcn): PyGeoConv(
3 ]% H6 }% b! {, n9 \ (g_conv): ConvTemporalGraphical(+ n$ {% t$ G& ?
(conv): Conv2d(48, 9, kernel_size=(1, 1), stride=(1, 1))" I" l0 o: x8 h$ i2 X% v5 o2 S
)
6 n& i9 t/ |4 ^/ i ): u" f, b, o2 f1 u
(tcn): Sequential(7 C( m- S: d# M/ G# m |& F1 s# O
(0): BatchNorm2d(3, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
+ x ~, r% Q3 W4 g. |; r (1): ReLU(inplace=True)
/ C7 P" Q8 U7 ^' H: f+ k (2): Conv2d(3, 3, kernel_size=(9, 1), stride=(1, 1), padding=(4, 0))
5 @2 ], ^4 u; a" E8 l" S' H (3): Identity()
$ l$ m; e( @( ^6 H (4): Dropout(p=0.3, inplace=True)" V9 U# a. S2 i1 s" c
)
5 {' Q2 ^ l0 l8 b/ i, B/ y- Q )
" i% z+ O r( V/ g [ (st_gcn_dec): ModuleList(
7 O) i I3 }9 o (0): Upsample(scale_factor=(3.0, 1.0), mode=bilinear)
& r8 k/ a4 @. X; T (1): ConvBlock(7 o4 D" ^; U1 ^
(act): ReLU(inplace=True)
* f0 ?+ k* x3 g' w+ X5 w (gcn): PyGeoConv(9 h' G7 u6 W0 g! w8 f( a; G
(g_conv): SAGC(
7 h; z# B! m( R% S# g (conv_a): ModuleList(% `3 u. V! @3 _+ \0 m# W* \% {, X
(0): Conv2d(32, 16, kernel_size=(1, 1), stride=(1, 1))4 w/ G: L/ O3 o9 A( ]' F3 { {2 H* M
(1): Conv2d(32, 16, kernel_size=(1, 1), stride=(1, 1))
% y2 P8 Q0 D) }) h2 ?, ^1 j (2): Conv2d(32, 16, kernel_size=(1, 1), stride=(1, 1))8 }2 e4 v$ g1 s8 Y
)3 q# ?9 E: Z7 z7 Y2 m
(conv_b): ModuleList(
, j* u A v8 G; R- C (0): Conv2d(32, 16, kernel_size=(1, 1), stride=(1, 1))
, {" c3 c% F, |5 }! z: F8 w (1): Conv2d(32, 16, kernel_size=(1, 1), stride=(1, 1))5 K( @! \5 ]* T, M! {6 L S4 Q
(2): Conv2d(32, 16, kernel_size=(1, 1), stride=(1, 1))
+ R, C1 K; }7 X' a )1 j7 e4 b' m7 B0 Y4 [) E
(gconv): ModuleList(- i8 W) b3 z" M* i
(0): GraphConvBR(; i" t$ X) O k) X
(bn): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)0 c# k$ s( ~0 f5 |. e+ \; M R& [) P
(act): ReLU(inplace=True)6 F( ~) d' [1 r2 Q3 \
)
9 e9 q- V+ a0 A2 q2 @, P! K (1): GraphConvBR(
6 v- \$ M* D; P5 Q. n; q (bn): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
3 e& Q+ X! L8 \/ j (act): ReLU(inplace=True)
) ^ H f' Q$ L )* G" P9 X+ Z6 W) e- `$ k" k
(2): GraphConvBR(
" i1 Q. P9 s# y: Q" M (bn): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
9 N* ~$ P- x2 Z" Z& |5 ~- Z (act): ReLU(inplace=True)& c# ~; V0 j5 I5 y1 V/ p" I6 u
)/ Y% Z x4 x; s+ D% W
)
: A6 t( ^& k) ~2 ~ (down): Sequential(
- Q( v- Q7 x% e+ J" @8 F (0): Conv2d(32, 64, kernel_size=(1, 1), stride=(1, 1))
1 Q1 j, v( O) Q; V: w# M" i (1): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
1 Z( h+ H: P" P+ p; R$ K ): `- k/ N( g# w. J
(bn): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
7 J8 |% {$ E: p! O (soft): Softmax(dim=-2)
- ]7 o# J* ?" M+ I2 m (relu): CELU(alpha=0.01)
. ^+ V9 o7 p# v% M# G' y" m# y* @ (expanding_conv): Conv2d(32, 576, kernel_size=(1, 1), stride=(1, 1), bias=False)/ T. W% k; y: m3 S" U
(reduction_conv): Conv2d(192, 64, kernel_size=(1, 1), stride=(1, 1), bias=False); v( S8 e8 ^& c( C9 L0 b
)
1 B/ W6 v# g2 u( } )
: X1 g- N, v6 v0 U (tcn): Sequential(
9 J; ^# ?! F {- Q- u* E2 w' k (0): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
. k' L4 r) B& ] s6 o (1): ReLU(inplace=True)
+ R' W: O9 E. p (2): Conv2d(64, 64, kernel_size=(9, 1), stride=(1, 1), padding=(4, 0))
6 g5 m, F/ L5 q1 Q/ J (3): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)! W9 c( i, }+ v2 v( E! V6 n
(4): Dropout(p=0, inplace=True)
! }, I$ c0 |6 \9 O5 H: s' K$ |$ g )
; ~1 C+ X+ ^; ^+ z7 V9 n (residual): Sequential(
0 R4 P- w5 l( F Y2 |; l (0): Conv2d(32, 64, kernel_size=(1, 1), stride=(1, 1))/ m8 Z' u! E6 P. d
(1): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)# O/ D, `/ Z2 g+ P/ b
)
+ n8 Q% y% X+ ~( s3 f6 d& } )7 \. c( ]3 c- u' `. |
(2): ConvBlock(
4 B( i+ d+ u. ^2 o; j (act): ReLU(inplace=True)4 i0 _9 s0 g. `
(gcn): PyGeoConv(
6 w! f6 V' o* K, O (g_conv): SAGC(
3 P& Y! u3 K- r/ U1 [0 o (conv_a): ModuleList(- F2 ^9 B. \4 w/ a
(0): Conv2d(64, 16, kernel_size=(1, 1), stride=(1, 1))4 q! w1 p: _, j! m# \ \
(1): Conv2d(64, 16, kernel_size=(1, 1), stride=(1, 1))
+ n0 U% Z; _" X, t, A3 E/ O% M0 \ (2): Conv2d(64, 16, kernel_size=(1, 1), stride=(1, 1))# f8 d% X, V% B. o' _
)9 q$ x& o. X$ L1 ~: |
(conv_b): ModuleList(3 D, H- m h p/ m- }
(0): Conv2d(64, 16, kernel_size=(1, 1), stride=(1, 1))
. y8 v1 B% `/ W (1): Conv2d(64, 16, kernel_size=(1, 1), stride=(1, 1))
9 w1 U; r6 _+ N o* S/ s" _ (2): Conv2d(64, 16, kernel_size=(1, 1), stride=(1, 1))+ A F! j/ t" ?. e
)6 w+ O" @3 J6 w8 a' M- u3 {
(gconv): ModuleList(' D, c7 j" }; V
(0): GraphConvBR(4 e. \ P* r& r# C- d, \. D
(bn): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)1 P9 d4 E. S0 K; V* O9 z8 z
(act): ReLU(inplace=True)
! D8 l# M! w+ O: o4 e- r )
# K u% k l+ a5 X% M+ _2 ` (1): GraphConvBR(6 `8 t5 [% Q6 S2 h) ]7 m9 l2 r
(bn): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
) S2 a+ B. C+ q& o* V (act): ReLU(inplace=True)
3 x, ^& O j. _" p8 J) E )6 d: ]9 m; a8 K) Q6 o# `1 D
(2): GraphConvBR(% [8 ^! O4 J/ O& q, L& C% U$ Q9 N( j
(bn): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
. R! a+ F( ]* W0 Z (act): ReLU(inplace=True)
- g& |- g; m' r )
5 u( K9 ~; _( o% V8 R )5 l3 P! T w7 b. ], @
(bn): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True), I% m/ b. F+ G+ M0 }2 r$ y5 W4 f; G
(soft): Softmax(dim=-2)
/ n. S9 P( C+ q (relu): CELU(alpha=0.01)$ B8 r6 G0 }2 Z" m! j
(expanding_conv): Conv2d(64, 576, kernel_size=(1, 1), stride=(1, 1), bias=False); }, r9 M* _2 G, B3 B& S
(reduction_conv): Conv2d(192, 64, kernel_size=(1, 1), stride=(1, 1), bias=False)$ o2 e4 R6 p: j8 c8 Z4 K3 c5 d
), S" c6 d" l0 S5 B6 W0 C
)) M5 u- w9 f9 Q1 F/ w2 P
(tcn): Sequential(
5 b: v4 t: u( X* o# W1 c0 M8 P( S; J (0): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)- t! v7 m$ g% T1 `+ g0 q
(1): ReLU(inplace=True)
$ G) [ F0 h7 m: w* M! _ (2): Conv2d(64, 64, kernel_size=(9, 1), stride=(1, 1), padding=(4, 0))
; g/ F5 `" g; p% M8 d# G) N, V (3): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True); B$ n) F% \& }/ j' f M5 P
(4): Dropout(p=0, inplace=True)6 o5 f: b8 u' y# X1 P
)
+ W. ^4 S; Y- S$ A9 I3 ^ u) Q$ e )
" @, s& E. t9 B' }9 Z" i (3): ConvBlock(
/ w9 o6 R* H/ P- o1 T+ i, t (act): ReLU(inplace=True); |) p4 I/ s; a6 X$ N& F |
(gcn): PyGeoConv(5 j8 N. e% k$ O1 M
(g_conv): SAGC(1 ?& l% ~: j% ^$ \
(conv_a): ModuleList(
. j! y: g. f. v0 O; K* } (0): Conv2d(64, 12, kernel_size=(1, 1), stride=(1, 1))" V" Q0 u4 {( h4 J2 Y9 `3 b2 h. ]" U
(1): Conv2d(64, 12, kernel_size=(1, 1), stride=(1, 1))
0 E# Q3 ^9 |* V4 J1 o (2): Conv2d(64, 12, kernel_size=(1, 1), stride=(1, 1))' W# B8 G z) o* E6 q$ k8 s
)
8 B4 z9 t7 o5 p6 z/ t, }9 R! W1 v- Q (conv_b): ModuleList(
, O. k, ? @! k (0): Conv2d(64, 12, kernel_size=(1, 1), stride=(1, 1))! c1 q; D" Q5 C! L2 M0 x d8 Y
(1): Conv2d(64, 12, kernel_size=(1, 1), stride=(1, 1))
: b( T5 N% G. e2 p) h (2): Conv2d(64, 12, kernel_size=(1, 1), stride=(1, 1))0 ^' {5 r8 O+ G6 F3 B
)+ @% D8 ^5 z1 T9 i. h
(gconv): ModuleList(
1 n' O( x' b7 P6 J1 Z6 S; e0 j8 M (0): GraphConvBR(+ b/ j2 Q8 s9 @' j. m5 _8 `3 w; r0 v
(bn): BatchNorm2d(48, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
! N& [) q* h' f; a. d! o+ ` (act): ReLU(inplace=True)
" M( r: f4 Z g3 R )* b8 i" H1 n' K8 u9 @/ k
(1): GraphConvBR(. G, t( Y' R1 y
(bn): BatchNorm2d(48, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)2 p! ?$ w0 V% {* r9 v) K/ u9 R F
(act): ReLU(inplace=True)
2 }% }- h# P- h& v7 G2 Q- Q )0 ]4 j ^9 p7 ], d8 e1 h
(2): GraphConvBR(' U( S" ~( j! a4 T7 X+ H: h
(bn): BatchNorm2d(48, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)* k G3 U) C7 o/ O- n/ C7 e5 C
(act): ReLU(inplace=True)7 ]" c: s: L" l1 l3 \* S
)
5 b: a7 w# ]9 r1 Q1 q* m )
7 u. O& z2 n; p% } (down): Sequential(7 Q3 v! F# ]6 b' t
(0): Conv2d(64, 48, kernel_size=(1, 1), stride=(1, 1))! H* Y7 D) T; {" ^
(1): BatchNorm2d(48, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
+ T- r& L* C- f0 ] )
4 Q8 K9 q7 H8 S! q' B8 E4 L (bn): BatchNorm2d(48, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
, r2 L1 z6 K# V, |7 y4 l (soft): Softmax(dim=-2)
7 @' `% m! W5 D2 I( f (relu): CELU(alpha=0.01)) t5 V4 S4 q3 o' D! Z
(expanding_conv): Conv2d(64, 432, kernel_size=(1, 1), stride=(1, 1), bias=False) w% [/ g- M; k) U
(reduction_conv): Conv2d(144, 48, kernel_size=(1, 1), stride=(1, 1), bias=False)3 Z8 L$ I1 k9 L+ {( U
)4 M6 w. S7 `" f( A: o
)- B Y% W- o3 Z: n) O
(tcn): Sequential(
8 S2 a6 n6 v% e1 y (0): BatchNorm2d(48, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
" A/ [. ~ u/ ^6 m (1): ReLU(inplace=True)1 Q( n8 E8 N, L/ D. v
(2): Conv2d(48, 48, kernel_size=(9, 1), stride=(1, 1), padding=(4, 0))
* X, e* q! a+ ?# A& N (3): BatchNorm2d(48, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)+ k! i8 G8 F- v
(4): Dropout(p=0, inplace=True)1 }+ n s' A0 y* Q2 E: ?) _. z
)
, k8 E0 [% Y- {! q (residual): Sequential(! d/ ]+ r- ~4 Q; S; t9 b5 B
(0): Conv2d(64, 48, kernel_size=(1, 1), stride=(1, 1))
, b, A* f9 b/ E2 M% O% s (1): BatchNorm2d(48, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
2 K, [9 T) v# O )
8 ^' M% V- d0 |% O. ^: e )
8 ?& h2 t* ~$ X) `) P (4): Upsample(scale_factor=(2.0, 1.0), mode=bilinear)
) Y7 |# W* f8 V3 [ m1 g (5): ConvBlock(8 M2 v3 W6 s) w# j6 V' u. t
(act): ReLU(inplace=True)/ d3 d% e3 C% G9 F" n
(gcn): PyGeoConv() l# q1 F0 z2 r, r H
(g_conv): SAGC(
3 Q7 j, w9 L2 f# ^2 |+ }0 c( D (conv_a): ModuleList(+ F% W8 t8 _9 S& a* V& Z' m
(0): Conv2d(48, 12, kernel_size=(1, 1), stride=(1, 1))) f* ], V& `4 b9 V( c
(1): Conv2d(48, 12, kernel_size=(1, 1), stride=(1, 1))' j" e, t4 L% f* e
(2): Conv2d(48, 12, kernel_size=(1, 1), stride=(1, 1))
$ m( y: u8 ?* }$ n1 l, ^) ?- u ), k. _7 G2 N* b8 M k0 e
(conv_b): ModuleList(7 _5 X3 P# `. `$ J+ Z( \0 Q
(0): Conv2d(48, 12, kernel_size=(1, 1), stride=(1, 1))
, Q _' m4 x/ S+ X: Z (1): Conv2d(48, 12, kernel_size=(1, 1), stride=(1, 1))
0 F( X% G- i1 `; r (2): Conv2d(48, 12, kernel_size=(1, 1), stride=(1, 1))) _% `; C" N) \6 V9 z6 Y
)4 x; @0 h: c8 H: }2 L
(gconv): ModuleList( ^2 ~" a# a6 J S/ O, \ h
(0): GraphConvBR(
' ^9 ]. [6 J9 N8 K m- s9 U1 g (bn): BatchNorm2d(48, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
* F' Y( l H/ ~' _' h (act): ReLU(inplace=True)
4 e! n; |0 A$ S D )% d! p% V( N! F0 q; I
(1): GraphConvBR(
9 c% ?7 N- ?; t4 m+ C (bn): BatchNorm2d(48, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)5 y' G) @- x7 q& k# g# L" Z! U% D
(act): ReLU(inplace=True)
! l6 [" F$ i' g! A: g )
/ c( _! h0 O$ x4 @. e: y0 B% | (2): GraphConvBR(
1 ^4 y0 _( l7 _. F$ X+ R9 d (bn): BatchNorm2d(48, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)6 D1 |3 ^8 T& {: U& }! ^( g
(act): ReLU(inplace=True)
* t1 l% p* s9 s )2 c% d! n0 y) J, K8 m; `% w
)
2 M5 t7 ?" z: x) t (bn): BatchNorm2d(48, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
% t2 H& }+ z% ]3 ^3 x (soft): Softmax(dim=-2)
0 R) q* q5 ^+ {& h+ P (relu): CELU(alpha=0.01)
: C T) H# c- b$ `# T# t ? (expanding_conv): Conv2d(48, 432, kernel_size=(1, 1), stride=(1, 1), bias=False), @. W3 d% O% R# t9 u
(reduction_conv): Conv2d(144, 48, kernel_size=(1, 1), stride=(1, 1), bias=False)
( i+ ]: N- l7 O; Z4 o )/ K& G/ q/ {5 l, ?0 S
)$ ]6 j. j6 ~1 m
(tcn): Sequential(: Q4 g- Y( k" W4 [* B
(0): BatchNorm2d(48, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)2 i; Z3 s9 T: U! @0 P, q' G# l
(1): ReLU(inplace=True)
- B! B0 F4 i9 @/ f: b# k (2): Conv2d(48, 48, kernel_size=(9, 1), stride=(1, 1), padding=(4, 0))! ^5 G1 K* O: a3 h0 ]
(3): BatchNorm2d(48, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
" s# v7 y& N* w2 n5 Q$ L5 R (4): Dropout(p=0, inplace=True)
, E6 ?$ P* E2 R. r )1 L- o5 D% \. m2 ^4 m, _! \. A
)
4 ?! w _4 {" K0 b (6): ConvBlock(
) r9 V! } L& ~9 n! x" g (act): ReLU(inplace=True)+ ]- o& ]. l L6 ]4 `, G/ O5 U
(gcn): PyGeoConv(
% R+ z* J J/ |8 F1 I' `' q! V (g_conv): SAGC(
1 H/ v) b5 u5 w (conv_a): ModuleList(# C& @. e/ {2 D) M: D# k3 n5 V
(0): Conv2d(48, 12, kernel_size=(1, 1), stride=(1, 1))" Y- I6 |( @; Q
(1): Conv2d(48, 12, kernel_size=(1, 1), stride=(1, 1))
# e# d3 }! D& G: x6 k1 Z6 ` j( y (2): Conv2d(48, 12, kernel_size=(1, 1), stride=(1, 1))
1 b9 Z" u% ^/ y! D6 A- y, B )0 b* g+ r& S+ X+ q' j' p( }! T$ r
(conv_b): ModuleList(
' G# h3 X1 @/ Z' v! ? (0): Conv2d(48, 12, kernel_size=(1, 1), stride=(1, 1))* _; C8 [- }& _, S; r& f/ m
(1): Conv2d(48, 12, kernel_size=(1, 1), stride=(1, 1))
! c3 F `# s! y8 k9 _ (2): Conv2d(48, 12, kernel_size=(1, 1), stride=(1, 1))
0 f* O0 {' N1 B0 p. P9 a0 M ), D; W& j6 e U; T+ U# M
(gconv): ModuleList(
: U" E" C% w! W H (0): GraphConvBR(# ^) S& [ F- b+ T% A2 Y, k
(bn): BatchNorm2d(48, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)5 c% @" ^3 C& N! t% Z
(act): ReLU(inplace=True)
% G" N. X, s+ a; S& g1 E) q5 E )
! e/ x; \8 r: v4 V5 E) ~1 I' W (1): GraphConvBR(9 b& t! b' x* y6 ~: d
(bn): BatchNorm2d(48, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True). s! x4 z$ h1 J1 H( w2 T; c, T
(act): ReLU(inplace=True)
0 S9 i- [) {0 V5 G2 _ )" T$ I( x. x" t
(2): GraphConvBR(+ S+ l# S0 C9 U% W% H1 N2 H3 H
(bn): BatchNorm2d(48, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
3 y) s) t! N- o5 r/ q$ Q" B' I2 l z (act): ReLU(inplace=True)0 m' `7 I; `) K* ?) E- D6 p
)/ p5 x0 B" j2 ~0 m5 K3 g
)
( R0 V7 S5 u+ A+ m0 ]' M (bn): BatchNorm2d(48, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
! q' l `+ F+ R3 ]) O: d/ { (soft): Softmax(dim=-2)+ m7 M; T( K4 c; R2 R5 C+ L+ o9 t; p
(relu): CELU(alpha=0.01)2 W0 J O0 s4 N: ?- p1 p; t) O
(expanding_conv): Conv2d(48, 432, kernel_size=(1, 1), stride=(1, 1), bias=False)' u2 o D% N v- g1 ]( Y* H# g
(reduction_conv): Conv2d(144, 48, kernel_size=(1, 1), stride=(1, 1), bias=False)
" {: n: x* H/ c* z, l5 g, w )
$ d, y7 _6 L; [ w )+ ^3 L- `8 g. K
(tcn): Sequential(
1 T. y& U& F! A" X2 I2 ]" ` (0): BatchNorm2d(48, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)+ R; s* M3 B! |5 @" Z4 h
(1): ReLU(inplace=True)
! `- T4 W1 m6 R# s h0 _' W (2): Conv2d(48, 48, kernel_size=(9, 1), stride=(1, 1), padding=(4, 0))' g: ~. j9 V" m; O+ P) ~; _. J
(3): BatchNorm2d(48, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
% ?) M; n% S: F, ` (4): Dropout(p=0, inplace=True)2 ~. x% g% Q' C Q
)
" ~& t1 \5 H' d7 D9 A4 g) M& v )
: G/ i- u% H2 J8 Q ), H: [$ P" @5 T
)
6 O) W1 A- F8 R)
' \) \3 C: x& ~, H+ z————————————————$ s, j( }4 f' ?* Z; b* O
版权声明:本文为CSDN博主「FakeOccupational」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
* N! V, L3 p! n, x- z1 B- x. ]7 _原文链接:https://blog.csdn.net/ResumeProject/article/details/126678496
, Q- R! ~. d+ F7 E7 A/ j' p& ]6 C- R/ l
. G# |+ X8 a, U/ w |
zan
|