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