UCI HAR 无源码论文复现:从数据接入到 ConvBLSTM-PMwA 多种子结果整理

1. 这次复现做的是什么

这次做的是一条比较标准的时序深度学习论文复现线,数据集选的是经典公开数据集 UCI HAR Dataset,目标论文是:

  • A Novel CNN-based Bi-LSTM parallel model with attention mechanism for human activity recognition with noisy data

我之所以选这个组合,原因很直接:

  • UCI HAR 足够经典,适合做公开复现
  • 六分类人体行为识别,任务边界清楚
  • 传感器时序数据,适合 CNN / Bi-LSTM / Attention
  • 数据规模不算大,个人设备也能推进
  • 这篇论文全文可以拿到,但没有直接找到作者官方代码,适合按“无源码论文复现”来做

这次的目标不是“简单跑通一个仓库”,而是认真走一遍:

  1. 固化数据协议
  2. 自己实现 baseline
  3. 自己实现目标模型
  4. 跑出结果
  5. 整理成图表和可展示文档

2. 数据集和任务设置

UCI HAR Dataset 是智能手机传感器的人体行为识别数据集,常见设定是:

  • 30 个受试者
  • 6 类活动
  • 使用加速度计和陀螺仪信号
  • 官方给出 train/test 划分

这次我先固定最基础的一版协议:

  • 使用官方 train/test split
  • 输入形状固定为 9 x 128
  • 9 个通道包括:
    • body_acc_x/y/z
    • body_gyro_x/y/z
    • total_acc_x/y/z

标签就是标准六分类:

  • WALKING
  • WALKING_UPSTAIRS
  • WALKING_DOWNSTAIRS
  • SITTING
  • STANDING
  • LAYING

3. 这次复现的模型

这次先做了两个层次:

3.1 Baseline

先实现一个相对简单的 1D CNN baseline,用来确认数据管线和训练流程没有问题。

3.2 目标模型

目标模型是我根据论文描述实现的 ConvBLSTM-PMwA,核心思路可以概括成:

  • 并行卷积提取局部时序特征
  • Bi-LSTM 建模前后时序依赖
  • Attention 聚合关键时刻信息
  • 最后做六分类输出

也就是说,这次复现不是只停留在“跑个 CNN”,而是把论文方法的主结构真正落地出来了。


4. 复现过程中真正踩到的坑

这部分其实是我觉得最有价值的地方。

一开始链路虽然跑通了,但很快发现一个现实问题:
训练速度不对。

4.1 小文件 I/O 拖慢训练

我最初的处理方式是:

  • 每个样本保存成一个独立 .npy
  • DataLoader 每次按 manifest 去读单个文件

这个方案的优点是直观,但缺点也很明显:

  • 小文件太多
  • 训练时 I/O 开销很重
  • 多随机种子长训练特别慢

所以我后来把处理格式改成了:

  • 每个 split 一个连续数组文件
    • train/signals.npy
    • test/signals.npy
  • manifest 里只保存
    • signal_array_path
    • signal_index

这样一来,数据读取方式就从“几千个小文件”变成了“连续数组按索引读取”。

4.2 当前环境对 torch worker 有限制

我本来还想继续通过 num_workers > 0 提速,但实际跑的时候又碰到了另一个环境问题:

  • torch_shm_manager ... Operation not permitted

也就是说,这个环境里多进程共享内存是受限的。
所以最后稳定可用的设置反而是:

  • num_workers = 0

这也说明一个事实:
论文复现很多时候卡的不是模型,而是工程环境细节。


5. 当前结果

5.1 首轮 quick verification

最初的 5 epoch 快速验证结果:

  • cnn
    • accuracy 0.913471
    • macro-F1 0.913895
  • convblstm_pmwa
    • accuracy 0.914489
    • macro-F1 0.915099

这个阶段只能说明一件事:

  • 训练链路是通的

但还不能说明目标模型真的稳定优于 baseline。

5.2 长训练与多种子结果

后面在修完数据读取后,我继续补了更正式一点的结果。

目前可用的汇总口径是:

  • cnn, 15 epochs, 3 seeds 平均

    • accuracy 0.923990
    • macro-F1 0.923815
  • convblstm_pmwa, 10 epochs, 3 seeds 平均

    • accuracy 0.928062
    • macro-F1 0.927663

ConvBLSTM-PMwA 三个 seed 分别是:

  • seed 42: accuracy 0.931795
  • seed 52: accuracy 0.919579
  • seed 62: accuracy 0.932813

可以直接看出两个结论:

  1. 从平均结果看,目标模型已经超过了 cnn baseline
  2. 目标模型存在明显 seed 波动,尤其 seed 52 掉点比较明显

6. 当前结果图

在这里插入图片描述

如果只看现在这一步,我会把它理解成:

  • ConvBLSTM-PMwA 有更强的潜力
  • 但它比简单 cnn 更敏感
  • 所以这条复现线已经从“能不能跑通”进入“稳不稳定、细节对不对”的阶段

7. 我对这次复现的阶段性判断

到目前为止,这条 UCI HAR 复现线已经完成了这些关键节点:

  • 论文和数据集锁定
  • 数据协议固定
  • baseline 实现
  • 目标模型实现
  • 单次结果跑通
  • 更长训练和多随机种子结果补齐
  • 图表和汇总表整理完成

所以现在它已经不是一个“想做”的项目,而是一个已经有第一轮结果的复现项目。

但如果说它是不是已经等于“完整复现论文”,我觉得还不能这么说。
原因主要有两个:

  • 论文里仍然存在一些结构和训练细节没有完全明写
  • 目标模型的 seed 波动说明还需要继续检查稳定性

8. 小结

这次 UCI HAR 无源码论文复现,最重要的收获不只是结果本身,而是把整条流程做出来了:

  • 从选论文
  • 到数据接入
  • 到模型实现
  • 到训练踩坑
  • 到结果整理

如果只是看当前阶段结果,那么一句话概括就是:

ConvBLSTM-PMwA 的平均表现已经超过了 cnn baseline,但模型稳定性还值得继续追。

如果你也在做论文复现,这类项目其实很适合练手,因为它既有公开数据集,又有标准任务,还能真实暴露工程问题。

需要资料的可以私信我哟。

Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