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