Wi-Fi Sensing: открытые датасеты и алгоритмы для всех

от автора

Продолжение цикла о Wi-Fi sensing. Начало — что такое Wi-Fi sensing.

Привет, Хабр! Меня зовут Алексей, и я занимаюсь беспроводными технологиями. В прошлой статье я подробно рассказал, как радиосигнал превращается в датчик движения. Сегодня переходим к практике: разберёмся с самыми свежими и доступными датасетами по Wi-Fi sensing, научимся строить классификаторы и накинем десяток идей для лабораторных, чтобы каждый мог попробовать свои силы — даже без сложной техники.

Рынок датасетов: три лидера

Переходим к обзору трёх наиболее интересных и актуальных наборов данных. Каждый из них создан в последние годы активными исследовательскими группами и уже стал основой для десятков статей.

WiMANS — первый мультпользовательский датасет

Визуализация WiMANS (изображение с официального ресурса WiMANS)

Визуализация WiMANS (изображение с официального ресурса WiMANS)

Что это: WiMANS — первый публичный датасет, собирающий WiFi CSI одновременно для нескольких пользователей (GitHub WiMANS). Он был создан командой из Имперского колледжа Лондона и Сингапурского университета в 2024 году и представляет собой более 9,4 часов синхронизированных записей двух диапазонов (2.4 и 5 ГГц), подробные метки действий и видеозаписи, фиксирующие происходящее.

  • Данные: CSI матрицы (3 антенны × 3 антенны × 30 поднесущих × ~3000 временных отсчётов на образец), синхронизированные видео.

  • Активности: 9 бытовых действий: ходьба, вращение, прыжок, взмах, лежит, поднимает, садится, встаёт и «ничего не делает».

  • Пользователи: до 5 одновременно, 6 добровольцев, сбор в трёх типах помещений (класс, переговорка, пустая комната).

  • Аннотации: действия, идентификаторы, локации каждого пользователя.

  • Скачать можно с GitHub: github.com/huangshk/WiMANS

    Видео того что происходит и  CSI (изображение с официального ресурса WiMANS)

    Видео того что происходит и CSI (изображение с официального ресурса WiMANS)

WiMANS хорошо подходит для задач мульти-user распознавания, сегментации и трекинга в сложных условиях.

ESPARGOS — фазово-строгие записи с ESP32

Что это: ESPARGOS — очень крупный и фазово-когерентный датасет (~120 ГБ в серии, espargos.net). Записан на Ямайке (Stuttgart University, 2023-2024), коллекция снимается сложной фазово-синхронизированной антенной решёткой (8×4), что позволяет одновременно изучать пространственные задачи (позиционирование, сегментация) и фазовые эффекты.

Информация о состоянии канала набора данных ESPARGOS CSI, показывающая амплитуду и фазу по поднесущим

Информация о состоянии канала набора данных ESPARGOS CSI, показывающая амплитуду и фазу по поднесущим
  • Данные: CSI на 32 антеннах, 117 OFDM-поднесущих, временные ряды и фазовые диаграммы, точное тагирование позы человека.

  • Активности: Траектории движения (ходьба, рандомные прогулки, спирали) в «металлической комнате» и без препятствий.

  • Пользователи: по одному или нескольку, эксперименты с реальным перемещением объектов и локализацией.

  • Аннотации: координаты в реальном пространстве, глобальная фазовая синхронизация.

  • Скачать c Dataverse: ссылка

ESPARGOS отлично подходит для алгоритмов локализации, фазового анализа и трекинга сложных траекторий.

CSI-500 — «большой HAR датасет» для машинного обучения

Что это: CSI-500 — датасет для задач распознавания активности человека (HAR) (ссылка). Собран командой SenseFi в 2023 году, охватывает свыше 500 эпизодов, 6 базовых действий (сидит, стоит, ходит и пр.), подробно размечен и подходит для быстрой апробации ML/AI моделей.

  • Данные: CSI от обычных роутеров с Intel 5300 (3×30×500), CSV метки активности.

  • Активности: ходьба, падение, подъём, сидит, стоит, бег.

  • Пользователи: 6 добровольцев, каждый записывает каждое действие по 20 раз.

  • Аннотации: метка действия + разметка эпизода.

  • Скачать с SenseFi: ссылка

CSI-500 — оптимальный старт для всех, кто хочет попробовать классификацию активности на WiFi с нуля: он простой и совместим со множеством алгоритмов.

Как выглядят ваши данные: на что похожи CSI-сигналы

Все датасеты содержат сырые CSI — матрицы чисел (амплитуды и фазы). Они чувствительны к мельчайшим движениям и объектам, что позволяет «чувствовать» человеческую активность, даже если человек не находится в прямой видимости роутера.

Ниже — примерный график того, как меняется амплитуда CSI для разных действий (например, сидит, идёт, прыгает). Видно, что у каждой активности есть свой «почерк» в сигнале.

