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