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