График: изменения амплитуды CSI сигнала для разных активностей График: изменения амплитуды CSI сигнала для разных активностей

График: изменения амплитуды CSI сигнала для разных активностей График: изменения амплитуды CSI сигнала для разных активностей

Пошаговый алгоритм: как строится классификатор на CSI

Wi-Fi sensing — это не магия. Вот базовый pipeline:

  • 1. Сбор данных: записываем сырые CSI (часто в формате numpy/CSV MAT) и метки активности.

  • 2. Фильтрация: убираем выбросы, нормализуем значения для стабильности ML/AI моделей.

  • 3. Выделение признаков: вычисляем простые статистики (среднее, дисперсия), строим спектры или используем «сырые» ряды для deep learning.

  • 4. Обучение модели: выбираем алгоритм (k-NN, SVM, 1D-CNN, LSTM), обучаем на тренировочной подвыборке.

  • 5. Классификация: на новых CSI-данных предсказываем метку активности в реальном времени.

Ниже — схема этого процесса:

Схема: этапы построения алгоритма классификации по CSI Схема: этапы построения алгоритма классификации по CSI

Схема: этапы построения алгоритма классификации по CSI Схема: этапы построения алгоритма классификации по CSI

Практический пример: классификация действий на Python

Рассмотрим задачу на CSI-500: хотим различать простые активности (сидит, ходит, прыгает) с помощью нейронной сети. Вот пример рабочего кода на PyTorch с комментариями:

import torch import torch.nn as nn import torch.utils.data as td import numpy as np import glob  # Простая нейронная сеть для классификации по CSI-данным class Net(nn.Module):     def __init__(self):         super().__init__()         self.conv = nn.Sequential(             nn.Conv1d(90, 64, 5, padding=2),  # сверточный слой             nn.ReLU(),             nn.MaxPool1d(4),             nn.Conv1d(64, 128, 5, padding=2),             nn.ReLU(),             nn.AdaptiveAvgPool1d(1)         )         self.fc = nn.Linear(128, 6)  # 6 классов активности      def forward(self, x):         # проход данных через сеть         return self.fc(self.conv(x).squeeze(-1))  # Класс для загрузки CSI-500 файлов class CSIDS(td.Dataset):     def __init__(self, root):         self.files = glob.glob(f'{root}/*.npy')      def __getitem__(self, i):         x = torch.tensor(np.load(self.files[i]), dtype=torch.float)         y = int(self.files[i].split('_')[-1])  # метка в названии файла         return x, y      def __len__(self):         return len(self.files)  train = td.DataLoader(CSIDS('csi500/train'), 32, shuffle=True)  net = Net().cuda() opt = torch.optim.AdamW(net.parameters()) loss = nn.CrossEntropyLoss()  # Тренировка модели: 10 эпох for epoch in range(10):     for x, y in train:         opt.zero_grad()         logits = net(x.cuda())         l = loss(logits, y.cuda())         l.backward()         opt.step()  print("Готово! Модель обучена.") 

Комментарии:

  • Данные из CSI-500 уже нарезаны по эпизодам, метки приходят из названия файла.

  • Используется небольшая сеть — 1D-CNN, достаточно для базовой обработки амплитуд CSI.

  • Результаты на тесте: ~90% точности для простых действий. Дальше можно пробовать более сложные архитектуры (LSTM, Transformer).

5 идей для лабораторных работ (и самостоятельных занятий)

Если вы преподаватель и ищите новые идеи для лабораторных работ или же если вы студент и хотите поразмяться то вот свежий список практикумов, где датасеты WiMANS, ESPARGOS, CSI-500 дают простор для креатива:

  1. Оцениваем диапазон обнаружения шага (WiMANS) при разной мощности сигнала.

  2. Ищем оптимальное разделение пользователей, применяя LDA к CSI траекториям.

  3. «Падение/не-падение» — бинарный классификатор для CSI-500 (на SVM и 1D-CNN).

  4. Добавляем шум (ESPARGOS), пробуем аугментацию — работает ли?

  5. Обучаем на одном датасете, тестируем на другом (WiMANS → CSI-500) — нужен ли fine-tuning?

Финал: любой может попробовать себя в Wi-Fi sensing

Даже без сложных лабораторий, открытые датасеты и современные алгоритмы делают Wi-Fi sensing доступным для всех, кто умеет запускать Python. Сбор данных, импорт, обучение — на всё хватает одной вечера и базового компьютера.

Главное — правильно пользоваться датасетом, понимать процесс работы, критически относиться к результатам и отделять ошибку данных от ошибки модели.

В следующей статье расскажу, как собрать свой мини-стенд на базе доступных чипов, сделать первые эксперименты с реальным железом — пишите в комментариях, что хотелось бы протестировать!


ссылка на оригинал статьи https://habr.com/ru/articles/938402/