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