compressionkit-ppg-4x 是基于 Residual Vector Quantization(RVQ) 的 PPG
(光电容积脉搏波)信号压缩编解码器,针对边缘可穿戴设备优化:Encoder 将 320 采样点
/帧(64 Hz,5s)PPG 信号压缩为 4 级 RVQ 索引码流(4x 压缩率),Decoder 重建原始
信号,支持 INT8 量化部署。原始权重为 Keras .keras / TFLite 格式,本仓库提供
Keras→PyTorch 重建版(纯 PyTorch 算子),可在昇腾 NPU 上直接推理。
本仓库为昇腾 Model-Agent 模型适配大赛交付物,已将模型完整适配到 Ascend NPU
(Ascend-910 系列)推理,交付 inference.py 推理脚本、readme.md 部署说明与
requirements.txt 依赖清单。
| 项目 | 值 |
|---|---|
| 模型 | Ambiq/compressionkit-ppg-4x(compressionkit-ppg-4x-v1.0) |
| 任务 | PPG 信号压缩编解码(RVQ 4x 压缩,边到端重建) |
| 模态/采样率 | PPG,64 Hz,帧长 320 采样点(5s) |
| 架构 | Encoder(Conv2D 1→48→64 stride2 + BN + ReLU + to_vq 16)+ RVQ 4 级码本(256×16D)+ Decoder(Upsample2x + Conv2D + SeparableConv2D + LayerNorm + out) |
| 参数量 | encoder 23,216 + decoder 36,001(合计约 59K)+ 码本 4×256×16 |
| 输入/输出 | 输入 [B,1,320,1] float32;latent [B,16,1,80];RVQ 索引 [B,80,4];输出 [B,1,320,1] |
| 许可证 | Apache-2.0(模型权重另见 LICENSE-MODEL-WEIGHTS.md) |
| 原始仓库 | https://huggingface.co/Ambiq/compressionkit-ppg-4x |
pip install -r requirements.txt -i https://repo.huaweicloud.com/repository/pypi/simple/原始权重为 Keras .keras / TFLite 格式,经两阶段转换重建为纯 PyTorch:
compressionkit_ppg4x.pt(encoder/decoder state_dict +
codebooks),关键点:
BatchNorm2d / LayerNorm 的 eps=1e-5(与 Keras 一致,实测是 RVQ 索引
一致性的关键,误用 1e-3 会导致索引翻转);(kh,kw,in,1) → (in,1,kh,kw);padding='same' 用显式 F.pad 等价实现(kernel 7 stride 2 → pad 2/3)。推理路径全部为标准 PyTorch 算子(Conv2d / BatchNorm2d / LayerNorm / F.interpolate),
device 透传 npu:0 即可全量运行在 NPU,无 CUDA 硬编码、无 CPU fallback。
# 默认用例:官方 sample_stimulus 前 4 条 PPG 信号压缩+重建(NPU 推理)
python3 inference.py --device npu:0
# CPU 推理(对比基线)
python3 inference.py --device cpu
# 自定义 PPG 信号(320 点帧,64 Hz)
python3 inference.py --device npu:0 --signal "0.6*sin(2*pi*1.2*t)" --samples 2
# 指定输出 JSON
python3 inference.py --device npu:0 --output result.json| 项目 | CPU | NPU (npu:0) |
|---|---|---|
| 输入 | (4,1,320,1) float32 | (4,1,320,1) float32 |
| latent | (4,16,1,80) | (4,16,1,80) |
| RVQ 索引 | (4,80,4) int | (4,80,4) int |
| 输出 | (4,1,320,1) | (4,1,320,1) |
| 有限性 finite_all | True | True |
| 推理耗时 | 0.0149s | 0.1492s |
| 与官方参考重建 max_abs_diff | 0.151863 | 0.152360 |
说明:
- 本机 NPU 单次前向耗时高于 CPU,是因为模型极小(约 59K 参数)而 NPU 存在 算子下发/设备通信开销,批处理或实际边缘部署可摊薄;CPU/NPU 输出数值一致 (逐条 max_abs_diff 与官方 TFLite float32 全链路完全相同:0.017/0.024/0.152/0.058), 差异来源于官方 sample_stimulus 参考重建本身,非 NPU 引入;
- 与官方 TFLite float32 全链路逐条对比完全一致(sample 0-3: max_abs_diff=0.017/0.024/0.152/0.058,逐位吻合),证明 PyTorch 重建正确。
[B,1,320,1] float32 PPG 信号(64 Hz,每帧 320 点 = 5s),默认使用官方
sample_stimulus.npz(10 条参考样本),或 --signal 自定义正弦表达式[B,1,320,1](float32)+ RVQ 压缩索引 [B,80,4](int32,
即压缩码流,4 级 × 80 帧位置);与官方参考重建对比报告 max/mean 绝对差├── inference.py # 推理脚本(必选,PyTorch 重建 + NPU device 透传)
├── readme.md # 部署说明文档(必选)
├── requirements.txt # 环境依赖清单
├── compressionkit_ppg4x.pt # PyTorch 重建权重(encoder/decoder + 码本)
└── sample_stimulus.npz # 官方参考样本(inputs/targets/reconstructions)@misc{compressionkit,
title = {compressionKIT: Ambiq Compression Toolkit},
author = {Ambiq AI},
year = {2025},
note = {https://ambiqai.github.io/compressionkit/}
}