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