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