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