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