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