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