Привет, Хабр! Меня зовут Артем Нагуманов, у меня более 15 лет опыта работы в разработке программного обеспечения, управлении проектами, командами и ИТ-отделами.
Меня всегда интересовала тема искусственного интеллекта и компьютерного зрения.
При разработке программного обеспечения меня всегда посещала мысль, а почему бы не добавить хоть какую-то интеллектуальность в корпоративное приложение, чтобы частично или полностью отказаться от участия пользователя в любом процессе, который на первый взгляд кажется абсолютно не формализованным.
Для этого мне каждый раз приходилось проходить весь путь заново: изучать/вспоминать подходящие библиотеки, устанавливать Linux на виртуальную машину, тестировать бесплатные инструменты для создания и обучения нейросетей, находить сетевые архитектуры, которые на данный момент являются венцом человеческого творчества.
в мире искусственного интеллекта.
Процесс этот довольно трудоемкий и не очень веселый.
Однажды, разбираясь в архитектуре другой нейросети, я понял, что пора положить этому конец и создать универсальный инструмент, который возьмет на себя всю рутину.
И все, что мне нужно сделать, это нажать несколько больших стеклянных кнопок и получить результат. Для привлечения внимания на картинке (в первом абзаце статьи) приведен пример распознавания струй воды из оросителя, но обо всем по порядку.
Делаем сервис распознавания
Моя идея была следующая — сделать сайт, на который пользователь сможет загружать любые изображения, нажимать кнопку «Распознать» и получать результат в формате json. Но дело в том, что не существует универсального алгоритма или нейросети, способной найти любые объекты в мире.В результате я решил сделать возможным обучение собственных моделей нейросетей распознаванию нужных нам объектов, используя только сайт и образцы изображений, которые необходимо распознать.
Прежде чем приступить к работе, я проанализировал, какие разработки существуют в мире по этой теме.
Как оказалось, в этом направлении работают многие гиганты IT-индустрии: Яндекс, Mail.ru, Amazon. Главным недостатком было то, что все эти гиганты хотели денег за свои услуги.
Этого мне хватило, чтобы начать собственное развитие.
У меня уже был бэкграунд, и я умел хорошо находить и классифицировать объекты на изображениях, оставалось только собрать всё воедино и сделать удобный интерфейс.
В подавляющем большинстве случаев я использую в своих проектах технологии Microsoft, что существенно повлияло на используемые в этом проекте технологии:
- ASP.NET (язык C#)
- ВебАпи
- JavaScript, JQuery
- MSSQL-сервер
- Питон
- Тензорный поток
В качестве архитектуры нейронной сети я выбрал Mask R-CNN; эта сеть может находить объекты на изображении и классифицировать их.
Все шло более-менее обычно, пока я не дошел до реализации обучения собственных моделей.
Процесс обучения оказался очень дорогим и требовательным к оборудованию.
Конечно, я знал это и раньше, но до этого я мог позволить себе подождать день-два для обучения модели, используя CPU для вычислений.
Но так как задумка была в создании удобного и быстрого инструмента, то я не смог смириться с долгим обучением модели.
Вот и встал вопрос об установке специального сервера с подходящей видеокартой, которая будет поддерживать технологию CUDA( https://ru.wikipedia.org/wiki/CUDA ) и значительно сократит время обучения модели.
Чтобы не раздувать бюджет проекта, я выбрал недорогую видеокарту NVIDIA GeForce GTX 1050 Ti. Параллельно с сервисом я сделал клиент на Windows Forms, который бы позволял проводить тестирование.
На втором этапе я сделал сайт, который по сути является клиентом сервиса.
Я особо не заморачивался с дизайном и даже не взял готовый шаблон; Я написал все сам, используя только то, что Visual Studio предоставляет «из коробки».
На создание и тестирование сайта ушло еще три месяца.
Я был несказанно рад, когда загрузил изображение, выбрал готовую модель для распознавания, нажал кнопку «Распознать» и получил первый результат.
Реальная задача машинного зрения
Пока я работал над системой распознавания, передо мной встала реальная задача — определить положение передней лопаты специальной машины, расчищающей снег на дороге.Для решения этой проблемы я не был ограничен в выборе подхода к решению и с самого начала хотел использовать установку специальных датчиков, определяющих угол наклона лопаты, но быстро отказался от этой идеи.
Как оказалось, эти датчики необходимо постоянно калибровать из-за того, что лопату периодически снимают и заменяют другой, а пообщавшись с коллегами, занимающимися установкой подобных датчиков, я узнал, что эти датчики расположены на улице.
и доступны для диверсий.
Пришла в голову идея проанализировать рабочие органы управления лопатой, но как оказалось, в реальной жизни доходят до того, что лопату убирают, а рабочие элементы подают сигнал о том, что лопата опущена, одним словом, опять же не надежный вариант. Что ж, мне не оставалось ничего другого, как использовать всю мощь службы распознавания.
Я установил в машину камеру, которая смотрит на переднюю лопату, собрал несколько сотен образцов лопаты, пометил их с помощью инструмента VGG, который встроил на сайт, и начал обучение.
Процесс занял около двух часов и на 30-й эпохе я получил вполне приемлемый результат распознавания, точность распознавания составила около 95%.
Чтобы система полноценно работала на автомобиле, ее пришлось доработать: добавить возможность загрузки фотографий по ftp, а не только через API, т.к.
видеокамера позволяла сделать фото и отправить его указанному фтп.
Добавлена возможность сохранять результат в базе данных, а затем через API в течение заданного периода времени получать результаты, анализировать их и фиксировать в системе учета, написанной на 1С, что, кстати, является огромным контролем.
система, которая анализирует тысячи автомобилей одновременно и контролирует множество параметров, таких как пробег, моточасы, топливо в баке, езда, холостой ход и т. д., но это совсем другая история.
Первый вариант управления лопатой уже готов, но опробовать его в бою можно будет только тогда, когда выпадет снег.
Насколько это было легко?
Основная идея сервиса распознавания — простота создания и обучения собственных моделей.Чтобы понять, действительно ли кто-нибудь может создать и обучить свою модель, я попросил своего помощника создать модель распознавания струй воды из разбрызгивателя.
Единственные входные данные, которые я ей дал, это видео работы поливочной машины, снятое из кабины, и адрес службы распознавания.
Вечером я поручил ей эту задачу, а утром, зайдя в систему, увидел готовую модель, которая реально работала.
Ниже скриншот окна, в котором обучается модель.
По мере обучения эпохи модели сохраняются, и мы можем протестировать любую эпоху, не прерывая процесс обучения.
Разработка и использование
Посмотреть пример того, как все работает, можно вживую в видеоклипе .Я долго думал, что если кто-то может создать свою модель, то почему бы не дать возможность поделиться этой моделью с другими пользователями системы.
В результате я добавил раздел, где можно одним кликом разместить удачную модель и ею сможет воспользоваться любой участник.
Услуга полностью бесплатна.
Сейчас я сам использую сервис для решения своих задач по автоматизации процессов на предприятиях, где можно использовать машинное зрение.
В будущем я планирую добавить и другие подходы к распознаванию, а не только нейронные сети.
Буду очень рад, если кто-то еще сможет решить свои проблемы с помощью этого сервиса.
Теги: #Машинное обучение #облачные сервисы #искусственный интеллект #искусственный интеллект #машинное зрение #TensorFlow
-
Как Мы Сделали Нашу Маленькую Unity С Нуля
19 Oct, 24 -
Стартап-Школа: Основы Работы С Сотрудниками
19 Oct, 24