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