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