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