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