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