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