середа, 21 травня 2014 р.

Про SmartEnergyHackaton та вуличне освітлення

Загальна частина. Рекламна :-)

Smart Energy Forum та Smart Energy Hackaton  відбулися 16-18 травня у Львові і були присвячені питанням енергозбереження та "зелених" технологій. Більше про самі події можна почитати тут http://lvbs.com.ua/uk/news/340.
Наш проект, Illumatika, має вирішувати питання вуличного освітлення. Моя роль в проекті - розробка моделі, яка може  розпізнати "людину" (якій світло потрібно увімкнути) і "не людину" (обєкт, якому світло не потрібно - бджоли, пташки, гроза, поїзд(на залізниці поруч)) на основі звуків. Проект отримав 3-е місце.



Data science частина. Побудова моделі, перевірка точності.

Задача: побудувати ML модель, яка з точністю 85-100%  (залежно від семплів, які потрапили відповідно в тест та тренінг набір) визначала наявність/відсутність людини.

Дані: Датасет мав семпли довжиною ~1 хвилина із записаними кроками та голосом (ознаки присутності людини) на різних поверхнях (сніг, паркет, калюжі і т д) та шумом (поїзд, спів пташок, шум дощу).

Попередня обробка:
R має хорошу бібліотеку для роботи зі звуками - seewave.
Для визначення "змісту" звукового файлу потрібно перевести його в часового в частотний діапазон. Проблема в тому, що для різних звукових файлів отримаємо спектр частот різної довжини (залежить від присутніх частот). Функція meanspec - дозволяє "узагальнити" форму спектра. Це відбувається шляхом розбиття на 256 частин, обрахування середньої амплітуди для кожної частини та приведення до діапазону [0:1]. Вихід функції seewave можна використовувати як фічі для класифікатора. Враховуючи, що вихід враховує частоти до 25 kHz, а людські кроки мають, залежно від темпу, такі частоти, я обмежилась частотами до 3 kHz включно (бо маємо ще різні шуми). Це перших 30 коефіцієнтів у виході функції.

Модель.
Як класифікатор використовувала логістичну регресію. яка з точністю 85-100%  (залежно від семплів, які потрапили відповідно в тест та тренінг набір) визначала наявність/відсутність людини.
На цьому етапі все ідеально.

Імплементація моделі в процесі хакатону. Проблеми та шляхи їх вирішення.

Workflow: 

  • зчитати стрім даних з мікрофону
  • періодично перетворювати їх у звуковий файл
  • перевести звуковий файл з часового у частотний діапазон
  • визначати агреговані характеристики спектра
  • класифікувати отримані дані (класи: "людина"/"не людина")
Труднощі, які виникали:
1) R - інструмент для проведення досліджень, перевірки гіпотез. Не дозволяє імпортувати окремі функції з бібліотек, тому потрібно імпортувати бібліотеку повністю. Так як гіпотеза була перевірена - попередня обробка та класифікатор були переписані на python.
2) Кожен мікрофон вносить свої особливості. Фільтрація шуму - окреме питання. Не встигли вирішити.
3) З одного боку, 1 хвилина (і навіть 20 секунд) занадто довгий проміжок для прийняття рішення про ввімкнення/вимкнення світла. З іншого, короткий проміжок часу (1-5 секунд) погіршують точність моделі. Логістична регресія виокристовувалась без регуляризації, тому при зменшенні тривалості до 20 секунд в комбінації із зашумленістю мікрофону перестала бути хорошим варіантом. При заміні на SVM (linear kernel)  точність склала близько 80%. Потрібно знайти оптимальний діапазон - не встигли.
4) Презентація відбувалась в приміщенні наповненому людьми - що ускладнює демонстрацію відключення світла.

2 коментарі:

  1. доволі цікавий й оригінальний підхід, цікаво буде подивитися на подальший розвиток проекту в чому бажаю вам успіху. також може більш актуально використання в приміщеннях - наприклад, в ареопортах, підземних переходах...
    але чи не простіше буде використовувати датчик руху? і навіщо було переписувати на пайтон? доречі, десь можна на сорси подивитися?

    ВідповістиВидалити
    Відповіді
    1. По датчиках руху:рішення з використанням має бути дешевшим.
      Переписала з R на пайтон, оскільки в R використовувалась лише одна функція з бібліотеки seewave. Підгружати всю бібліотеку на обмежених ресурсах - не дуже розумно. Тому була переписана суто функція.

      Видалити