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