基于NGAFID航空数据集的InceptionTime时序分类研究

张开发
2026/6/5 20:44:15 15 分钟阅读
基于NGAFID航空数据集的InceptionTime时序分类研究
基于NGAFID航空数据集的InceptionTime时序分类研究一、项目概述1.1 问题背景航空发动机的预防性维护是保障飞行安全的关键环节。传统的维护策略主要依赖固定时间间隔的检查这种方法要么导致过度维护增加成本要么可能导致漏检安全隐患。NGAFIDNational General Aviation Flight Information Database是一个由美国联邦航空管理局FAA支持的大型航空数据集包含大量真实飞行数据。本项目基于论文《A Large-Scale Annotated Multivariate Time Series Aviation Maintenance Dataset from the NGAFID》利用深度学习方法对航空发动机状态进行二分类预测判断飞机在特定飞行阶段是否存在异常情况。1.2 数据集特性特性描述样本数量11,446 条记录序列长度4,096 时间步通道数23 个传感器通道正样本异常5,602 (48.9%)负样本正常5,844 (51.1%)1.3 解决思路┌─────────────────────────────────────────────────────────────────┐ │ 解决方案架构 │ ├─────────────────────────────────────────────────────────────────┤ │ │ │ 原始时序数据 ──→ 数据预处理 ──→ InceptionTime ──→ 二分类输出 │ │ (23×4096) (归一化) (深度学习) (正常/异常) │ │ │ │ 数据预处理: │ │ - Min-Max 归一化 [0, 1] │ │ - NaN 值填充 (前向填充 常数填充) │ │ - 数据格式转换: (length, channels) → (channels, length) │ │ │ └─────────────────────────────────────────────────────────────────┘我们采用InceptionTime模型进行时序分类该模型具有以下优势参数量小约47万参数 vs 其他模型上千万参数计算效率高适合边缘设备部署多尺度特征提取能力强在多个时序分类任务上表现优异二、InceptionTime 模型详解2.1 整体模型架构┌────────────────────────────────────────────────────────────────────────┐ │ InceptionTime 整体架构 │ ├────────────────────────────────────────────────────────────────────────┤ │ │ │ 输入: (batch, channels, length) (batch, 23, 4096) │ │ │ │ ┌──────────────────────────────────────────────────────────────────┐ │ │ │ InceptionModule × 6 (Depth6) │ │ │ │ ┌────────────────────────────────────────────────────────────┐ │ │ │ │ │ 单个 InceptionModule │ │ │ │ │ │ │ │ │ │ │ │ 输入 x ──┬──→ [Bottleneck] ──→ conv(k/4) ──┐ │ │ │ │ │ │ │ conv(k/2) ──┐ │ │ │ │ │ │ │ conv(k) ──┼──→ ⊕──→│ │ │ │ │ │ │ conv ──┘ │ │ │ │ │ │ │ │ │ │ │ │ │ └──→ [MaxPool] → conv(1) ──────────────────────→ ⊕│ │ │ │ │ │ │ │ │ │ │ │ 输出: (batch, 128, length) │ │ │ │ │ └────────────────────────────────────────────────────────────┘ │ │ │ └──────────────────────────────────────────────────────────────────┘ │ │ │ │ 输出: (batch, 128, 4096) ──→ [GlobalAvgPool] ──→ (batch, 128) │ │ ──→ [Dropout] │ │ ──→ [FC] ──→ (batch, 1) └────────────────────────────────────────────────────────────────────────┘2.2 InceptionModule 组件拓扑InceptionModule 是 InceptionTime 的核心构件包含以下四个并行分支┌─────────────────────────────────────────────────────────────────┐ │ InceptionModule 详细结构 │ ├─────────────────────────────────────────────────────────────────┤ │ │ │ 输入: (batch, C_in, L) │ │ │ │ │ ┌───────────────┼───────────────┐ │ │ ▼ ▼ ▼ │ │ ┌────────┐ ┌────────┐ ┌────────┐ │ │ │Conv k/4│ │Conv k/2│ │ Conv k │ │ │ │ 1×1 │ │ 1×1 │ │ 1×1 │ │ │ │BNReLU │ │BNReLU │ │BNReLU │ │ │ └────┬───┘ └────┬───┘ └────┬───┘ │ │ │ │ │ │ │ ▼ ▼ ▼ │ │ ┌────────┐ ┌────────┐ ┌────────┐ │ │ │Conv k/4│ │Conv k/2│ │ Conv k │ │ │ │ 3×1 │ │ 3×1 │ │ 1×1 │ │ │ │BNReLU │ │BNReLU │ │BNReLU │ │ │ └────┬───┘ └────┬───┘ └────┬───┘ │ │ └───────────────┼───────────────┘ │ │ │ │ │ ▼ │ │ 输出分支1-3: (batch, 32, L) │ │ │ │ │ │ (原始输入) │ │ ▼ │ │ ┌────────────┐ │ │ │ MaxPool │ │ │ │ 3×1, s1 │ │ │ └─────┬──────┘ │ │ ▼ │ │ ┌────────┐ │ │ │Conv 1×1│ │ │ │BNReLU │ │ │ └────┬───┘ │ │ ▼ │ │ 输出分支4: (batch, 32, L) │ │ │ │ │ ▼ │ │ ┌────────────────────────────┐ │ │ │ Concatenate (dim1) │ │ │ │ 32 32 32 32 128 │ │ │ └────────────────────────────┘ │ │ │ │ │ ▼ │ │ 输出: (batch, 128, L) │ │ │ └─────────────────────────────────────────────────────────────────┘2.3 Bottleneck 瓶颈层Bottleneck 层使用 1×1 卷积进行通道压缩减少计算量的同时提供非线性变换# PyTorch 实现ifuse_bottleneckandin_channels1:self.bottlenecknn.Conv1d(in_channels,32,kernel_size1,biasFalse)self.bn_bottlenecknn.BatchNorm1d(32)branch_channels32# 压缩后的通道数2.4 数据流详解以单样本为例输入: (23, 4096) - 23个通道每个通道4096个时间步 ├── InceptionModule 1 (in23, out32) │ ├── Bottleneck: 23 → 32 │ ├── 分支1: conv(k/410) → (32, 4096) │ ├── 分支2: conv(k/220) → (32, 4096) │ ├── 分支3: conv(k40) → (32, 4096) │ ├── 分支4: poolconv → (32, 4096) │ └── Concat: (32*4128, 4096) │ ├── InceptionModule 2-6 (in128, out32) │ └── 同样结构输出: (128, 4096) │ ├── GlobalAvgPool: (128, 4096) → (128,) │ ├── Dropout(0.5): 随机丢弃部分神经元 │ └── FC(128→1): 输出logit值2.5 核心参数统计组件参数数量说明InceptionModule × 6约 46万6个Inception模块GlobalAvgPool0无参数Dropout0无参数FC129128→1 bias总计约47万非常轻量三、实验配置与训练3.1 训练配置classConfig:# 数据配置MAX_LENGTH4096# 序列长度NUM_CHANNELS23# 通道数# 训练配置BATCH_SIZE16# 批次大小NUM_EPOCHS50# 训练轮数LEARNING_RATE1e-4# 学习率NUM_FOLDS5# 5折交叉验证# InceptionTime 超参数NUM_FILTERS32# 每个分支的滤波器数DEPTH6# Inception模块堆叠层数KERNEL_SIZE40# 最大卷积核尺寸DROPOUT0.5# Dropout比率# 硬件配置DEVICEcuda# 使用GPU训练3.2 训练策略┌─────────────────────────────────────────────────────────────────┐ │ 训练策略 │ ├─────────────────────────────────────────────────────────────────┤ │ │ │ 优化器: Adam │ │ - 学习率: 1e-4 │ │ - 权重衰减: 1e-5 │ │ │ │ 学习率调度: CosineAnnealingLR │ │ - T_max: 50 epochs │ │ - 周期性调整学习率 │ │ │ │ 损失函数: BCEWithLogitsLoss │ │ - 结合 Sigmoid 和 BCELoss │ │ - 支持混合精度训练 │ │ │ │ 早停策略: 基于验证集 F1 分数 │ │ - 保存最佳 F1 模型 │ │ │ │ 混合精度训练: torch.cuda.amp │ │ - 加速训练 │ │ - 减少显存占用 │ │ │ └─────────────────────────────────────────────────────────────────┘四、实验结果4.1 Fold 1 训练曲线┌─────────────────────────────────────────────────────────────────┐ │ Fold 1/5 训练结果 │ ├─────────────────────────────────────────────────────────────────┤ │ │ │ Epoch 1: Train Loss0.6993, Acc51.78% │ │ Epoch 5: Train Loss0.6563, Acc57.14% │ │ Epoch 10: Train Loss0.6254, Acc60.95% | Val Acc62.23% [保存]│ │ Epoch 15: Train Loss0.5810, Acc66.56% │ │ Epoch 20: Train Loss0.5545, Acc68.72% | Val Acc66.81% [保存]│ │ Epoch 25: Train Loss0.5352, Acc70.92% │ │ Epoch 30: Train Loss0.5170, Acc72.23% | Val Acc70.31% [保存]│ │ │ │ 训练损失持续下降准确率稳步提升 │ │ 验证集准确率达到 70.31% │ │ │ └─────────────────────────────────────────────────────────────────┘4.2 结果可视化┌─────────────────────────────────────────────────────────────────┐ │ 训练指标可视化 │ ├─────────────────────────────────────────────────────────────────┤ │ │ │ 准确率 (%): │ │ Train ████████████████░░░░░░░░░░░░░░░░░░░░░ 72.23% │ │ Val ██████████████████░░░░░░░░░░░░░░░░░░░░ 70.31% │ │ │ │ 损失值: │ │ Train ░░░░░░░░░░███████████████████████░░░░ 0.5170 │ │ Val ░░░░░░░░░░███████████████████████░░░░ 0.5248 │ │ │ │ 学习率: │ │ LR ████████████████████████████████████ 1e-4 (cosine) │ │ │ └─────────────────────────────────────────────────────────────────┘4.3 结果分析指标Fold 1 (30 epochs)说明训练准确率72.23%模型在训练集上的表现验证准确率70.31%泛化性能训练损失0.5170持续下降无明显过拟合验证损失0.5248与训练损失接近关键发现模型在30个epoch内达到70%以上的验证准确率训练损失和验证损失保持接近表明模型泛化能力良好继续训练有望获得更好的结果五、代码实现要点5.1 模型定义classInceptionModule(nn.Module):Inception 模块 - 多尺度特征提取def__init__(self,in_channels,out_channels,kernel_size40,use_bottleneckTrue):super().__init__()# 瓶颈层通道压缩ifuse_bottleneckandin_channels1:self.bottlenecknn.Conv1d(in_channels,32,kernel_size1,biasFalse)self.bn_bottlenecknn.BatchNorm1d(32)branch_channels32else:self.bottleneckNonebranch_channelsin_channels# 三个并行卷积分支self.convsnn.ModuleList([nn.Sequential(nn.Conv1d(branch_channels,out_channels,kernel_sizeks,paddingks//2,biasFalse),nn.BatchNorm1d(out_channels),nn.ReLU(inplaceTrue))forksin[kernel_size//4,kernel_size//2,kernel_size]])# 池化分支self.pool_convnn.Sequential(nn.MaxPool1d(kernel_size3,stride1,padding1),nn.Conv1d(in_channels,out_channels,kernel_size1,biasFalse),nn.BatchNorm1d(out_channels),nn.ReLU(inplaceTrue))defforward(self,x):x_originalx# 瓶颈变换ifself.bottleneckisnotNone:xself.bottleneck(x)xself.bn_bottleneck(x)# 并行卷积outputs[conv(x)forconvinself.convs]# 池化分支pool_outself.pool_conv(x_original)outputs.append(pool_out)# 通道维度拼接returntorch.cat(outputs,dim1)5.2 数据加载classNGAFIDDataset(Dataset):NGAFID 数据集加载def__getitem__(self,idx):xself.data[idx]# (length, channels)yself.labels[idx]# 归一化x(x-self.min_val)/(self.max_val-self.min_val1e-8)# 转换为 PyTorch 格式: (channels, length)xx.transpose(0,1)returntorch.FloatTensor(x),torch.FloatTensor([y])六、不足与改进方向6.1 当前不足问题描述影响仅用1折验证Fold 1结果可能不稳定评估不够全面无数据增强时序数据未做增强模型泛化受限6.2 改进方向6.2.1 模型架构优化当前: InceptionTime (47万参数) │ ├── 短期改进 │ ├── 增加 Inception 模块深度 (6 → 9) │ ├── 引入注意力机制 (CBAM) │ └── 多尺度融合策略 │ ├── 中期改进 │ ├── 轻量化 Transformer (TF-Lite) │ ├── 模型蒸馏压缩 │ └── AutoML 超参数搜索 │ └── 长期改进 └── 端到端异常检测 (而非二分类)6.2.2 训练策略优化学习率调度尝试 OneCycleLR 或 ReduceLROnPlateauWarmup 策略避免初期震荡损失函数改进类别不平衡处理Focal Loss标签平滑 (Label Smoothing)数据增强时间扭曲 (Time Warping)随机裁剪 (Random Cropping)噪声注入 (Noise Injection)七、总结与展望7.1 项目成果成功实现InceptionTime 模型的 PyTorch 版本验证有效性在 NGAFID 数据集上达到 70% 准确率轻量化设计仅 47万参数适合边缘部署完整训练流程5折交叉验证早停机制模型保存7.2 后续计划Phase 1 (短期): 完成5折交叉验证 └── 获取更稳定的性能评估 Phase 2 (中期): 模型优化 ├── 增加训练轮数 ├── 尝试更深的 InceptionTime └── 数据增强实验 Phase 3 (长期): 工程落地 ├── 模型压缩与量化 ├── 导出 ONNX/TensorRT └── 边缘设备部署7.3 技术栈组件技术选型深度学习框架PyTorch 2.0数据处理NumPy, Pandas可视化Matplotlib硬件加速CUDA 11.x GTX 1060 6GB环境管理Conda参考文献Fawaz, H. I., et al. (2019). “InceptionTime: Finding AlexNet for Time Series Classification.”arXiv preprint arXiv:1909.04939“A Large-Scale Annotated Multivariate Time Series Aviation Maintenance Dataset from the NGAFID”Szegedy, C., et al. (2015). “Going Deeper with Convolutions.”CVPR项目地址: NGAFID_Binary_Classification

更多文章