1. Аннотация

Одной из высокоуровневых операций обработки в компьютерном зрении является распознавание. Процесс распознавания в основном основан на категоризации объектов с использованием их основных отличительных характеристик. С помощью предлагаемой нами методологии мы предоставляем систему распознавания цветов для набора данных цветов «Лепестки в металл» с использованием методов обработки изображений и сверточных нейронных сетей (CNN).

2. Введение

Существует более 5 000 видов млекопитающих, 10 000 видов птиц, 30 000 видов рыб и поразительно более 400 000 различных видов цветов. Из-за этого разнообразия правильное определение каждого вида до нужного типа является сложной задачей для людей. Однако, учитывая большое разнообразие цветов, форм и текстур цветов, мы полагаем, что использование этих признаков позволит нам создать широкий набор методов классификации. В этой статье мы собираемся использовать CNN для правильной маркировки изображений цветов примерно по 100 различным классам. Мы также будем экспериментировать со средами выполнения Tensor Processing Unit (TPU), чтобы попытаться эффективно запускать модели.

3. Сбор/описание данных

Данные взяты с Kaggle. Каждая отдельная точка данных состоит из идентификатора, метки класса и изображения, представляющего собой массив пикселей. И в поезде, и в тестовом наборе есть тысячи изображений, с которыми можно работать. Мы выполним EDA, чтобы получить больше информации о наборе данных в будущем.

4. Предварительная обработка и исследование данных

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

5. Обучение/моделирование

VGG16

VGG16 — это CNN с 16 взвешенными слоями и 5 объединяющими слоями. 16 взвешенных слоев состоят из 13 сверточных слоев и 3 плотных слоев, а все 5 объединенных слоев являются максимальным объединением, которое возвращает максимальное значение для каждой части изображения, охватываемой ядром. Что делает эту модель уникальной, так это то, что размер изображения не меняется, когда оно проходит через слои свертки, потому что оно имеет фильтр с шагом 1 и использует то же заполнение. Однако каждый раз, когда он проходит через слои пула, его размер уменьшается в 2 раза, поскольку он имеет фильтр с шагом 2. Поскольку VGG16 — одна из самых простых реализованных нами моделей, мы не ожидали точной производительности. Он набрал 0,04652 базового уровня, что в 4,8 раза лучше, чем случайное предположение.

Ренет

Точность большинства архитектур CNN быстро снижается, когда они становятся сложными и превышают максимальный порог глубины, потому что наличие многих слоев приводит к тому, что влияние изменений весов мелких слоев становится незначительным. Resnet — одна из первых моделей, использующих пропущенные соединения для решения этой проблемы исчезающего градиента. Пропустить соединения позволяют Resnet построить более сложную модель, пропуская любые слои, которые негативно влияют на ее производительность. Мы ожидали, что Resnet вернет один из самых точных результатов классификации среди наших шести моделей, поскольку он известен своей отличной производительностью при классификации изображений. Однако оказывается, что его точность составляет всего 0,00874, что даже хуже случайного предположения. Мы считаем, что сможем повысить производительность модели, если выполним аугментацию данных и еще больше настроим модель.

Начальная версия 3

ResNet использует пропуск соединения для увеличения глубины модели и повышения производительности. Однако обучение занимает много времени, потому что объем вычислений увеличивается по мере углубления.

Увеличение размера модели увеличивает объем вычислений, что является недостатком при использовании в мобильной или ограниченной памяти. Inception v3 использует глубокую 42-слойную нейронную сеть с менее чем 25 миллионами параметров и имеет вычислительный объем, аналогичный объему вычислений VGGNet.

Что такое факторизованные свертки в начале v3? Модель Inception v3 использует факторизованные свертки, которые увеличивают размер модели в направлении минимизации объема вычислений. Как показано ниже, имеется свертка 5x5.

Чтобы сделать его лучше, Inception v3 превращает свертки 5x5 в две свертки 3x3, чтобы уменьшить количество вычислений и параметров. Поскольку Inception v3 является обновленной версией предыдущих версий, рекомендуется в любое время разлагать фильтры, размер которых превышает свертку 3x3, на свертку 3x3, чтобы результат был более точным и точным.

С нашими данными Inception v3 получил оценку F1 примерно 0,578, что более чем в десять раз лучше, чем у VGG16.

Открытие

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

Архитектура Xception состоит из 14 модулей, всего 36 сверточных слоев. И использовать резервное соединение. Если вы посмотрите на рисунок ниже, структура показана в деталях. Входное значение проходит через поток Entry и проходит через средний поток 8 раз. И он проходит через выходной поток.

С нашими данными Xception получил примерно 0,566, что немного ниже, чем у Inception.

MobileNet v2

MobileNet — это класс небольших маломощных моделей с малой задержкой, которые можно использовать для классификации. Он имеет 4,2 миллиона параметров, что довольно мало по сравнению с другими более крупными моделями, а их размер делает их отличными для мобильных устройств. MobileNet снова имеет разделяемые свертки по глубине, но оптимизирована для максимальной точности с учетом ограниченных ресурсов на мобильных устройствах. Это быстрее и меньше, но есть компромисс. Его точность может быть не такой высокой, как у других ресурсоемких моделей, но разница в точности не слишком велика. MobileNet имеет 53 уровня в глубину и получила оценку F1 0,67413. Это наша самая производительная модель до любого дополнения или настройки данных.

DenseNet201

