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