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