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