Авторизация

НЕЙРОСЕТЬ НА ДАЧЕ

Отчего не Большой Адронный Коллайдер? Где дача, а где нейросеть? - спросите вы. Однако все гораздо ближе, чем кажется.

Сделать маленькую нейросеть на даче меня сподвигли лень и всегда проигрывающий ей интерес к новым технологиям.

Причина в том, что имея камеры видеонаблюдения и весьма большой архив фотографий (за несколько лет), я так не получил от этой системы того, что хотелось бы получать. Конечно, исходя из современных компьютерных возможностей.

Проблема моего дачного видеонаблюдения в ложных срабатываниях и в накоплении большого количества ненужного барахла в виде фотографий, которые никто не будет смотреть.

Некоторые видеокамеры размещены так, что срабатывают и начинают запись из-за проезжающей рядом машины. Но ведь эта машина едет мимо и ко мне отношения не имеет, она не остановилась и из нее не выходил человек. Поэтому на такую машину лучше бы не реагировать. Это первая цель.

А в качестве второй цели - мне бы хотелось, чтобы в архив сохранялась не только сама фотография (или видео), а и некоторый сопровожающий тег типа "Машина", "Человек", "Собака". Чтобы по этому тегу можно было искать и сортировать большой объем данных.

Для этого мне и потребовалась нейросеть. Но как?

 

О нейросети "очень в двух словах"

Нейросеть это, в данном случае и очень грубо - набор алгоритмов, которые обрабатывают загруженные в них фотографии и строят "модель". Эта модель сопровождается словами-описаниями того, что изображено на картинке и, первоначально, эти слова добавляют люди, которые классифицировали то, что изображено на картинке.

Если вы вспомните капчу гугла, то там иногда всплывает вопрос с просьбой выбрать все картинки, на которых изображены дорожные знаки. Выбирая вы, скорее всего, вносите свой вклад в классификацию фотографий и обучение модели. Ну так продолжим ...

Допустим у вас появилась некоторая обученная "модель" и теперь вы загружаете в программу новую фотографию, которой не было раньше. Например, если модель была обучена на большом количество фотографий автомобиля, (который, как мы понимаем, имеет свои отличительные признаки и здорово отличается от изображения пиццы), то мы загружаем в программу свою фотографию автомобиля и получаем ответ: "Автомобиль с вероятностью 0,85". Чем ближе ваша фотография к тому, на чем была обучена модель, тем больше вероятность верного обнаружения.

Именно это мне и было нужно для моей нейросети.

 

 

Попробуем нейросеть?

Начал я с простого (ха-ха) и по совету товарищей обратился к бесплатной программе TensorFlow от компании Google. На их сайте есть пример того, как можно распознать содержимое своей фотографии с помощью их, гугловой, обученной модели. Они свою модель обучали на многомиллионной базе фотографий imagenet.

Я воспользовался примером на питоне с распознаванием панды https://www.tensorflow.org/tutorials/image_recognition

Панду распознали успешно, а затем я "скормил" в алгоритм фотографию машины, проезжающей мимо моего дачного участка. Фотография сделана с камеры домофона.

 tf

Вау! Вот результат - машина найдена!:

# python classify_image.py --image_file car_and.jpg

sports car, sport car (score = 0.38615)
car wheel (score = 0.18023)
racer, race car, racing car (score = 0.09661)
grille, radiator grille (score = 0.02517)
cab, hack, taxi, taxicab (score = 0.02446)

 

Как видите, это всего лишь одна команда, которая выдает нужный результат, а значит обработать этот вывод проще простого. Можно поместить этот тэг в базу вместе с фотографией ну или в любое другое место. Обработка одной фотографии заняла около 2 секунд.

 

Хорошо, а что же будет, если нет проезжающей машины, а просто пошел снег?

 

empty1

bucket, pail (score = 0.64005)
ashcan, trash can, garbage can, wastebin, ash bin, ash-bin, ashbin, dustbin, trash barrel, trash bin (score = 0.20549)
pot, flowerpot (score = 0.01064)
mailbox, letter box (score = 0.00715)
barrow, garden cart, lawn cart, wheelbarrow (score = 0.00649)

Ну что же, значит подобные "пустые" фотографии будут с тегом "мусорка" и меня это вполне устраивает. Это можно отфильтровать и в качестве тега не сохранять - я и так знаю, что там мусорка. :)

 

 

 

Однако все ли так хорошо?

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

cat1

ashcan, trash can, garbage can, wastebin, ash bin, ash-bin, ashbin, dustbin, trash barrel, trash bin (score = 0.33343)
bucket, pail (score = 0.25852)
shovel (score = 0.01506)
mailbox, letter box (score = 0.01461)
swab, swob, mop (score = 0.01376)

 

Но кошка это все мелочи - на следующей фотографии не найден человек, но, найдена небольшая собачка, которой ошибочно дали другую породу - Грюнендаль :) Очень хорошо что собачку нашли, но где же человек?

person dog1

groenendael (score = 0.25312)
schipperke (score = 0.16223)
Bouvier des Flandres, Bouviers des Flandres (score = 0.07632)
dogsled, dog sled, dog sleigh (score = 0.01775)
Scottish deerhound, deerhound (score = 0.01712)

 

Я начал было думать, что оценке мешает мусорный бак и нашел фотографию, где человек закрывает собой мусорку, в надежде найти в результате распознавания человека, но увы...

person1

ski (score = 0.62018)
dogsled, dog sled, dog sleigh (score = 0.06263)
snowmobile (score = 0.02722)
alp (score = 0.02159)
lakeside, lakeshore (score = 0.01842)

Лыжи, собачья упряжка и снегоход, но вот человека нет :)

 

Предварительный вывод

На этом мой эксперимент закончился, так как система не опознала достаточно важную часть - человека. Виной этому, скорее всего, отсутствие "человека" в той самой модели, на которой была обучена сеть. Значит есть два варинта - найти другую модель или создать свою. Однако, во втором случае классифицировать все придется самому вручную.

У меня скопились сотни тысяч файлов, которые, наверное, можно классифицировать, пересматривать их и отмечать там "человека", но это весьма нудное занятие. Хотя есть шанс, что сеть будет "заточена под себя" и обучена на своем собственном архиве.

Так что попробовать можно :)

Продолжение следует ...

PS: Спасибо системе при помощи которой я организовал удаленное видеонаблюдение на даче!