Продолжение цикла о Wi-Fi sensing. Начало — что такое Wi-Fi sensing.
Привет, Хабр! Меня зовут Алексей, и я занимаюсь беспроводными технологиями. В прошлой статье я подробно рассказал, как радиосигнал превращается в датчик движения. Сегодня переходим к практике: разберёмся с самыми свежими и доступными датасетами по Wi-Fi sensing, научимся строить классификаторы и накинем десяток идей для лабораторных, чтобы каждый мог попробовать свои силы — даже без сложной техники.
Рынок датасетов: три лидера
Переходим к обзору трёх наиболее интересных и актуальных наборов данных. Каждый из них создан в последние годы активными исследовательскими группами и уже стал основой для десятков статей.
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)
WiMANS хорошо подходит для задач мульти-user распознавания, сегментации и трекинга в сложных условиях.
ESPARGOS — фазово-строгие записи с ESP32
Что это: ESPARGOS — очень крупный и фазово-когерентный датасет (~120 ГБ в серии, espargos.net). Записан на Ямайке (Stuttgart University, 2023-2024), коллекция снимается сложной фазово-синхронизированной антенной решёткой (8×4), что позволяет одновременно изучать пространственные задачи (позиционирование, сегментация) и фазовые эффекты.
-
Данные: 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
Wi-Fi sensing — это не магия. Вот базовый pipeline:
-
1. Сбор данных: записываем сырые CSI (часто в формате numpy/CSV MAT) и метки активности.
-
2. Фильтрация: убираем выбросы, нормализуем значения для стабильности ML/AI моделей.
-
3. Выделение признаков: вычисляем простые статистики (среднее, дисперсия), строим спектры или используем «сырые» ряды для deep learning.
-
4. Обучение модели: выбираем алгоритм (k-NN, SVM, 1D-CNN, LSTM), обучаем на тренировочной подвыборке.
-
5. Классификация: на новых 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 дают простор для креатива:
-
Оцениваем диапазон обнаружения шага (WiMANS) при разной мощности сигнала.
-
Ищем оптимальное разделение пользователей, применяя LDA к CSI траекториям.
-
«Падение/не-падение» — бинарный классификатор для CSI-500 (на SVM и 1D-CNN).
-
Добавляем шум (ESPARGOS), пробуем аугментацию — работает ли?
-
Обучаем на одном датасете, тестируем на другом (WiMANS → CSI-500) — нужен ли fine-tuning?
Финал: любой может попробовать себя в Wi-Fi sensing
Даже без сложных лабораторий, открытые датасеты и современные алгоритмы делают Wi-Fi sensing доступным для всех, кто умеет запускать Python. Сбор данных, импорт, обучение — на всё хватает одной вечера и базового компьютера.
Главное — правильно пользоваться датасетом, понимать процесс работы, критически относиться к результатам и отделять ошибку данных от ошибки модели.
В следующей статье расскажу, как собрать свой мини-стенд на базе доступных чипов, сделать первые эксперименты с реальным железом — пишите в комментариях, что хотелось бы протестировать!
ссылка на оригинал статьи https://habr.com/ru/articles/938402/
Добавить комментарий