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