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