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