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