ComputerVision и с чем его едят |
||
МЕНЮ Искусственный интеллект Поиск Регистрация на сайте Помощь проекту ТЕМЫ Новости ИИ Искусственный интеллект Разработка ИИГолосовой помощник Городские сумасшедшие ИИ в медицине ИИ проекты Искусственные нейросети Слежка за людьми Угроза ИИ ИИ теория Внедрение ИИКомпьютерные науки Машинное обуч. (Ошибки) Машинное обучение Машинный перевод Реализация ИИ Реализация нейросетей Создание беспилотных авто Трезво про ИИ Философия ИИ Big data Работа разума и сознаниеМодель мозгаРобототехника, БПЛАТрансгуманизмОбработка текстаТеория эволюцииДополненная реальностьЖелезоКиберугрозыНаучный мирИТ индустрияРазработка ПОТеория информацииМатематикаЦифровая экономика
Генетические алгоритмы Капсульные нейросети Основы нейронных сетей Распознавание лиц Распознавание образов Распознавание речи Техническое зрение Чат-боты Авторизация |
2018-03-22 14:21 С развитием компьютерных мощностей и появлением множества технологий обработки изображений всё чаще стал возникать вопрос: а можно ли научить машину видеть и распознавать образы? Например, отличать кошку от собаки или даже бладхаунда от бассета? О точности распознавания говорить не приходится: наш мозг несравнимо быстрее может понять, что перед нами, при условии, что раньше мы получили достаточно сведений об объекте. Т.е. даже видя только часть собаки, мы можем с уверенностью сказать, что это собака. А если ты — собаковод, то легко определишь и породу собаки. Но как научить машину различать их? Какие существуют алгоритмы? А можно ли обмануть машину? (Спойлер: конечно можно! Точно так же, как и наш мозг.) Попробуем осмыслить все эти вопросы и по возможности ответить на них. Итак, приступим.
Как научить машину видеть? Машинное зрение относится к Machine Learning, куда входят и семантические анализаторы, и распознаватели звуков, и прочее. Это сложная предметная область, и она требует глубоких знаний математики (в том числе, бррррр, тензорной математики). Существует множество алгоритмов, которые применяются при распознавании образов: VGG16, VGG32, VGG29, ResNet, DenseNet, Inception (V1, V2, V3, V… их сотни!). Наиболее популярными считаются VGG16 и Inception V3 и V4. Самый простой, популярный и больше всего подходящий для быстрого старта — VGG16, поэтому выбираем и ковыряем его. Начнем с названия VGG16 и выясним, что же в нём сакрального и как оно расшифровывается. И тут К.О. подсказывает, что всё просто: VGG — это Visual Geometry Group c факультета инженерных наук Оксфордского университета. Ну а 16 откуда? Тут чуть сложнее и уже напрямую связано с алгоритмом. 16 — число слоёв нейронной сети, которое используется для распознавания образов (наконец-то приступили к интересному, а то всё вокруг да около). И уже пора врубаться в самую суть матана. Сами они используют от 16 до 19 слоев и фильтры 3х3 на каждом уровне нейронной сети. Собственно, причин несколько: наибольшая производительность именно при таком количестве слоёв, точность распознавания (вполне достаточно и этого, ссылки на статьи, раз и два). Следует отметить, что нейронная сеть используется не простая, а улучшенная свёрточная нейронная сеть (Convolutional Neural Network (CNN) и Convolutional Neural Network with Refinement (CNN-R)). На основе анализа уменьшенных изображений строятся независимые исходные описания и затем результат усредняется для всех масок. Но следует отметить, что данный вариант не самый лучший при сегментации объекта. Усреднённая маска не всегда может быть применима при небольших различиях цвета между объектами и фоном (вот почему именно такое тестовое изображение было выбрано). Эффектно. Это называется DeepMask — грубые границы объектов на изображении. Попробуем разобраться, почему так. Начнём с простого — с носа. При деградации изображения контраст очевиден, поэтому нос и выделен как самостоятельный объект. То же самое и с ноздрями: на определённых уровнях свёртки они стали самостоятельными объектами за счёт того, что находились полностью на фрагменте. Кроме того, отдельно обведена морда второй собаки (как, не видите? Да вот же она, прямо перед вами!). Кусок руки был признан фоном. Ну что поделать? С основной частью фона по цвету не контрастирует. Зато переход «рука-футболка» выделен. И погрешность в виде пятна «рука-сетка», и большое пятно, захватывающее фон и голову хаски. Нейросеть сказала: «Здесь нет того, кого можно хоть как-то классифицировать». Логично, контрастные только нос и глаза. Не слишком характерно при небольшом наборе для обучения. Ух, жуть какая (прости, друг)! Но здесь мы серьёзно прибавили контраста объектам на изображении. Как? Берём и дублируем изображение (можно несколько раз). На одном выкручиваем контраст, на другом — яркость, на третьем — пережигаем цвета (делаем их неестественно яркими) и потом всё это складываем. И напоследок попробуем запихнуть многострадальную хаски в обработку. Надо сказать, что стало лучше. Не прям «ух, как круто», но получше. Уменьшилось число неполных объектов, появился контраст между объектами. Дальнейшие эксперименты с предварительной обработкой дадут больший контраст: объект — объект, объект — фон. Получим 4 сегмента вместо 8. С точки зрения обработки большого потока картинок (150 изображений в минуту) лучше вообще не заморачиваться с предварительной обработкой. Она — так, поиграться на домашнем компьютере. Запускаем быстро собранное демо и получаем результат — целых 70%, что это собака. Неплохо. Вместо выводов Итак, мы получили картинку и результат, что это собака (нам очевидно, а для нейросети было не очень). Обучение проводилось всего в два шага и не было эволюции модели (что очень важно). Изображение грузилось как есть, без обработки. В дальнейшем планируется проверить, сможет ли нейросеть распознать собак по минимальному набору признаков.
Из минусов: танцы с бубном с каждым фреймворком. P.S. При проведении экспериментов ни одна хаски не пострадала. О том, как собирали, что собирали, сколько граблей, в какие места и прочее — в следующей статье нашего цикла «Машинное зрение для домохозяек». P.P.S. И совсем-совсем резюмируя: серебряной пули не существует, но есть фауст-патрон, который можно обточить напильником. А для быстрого старта были использованы следующие фреймворки: Keras Caffe Tensorflow Источник: habrahabr.ru Комментарии: |
|