Последние статьи
- Твердотельный датчик направления и скорости ветра. Эксперимент
- iPhone на стене в качестве панели управления домом
- MegaD-16M-XT - подсветка выключателей и не только
- Переделка выключателей в кнопки и мини-обзор текущего рынка
- RadSens - модульный счетчик Гейгера с интерфейсом I2C
- "U" - значит универсальный. Обзор модуля MegaD-16U-XT
- SCD4x - современная альтернатива для измерения концентрации CO2
- HTU31D - новый датчик температуры и влажности с нагревательным элементом
- Измерение коэффициента пульсации ламп с помощью MegaD-2561
- Использование солнечных панелей в качестве датчика освещенности
- Согласование датчиков с выходом типа TTL со стандартными входами контроллера
- DPS368 - датчик атмосферного давления индустриального класса повышенной точности
- DS18B20 Waterpoof - импортзамещение
- TMP117 - высокоточный датчик температуры с интерфейсом I2C
- MegaD-16R-XT - расширитель на 16 релейных выходов
- MegaD-2561-RTC V3 - больше портов, зуммер и ИОН
Применение нейронных сетей в системах Умного Дома
20/10/2010 17:35:20
Возможно, данная статья устарела.
Все новые статьи
Для чего нужны нейронные сети?
Современный дом можно сделать Умным с помощью тщательно продуманных алгоритмов. Чтобы правильно спроектировать и заложить алгоритмы в электронный мозг Умного Дома, необходимо человеку (программисту) осмыслить задачу, проанализировать множество факторов, аргументов, а также их поведение, если процесс происходит во времени, подобрать нужные методы, определить результат и максимально возможные отклонения от него и, собственно реализовать задуманное.
В большинстве случаев задачи, которые ставятся перед электронной системой Умного Дома поддаются относительно простому решению. Например, необходимо автоматически включить свет по какому-то событию, скажем, по времени. Очевидно, что реализовать механизм автоматического включения освещения не составит труда. Можно усложнить задачу и ввести еще один параметр - данные с датчика освещенности. Ведь в пасмурную погоду свет нужно включать раньше. С первого взгляда вроде бы все просто, но необходимо внести в алгоритм некоторые изменения. Например, датчик освещенности может быть на какое-то короткое время быть затенен человеком, птицей или упавшим листом. Необходимо соотносить показания датчика со временем, а также ввести некоторый интервал, во время которого датчик должен постоянно давать низкий уровень освещенности для того, чтобы принять решение о включении освещения. Этот пример можно усложнять и дальше, но, как правило, всегда можно найти приемлемый алгоритм работы, основанный на анализе возможных входных данных и вероятных жизненных ситуациях.
Однако существует ряд задач, которые трудно решить традиционными аналитическими и расчетными методами. Например, у нас есть изображение с видеокамеры, которая установлена на входных воротах забора и подключена к серверу Умного Дома. Родители не всегда горят желанием давать ключи от дверей и ворот детям, так как высока вероятность утери. В то же время бегать к домофону каждые пять минут, чтобы открыть ворота забора тоже жизнь не облегчает. Возможно ли распознать человека по лицу? Задача для тех, кто имел хоть какое-то отношение к программированию на первый взгляд кажется совершенно нерешаемой, но это не совсем так.
Существуют задачи, в которых присутствуют десятки, сотни, а зачастую и тысячи различных параметров. Найти логические взаимосвязи или построить решение на каком-нибудь алгоритме зачастую бывает чрезвычайно сложно. Обозначенная выше проблема распознавания лиц является сложно алгоритмизуемой. В то же время человеку достаточно беглого взгляда, чтобы точно идентифицировать члена семьи на фотографии.
Как работает нейронная сеть?
Для решения такого рода задач математиками была предложена идея нейронных сетей, своего рода микро-модели человеческого мозга. Общая философия, идея нейронных сетей проста. Человек, будучи ребенком ничего не знает об окружающем мире, но его можно научить. Можно показать ребенку корову, обезьяну, слона и сообщить ему, что это корова, обезьяна и слон. Затем снова показать корову и спросить - что это за животное? Первое время, ребенок будет ошибаться и называть корову обезьяной, но со временем его мозг запомнит изображения и правильные ответы. Причем важной особенностью мозга является способность к обобщению. Если ребенку показать фотографию другой коровы, которую он до сих пор никогда не видел, то он с большой долей вероятности даст ответ, что это тоже корова. Принципиальным моментом тут также является возможность давать нечеткий ответ. Например, ребенок может высказаться следующим образом: "Кажется, это корова" или "Я не знаю что это за животное" или "Конечно, немного похоже на корову, но скорее всего это не корова".
Тоже самое справедливо и в отношении искусственных нейронных сетей. Созданную сеть необходимо обучить. Необходимо показать нейросети пару сотен снимков с уличной камеры различных людей и сообщить какие из этих людей являются "своими", а какие нет. Свежесозданная нейронная сеть в процессе обучения многократно подстраивает свои внутренние параметры (веса) таким образом, чтобы при получении входных данных (фотографии) на выходе получался ответ: свой / чужой или Маша, Даша, Неизвестно совпадающий с правильным ответом в обучающих примерах. И если в последствие в режиме реальной работы обученной нейронной сети показать фотографию человека, то мы с большой долей вероятности получим удовлетворяющий нас ответ, хотя разные фотографии одного и того же человека всегда будут отличаться друг от друга. В этом и заключается уникальная особенность нейронных сетей - способность давать верный результат на новом материале.
Нейронные сети в Умном Доме. Экономия времени
Не буду глубоко вникать в принципы устройства и работы нейронных сетей. По этому поводу написано достаточно много статей и трудов. Отмечу лишь, подытоживая вышесказанное, что в прикладном смысле нейронная сеть позволяет получить приемлемое решение в тех ситуациях, когда трудно найти подходящую функцию, алгоритм от входных параметров или же такая функция потребует слишком сложной реализации и времени. Применительно к Умному Дому значительно проще и быстрее научить сеть на пальцах, то есть на примерах, чем составлять объемные и сложные программы. Другими словами, процесс обучения (или самообучения) сети заменяет процесс традиционного программирования. Иногда это в значительной степени экономит время разработчика.
Применение нейронных сетей в системах Умный Дом
- Системы безопасности
- Системы управления оборудованием (отоплением, водоснабжением, вентиляцией, светом)
- Системы напоминания (подстраиваясь под человека, система может выявить отклонения в его жизни)
- Системы контроля и оценки состояния объектов (самоконтроль системы Умный Дом)
- Системы идентификации
- Системы развлечения (подбор плейлиста композиций, выбор громкости звучания)
Можно придумать множество различных вариантов использования нейронных сетей в системах домашней автоматизации. В этом разделе я буду публиковать свои примеры использования этого подхода.
Однако стоит еще раз подчеркнуть, что применение нейросети возможно только в том случае, если существует возможность обучить ее, то есть имеется набор данных, включающий входные параметры и правильный ответ. Должно быть достаточное количество обучающего материала и этот материал должен быть репрезентативным. Например, если мы обучаем сеть идентификации лиц, то мы должны представить ей фотографии при разной освещенности и в разную погоду, иначе сеть может "сомневаться" и давать промежуточные ответы типа "кажется" или "наверное", не "0.998673", а "0.657319". Тем не менее, на практике часто случаются ситуации когда сеть принимает ошибочное решение и важно иметь механизмы фиксации этих ошибок, чтобы дообучить сеть на тех входных данных, на которых она сделала ошибку. В ряде случаев, когда у нас нет накопленных данных для обучения, можно попробовать обучить сеть на синтетических данных, на примерах, которые мы сами придумали. В любом случае стоит помнить, что качественное обучения является залогом правильной работы программы. Это, пожалуй, справедливо и для человека.
Нейронная сеть - это всего лишь простой набор функций
Не стоит переживать по поводу сложной внутренней реализации математики нейросетей. С точки зрения пользователя нейросеть - это обычная функция в языке программирования, которая, используя обучающий материал и реальные данные, пытается выдать правильный ответ.
В общем смысле программа, использующая готовую библиотеку, которая в свою очередь реализует сложнейшие подходы к построению и обучению нейронных сетей, выглядит так.
1. Создать_сеть(набор характеристик)
2. Обучить_сеть(набор обучающих данных)
3. Спросить_сеть(набор реальных данных)
На выходе последней функции мы получим ответ, форма которого зависит от характеристик сети и того, чему мы обучали сеть. Сеть выдает значения от 0 до 1 и наша задача правильно интерпретировать этот ответ. Это может быть простой ответ "да" или "нет" или сложный - аппроксимация какого-то графика или элемент классификации. Преобразовать ответ в реальные значения можно тем же алгоритмом, которым производилось масштабирование даных при обучении. Об этом речь пойдет дальше.
Существует множество программных пакетов, библиотек для разных языков программирования. Я попробовал воспользоваться бесплатной библиотекой FANN. Подробнее в статье "Анализ изображений с помощью нейронной сети".
Автор: Andrey_B
Любое использование материалов сайта возможно только с разрешения автора и с обязательным указанием источника.
Добавить комментарий:
Сортировка комментариев: Последние сверху | Первые сверху
2014-08-21 06:14:38 | Александр
Возможно ли управление IP камерой с помощью обученной нейронной сети?
Т.е при срабатывании датчика движения, включается анализ изображения на предмет выделения лица, зум на него,от него, а затем ведение по силуэту человека?
Просто есть домашний сервер, есть несколько FHD PTZ камер, благо они не сильно дорогие. Хочется организовать описанную выше схему.
2014-08-26 12:49:03 | Andrey_B
Александр, думаю, мало невозможного в этой жизни...