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