![]() |
![]() |
![]() |
![]() |
Обнаружение объектов. Часть 2: Локализация и классификация |
|
МЕНЮ Главная страница Поиск Регистрация на сайте Помощь проекту Архив новостей ТЕМЫ Новости ИИ Голосовой помощник Разработка ИИГородские сумасшедшие ИИ в медицине ИИ проекты Искусственные нейросети Искусственный интеллект Слежка за людьми Угроза ИИ ИИ теория Внедрение ИИКомпьютерные науки Машинное обуч. (Ошибки) Машинное обучение Машинный перевод Нейронные сети начинающим Психология ИИ Реализация ИИ Реализация нейросетей Создание беспилотных авто Трезво про ИИ Философия ИИ Big data Работа разума и сознаниеМодель мозгаРобототехника, БПЛАТрансгуманизмОбработка текстаТеория эволюцииДополненная реальностьЖелезоКиберугрозыНаучный мирИТ индустрияРазработка ПОТеория информацииМатематикаЦифровая экономика
Генетические алгоритмы Капсульные нейросети Основы нейронных сетей Распознавание лиц Распознавание образов Распознавание речи Творчество ИИ Техническое зрение Чат-боты Авторизация |
2024-02-11 18:00 ![]() Простая локализация и классификация объектов с использованием сборки сверточной нейронной сети с помощью Tensorflow/Keras на Python. В моем предыдущем посте я писал о простой проблеме локализации объекта: предсказании ограничивающей рамки одного прямоугольника на нейтральном фоне. Однако этот подход был ограничен одной формой и не позволял различать несколько форм. В этом посте я решу эту проблему, расширив предыдущую модель, чтобы она могла классифицировать и форму объектов. Для этого я создам простой игрушечный набор данных и построю простую CNN с двумя головками: головкой регрессии для прогнозирования ограничивающей рамки и головкой классификации для распознавания формы. Задание Входные данные сети — это ![]() У сети две основные цели: локализация объекта и классификация формы. Локализация происходит путем прогнозирования ограничивающей рамки фигуры, которая имеет форму Создать набор данных Как и в предыдущем посте, я создам набор данных самостоятельно, используя numpy и OpenCV. Визуализация осуществляется с помощью matplotlib. Изображения будут иметь форму
Создание прямоугольников довольно простое. Сначала
Изображение круга генерируется аналогичным образом, но вместо генерации случайной ширины и высоты случайным образом генерируется радиус.
Наконец, нам нужна функция для создания треугольников. Это делается путем генерации случайных
Теперь мы можем собрать все вместе и создать наш набор данных следующим образом.
Позже мы также реализуем функцию, которая преобразует вектор горячего кодирования в письменную метку. Например,
Теперь давайте отобразим некоторые из наших данных, чтобы проверить, правильно ли они сработали.
![]() Подготовьте данные При обработке изображений принято нормализовать значение пикселя по центру вокруг 0, что я и сделаю, разделив значения изображения на 255 (максимальное значение RGB) и вычитая 0,5. Кроме того, я перетасую данные, так как на данный момент образцы заказаны.
Следующим шагом является разделение набора данных на обучающий, проверочный и тестовый набор.
Сверточная нейронная сеть Цель сети — предсказать ограничивающую рамку, а также класс объекта. Следовательно, у нас есть регрессия, а также проблема классификации. Для задач регрессии среднеквадратическая ошибка обычно является подходящей функцией потерь, тогда как для задач классификации часто лучше использовать категориальную перекрестную энтропию. Кроме того, для классификации обычно используется функция активации Softmax, поскольку она преобразует выходные данные в распределение вероятностей, где каждый выходной сигнал находится в диапазоне, Следовательно, чтобы иметь как результаты классификации, так и результаты регрессии, нам нужно разделить выходные данные сетей на две части. Тогда архитектура будет следующей: ![]() Для двух голов сети (регрессии и классификации) нам нужно разделить целевой вектор
Теперь пришло время построить окончательную модель. Эта сеть не представляет собой линейный стек слоев, поэтому нам нужно использовать функциональный API Tensorflow, который позволяет реализовать две выходные головки.
Как вы можете видеть в этом блоке кода, мы сначала создаем простой линейный стек сверточных слоев и слоев с максимальным пулом, которые свертывают изображение. Затем входные данные сглаживаются и добавляется выпадающий слой, чтобы предотвратить переобучение. Теперь самое сложное. Выходные данные слоя исключения передаются как в плотный слой для классификации с активацией Softmax, так и в плотный слой для регрессии. Чтобы лучше представить себе, что произошло, давайте построим модель.
![]() Теперь ясно видно, что выходные данные слоя исключения передаются как в классификацию, так и в головку регрессии. Пришло время скомпилировать модель.
Я использую Оптимизатор Адама и два разных Потери, по одному на каждую голову. Головка классификации обучается с использованием категориальной перекрестной энтропийной потери и головы регрессии со среднеквадратической ошибкой. Пришло время обучить модель. Здесь важно передать разделенную версию целевого вектора
Обучение модели в течение 35 эпох на моей установке (графический процессор: Nvidia GeForce GTX 1050 Ti, процессор: Intel i5-3470) занимает около 3 минут 57 секунд. Полученные результаты Оценивая историю процесса обучения, можно увидеть, как уменьшаются потери обеих головок, а точность классификации увеличивается с течением времени. ![]() Давайте оценим модель на (невидимых) тестовых данных.
В классификации модель работает достаточно хорошо, с потерей точности Но и потеря среднеквадратической ошибки для регрессии ограничивающего прямоугольника кажется хорошей. Опять же, как упоминалось в предыдущем посте, точность регрессии ограничивающей рамки не является хорошим показателем оценки. Среднее значение пересечения по объединению здесь является лучшим показателем точности.
Среднее Пересечение над Союзом ![]() Каждая из фигур была правильно распознана, и каждая ограничивающая рамка была предсказана относительно точно. Заключение В этом сообщении блога мы создаем простую сверточную нейронную сеть, которая способна локализовать и классифицировать фигуру на нейтральном фоне. Для этого мы разделили голову сети на голову регрессии и классификации ограничительной рамки. Однако по-прежнему существует недостаток: модель может классифицировать и локализовать только один объект на изображении. Как мы можем классифицировать и локализовать несколько объектов на изображении? В следующем посте я попытаюсь решить эту проблему и построить модель, которая сможет распознавать несколько фигур на изображении. Если у вас есть какие-либо комментарии или сомнения по поводу того, что я уже сделал, не стесняйтесь оставлять комментарии или писать по электронной почте. Источник: johfischer.com Комментарии: |
|