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