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