Search
Write a publication
Pull to refresh

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

Level of difficultyMedium
Reading time5 min
Views975

Продолжение цикла о 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. Сбор данных, импорт, обучение — на всё хватает одной вечера и базового компьютера.

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

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

Tags:
Hubs:
0
Comments1

Articles