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