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