Нейросети для чайников от чайника.
Приветствуется конструктивная критика, предложения и свой опыт с нейросетью!
Я добавил метод реализации "API" который мне в комментах подсказали! За что еще раз ОГРОМНОЕ СПАСИБО, для меня это новый опыт!
В ниже описанном примере, я использую пример с дефолтным набором цветов! Советую проделать все шаги поэтапно, что бы после самим переобучить под свои нужды данную нейроскеть! Это не трудно, даже если вы не программист!
Я не думаю, что я смогу Вам лучше объяснить откуда взялась эта нейросеть и как она работает,в сравнении с челом с youtube https://www.youtube.com/watch?v=KL-zI-2Ifrs
Начнем!
Скрипт запускаем так:
python api_label_image.py --graph=/tmp/output_graph.pb --labels=/tmp/output_labels.txt --input_layer=Placeholder --output_layer=final_result --image /home/user/flower_recognition/12345.jpg
где /home/user/flower_photos/recognition/12345.jpg - это путь до файла неопознаного цветочка, который нейросеть должна класифицировать!
В результате Вы сразу получаете в объекте значение свойств
б) Решение при помощи посредника «MQTT» пишем в свойство объекта.
Я оставил этот пункт, пусть останеться как пример таким же новичкам в программировании как и я.
Сохраняем скрипт "mqtt_label_image.py" код берем от сюда. https://raw.githubusercontent.com/ZergOfSwarm/neur...
Это скрипт немного мною "допилен" что бы результат расспознания выводило в MojorDomo в модуль MQTT а далее его к объекту... Все мои изменения кода я коментировал и вы легко их сможете отследить и разобраться, что и для чего! Оригинальный, не тронутый мною код label_image.py для сравнения можно скачать от сюда https://github.com/tensorflow/tensorflow/blob/mast...
Теперь, когда у нас все есть для дообучения нашей нейросети. Будем дообучать ее, в данном случае нашими цветочками!
a) Запускаем виртуальную среду python в которой установлен "tensorflow" v1.15
И в ней запускаем скрипт retrain.py для обучения нашей сети указав путь до наших цветочков. Команда должна выглядеть так:
python retrain.py --image_dir /home/user/flower_photos
где /home/user/flower_photos - это путь до скаченного, разорхивированного набора цветов
У меня, на моем игровом ноуте, котороый на момент написании этой статьи удерживает уверенно середину по производительнсти заняло 7 мин. времени
После чего в папке /tmp появляются 2 файла
output_graph.pb
output_labels.txt
Вы их скопируйте куданибудь, что бы не проделывать эту долгую процедуру каждый раз после перезагрузки компа т.к. содержимое папки /tmp удаляется полностью при выключении/перезагрузки компа!
b) Запускаем разпознаение неопознаного цветочка при помощи команды
python mqtt_label_image.py \
--graph=/tmp/output_graph.pb \
--labels=/tmp/output_labels.txt \
--input_layer=Placeholder \
--output_layer=final_result \
--image /home/user/flower_photos/recognition/12345.jpg
где /home/user/flower_photos/recognition/12345.jpg - это путь до файла неопознаного цветочка, который нейросеть должна класифицировать! По окончанию выполнения скрипта в терминале у вас будет вывод примерно такой! (При условии, что Вы эксперементируете с набором цветом из 1-го пункта)
Так же в MajprDomo в модуле MQTT (при условии, что Вы не забыли указать "IP" адресс от MQTT в пункте №4) появится токен с примерно таким сообщением.
Далее 1. Создаем новый класс 2. в нем создаем объект и в объекте создаем 3 свойства a) array/массив б)name/имя в) probability/вероятность. Вот мой пример
Далее в модуле MQTT привязываем наш токен "nn_of_zerg" к созданному объекту.
Создаем метод который будет отрабатывать каждый раз при изменении свойства объекта!
Метод к примеру назовем calculation_probability код которого берем здесь https://github.com/ZergOfSwarm/neural_network_clas...
У Вас должно примерно быть так
После всех проделанных шагов которые описанны выше результат распознания так же будет проговариваться Алисой, в моем случае Муркой.
Подведем итог: Зачем это нужно? Я планирую создать умный будильник, который будет в буквальном смысле видеть разбудил ли он меня или нет? Сделаю фото сет кровать без меня и кровать со мной, как укрытым полностью под одеялом так и без одеяла. Если я встал и на кровати меня нет то, перестать меня будить в противном случае...
Так же можно сделать фото сет открыта дверь/окно/ворота или закрыта/то/ты, убранна комната или нет?
А если у Вас производство чего либо то, отсотировывать бракованный товар который движется по ленте...
Встает вопрос как делать фото сеты нужные только вам и которые не найти в google? И которых нужно рельно много как минимум от 200 шт к примеру открытой двери и столько же закрытой двери.
Я делаю так!
Зная количество кадров в секунду которая делает моя камера при записи в mp4. К примеру 30 кадров в секунду то в записи всеголишь 60 секунд мы получим 1800 фото кадоров!
Вот ссылка на код который позволяет сделать фото каждого кадра из Вашего .mp4 видео файла. https://github.com/ZergOfSwarm/neural_network_clas...
в скрипте в 6-й строке замените название guitar.mp4 на имя Вашего файла
И последнее, что бы увеличить скорость обучения Вашей сети можно уменьшить размеры Ваших фотосетов! А как это сделать если камера пишет в "HD"? Вот ссылка на другой скрипт который я нашел в инете https://github.com/ZergOfSwarm/neural_network_clas...
Скрит нужно запускать в той же папке в которой находятся фотографии. При помощи команды
python transform_image_resolution.py -d /home/user/image/ -s 800 600
где /home/user/image/ - это путь где находятся фото
а 800 600 - это разрешение будущих фото.
Подберите свое значение методом проб и ошибок. Если посмотрите разрешение из примера фотосета цветов то, он в среднем 120 100.
Yashalta, Россия
На форуме: Yashalta