DenseNet — это модель, которая увеличивает глубину сверточной сети. Входные данные для следующего слоя представляют собой объединение всех входных данных предыдущего слоя, что позволяет получить действительно глубокую карту объектов с тем же пространственным разрешением. В качестве алгоритма классификации изображений он был разработан для повышения точности модели за счет решения проблемы с исчезающими градиентами. Когда у нас есть много скрытых слоев между входными и выходными слоями, информация может исчезнуть, не дойдя до места назначения. DenseNet решает эту проблему, объединяя всю информацию между слоями. Эта модель имеет глубину 201 слой, отсюда и ее название, и является базовой моделью для наших данных. Он получил оценку F1 0,63843, что не так высоко, как у MobileNet v2, но с настройкой и расширением мы видим, что оценка резко увеличивается.

6. Расширение данных

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

Data Augmentation немного изменяет и создает новые копии исходных данных. Он предназначен для предотвращения переобучения, а также может повысить точность данных обучения. Причина этого в том, что даже самая маленькая обученная модель имела миллионы параметров, и подгонка этого комплекса моделей к изображениям порядка тысячи просто не очень хорошо работает. Вот тут и приходит на помощь увеличение данных. Даже с помощью чего-то такого простого, как RandomFlip, мы можем эффективно удвоить размер нашего тренировочного набора и получить гораздо лучшие результаты.

Тем не менее, это очень медленно, и требуется больше времени для обработки дополнительных данных, созданных в результате увеличения данных, поэтому в итоге мы добавили только случайное вращение, сдвиг, масштабирование и сдвиг и попробовали увеличение только двух лучших базовых данных. у нас были модели MobileNet и DenseNet.

Выше приведены другие уровни увеличения данных, которые предлагает TensorFlow, и с ними определенно можно поэкспериментировать для дальнейшего улучшения.

Случайное вращение

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

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

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

Случайный сдвиг

Что RandomShear делает, так это выбирает ось, наклоняет изображение и растягивает его под углом. Это определенно может напоминать RandomRotation, но при вращении растяжение не выполняется.

Случайное масштабирование

RandomZoom очень интуитивно понятен. Он выбирает ось, а затем растягивает ее по вертикали или горизонтали. Работает как увеличение, так и уменьшение.

Случайный сдвиг

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

7. Сводка результатов

Из обученных моделей MobileNet и DenseNet продемонстрировали лучшие макроэкономические показатели F1 выше 0,6. Inception и Xception не сильно отставали. Тем временем VGG и Resnet поступили хуже всех. В то время как VGG по-прежнему работал примерно в 5 раз лучше, чем случайное предположение, Resnet работал хуже, чем угадывание, даже с повторными запусками. Обычно мы ожидали, что Resnet будет работать намного лучше, вероятно, около 0,6 с другими моделями, но в коде, похоже, не было никаких проблем, и это не казалось случайностью. Возможно, архитектура модели ResNet по какой-то причине плохо обрабатывала этот конкретный набор данных.

Также видно, что MobileNet на сегодняшний день является наиболее эффективным, где мы измеряли эффективность по показателю/время * 10000. DenseNet немного менее эффективен, чем Inception и Xception, несмотря на более высокий балл из-за значительно большего времени.

После увеличения данных использование 5 эпох заняло примерно столько же времени, сколько и более ранние 12 эпох, поэтому мы использовали его в качестве нового режима сравнения. MobileNet работала хуже, хотя использовала почти такое же количество времени в течение секунды, как и предыдущий запуск. Между тем, DenseNet был не только быстрее, но и лучше. Тренировка до полных 12 эпох привела к дальнейшему улучшению макропоказателя F1.

8. Заключение

Мы пришли к очень экономящему время выводу: использование TPU значительно ускоряет обработку изображений. Модели могли занять дни на процессоре, часы на графическом процессоре, но всего несколько минут на ТПУ. Частично мотивация самого соревнования по классификации цветов заключалась в том, чтобы познакомить людей с ТПУ, и эта цель была достигнута очень хорошо.

Tensorflow имеет множество доступных нам моделей, которые легко импортировать и использовать, подобно моделям обучения Scikit. Мы использовали только VGG, Resnet, Inception, Xception, MobileNet и DenseNet, но есть еще много других моделей, которые можно попробовать только в библиотеке Tensorflow, не говоря уже о моделях из других библиотек, таких как PyTorch, или найденных в Интернете, таких как YoloV5.

Из 6 опробованных моделей MobileNet и DenseNet продемонстрировали наилучшие результаты, используя предварительно обученные базовые модели с оценкой F1 0,67 и 0,63, а после увеличения данных MobileNet работала хуже в течение того же периода времени, в то время как DenseNet значительно улучшилась. Наша лучшая модель, DenseNet, набрала 0,93 балла F1 примерно за 24 минуты.

9. Дальнейшие действия

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

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

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

Наконец, мы могли бы создать приложение для распознавания цветов. Модель уже имеет оценку F1 0,93, что очень хорошо, поэтому ее можно использовать напрямую и она будет точной в подавляющем большинстве случаев. Сам DenseNet201 занимает около 77 мегабайт, что довольно много, но не слишком много для современных устройств, поэтому его можно использовать напрямую.

9. Ссылки на авторов

Виктор Лай — https://www.linkedin.com/in/victor-lai2023/

Брюс Ким — www.linkedin.com/in/bruceskim

Моника Мартинес — https://www.linkedin.com/in/monica-a-martinez/

Оливия Ли — https://www.linkedin.com/in/olivia-ryunghee-lee/

Вивек Дхулипалла — https://www.linkedin.com/in/vivek-dhulipalla/