Введение

Компьютерное зрение заключается в преобразовании изображений и видео в сигналы, которые можно понять и обработать. Некоторые из самых больших и фундаментальных задач компьютерного зрения - это распознавание объектов и / или классификация изображений. Кроме того, в последние годы глубокое обучение сыграло важную роль в сфере машинного обучения и искусственного интеллекта, оно основано на искусственных нейронных сетях, которые были обнаружены в пятидесятых годах, но с 2010 года оно потенциально увеличилось благодаря математическим улучшениям, предоставленным Джеффри Хинтон, большие данные и использование графических процессоров.

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

Искусственная нейронная сеть (ИНС)

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

Рисунок 1: Представление искусственной нейронной сети. Изображение извлечено из [11].

Скрытый слой, где могут быть расположены N слоев с M нейронами, - это то место, где хранится ответственность каждой части изображения со своим собственным весом или влиянием, чтобы определить результат. После каждой итерации вычисленное значение и ожидаемое значение сравниваются. Затем он применяет обратное распространение, при котором рассчитывается вес данного нейрона на нейрон в следующем слое и регулируется его влияние. Этот процесс повторяется снова и снова, и именно так сеть учится на соответствующих характеристиках объекта, извлеченных из данных.

Сверточная нейронная сеть (CNN)

Сверточный слой извлекает элементы из изображения, занимая все пиксели. Он создает карту объектов.

Рисунок 2: Пример создания карты объектов на основе информации о пикселях. Изображение извлечено из [11].

По сути, он формирует представление части изображения. фильтр используется для построения представления изображения, а размер фильтра определяет, какая часть изображения и сколько пикселей проверяется в данный момент. Обычное значение размера фильтра - 3, таким образом, это покрывает 3 x 3 высоты и ширины.

Однако изображения имеют высоту, ширину и глубину. Глубина - это количество каналов, по которым эти изображения анализируются, изображения в градациях серого имеют только 1 цветовой канал, в то время как цвета имеют 3 канала глубины. Для цветных изображений глубина определяется значением RGB для каждого отдельного пикселя. Тогда для цветных изображений размер фильтра составляет 3 x 3 x 3. Этот фильтр перемещается и получает представление по всему изображению в зависимости от параметра под названием шаг, который определяет, сколько пикселей должно быть пропущено в чтобы вычислить новые значения представления.

Рисунок 3: Пример работы сверточных нейронных фильтров. Изображение извлечено из [28].

После всего этого процесса создается карта объектов, которая обрабатывается с помощью функции активации или слоя активации. По сути, функция активации определяет выход узла из набора входов, например, состояние «ВКЛ» (1) или состояние «ВЫКЛ» (0).

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

Существует несколько способов объединения, на рисунке 4 показано максимальное объединение, которое является наиболее часто используемым. По сути, требуется максимальное значение этих пикселей.

Рисунок 4: Пример максимального объединения. Изображение извлечено из [11].

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

Тест сверточной нейронной сети

Предыдущие исследования определили отличный тест с использованием различных сверточных глубоких нейронных сетей:

· Alexnet [1] показал, что контролируемое обучение с помощью глубоких сверточных нейронных сетей может дать невероятные результаты с огромным и сложным набором данных, и отмечает, что глубина сверточной нейронной сети действительно важна.

· VGG [2] (очень глубокие сверточные сети) демонстрирует, что более широкая сеть, такая как Alexnet, но более глубокая с 19 сверточными слоями вместо 5, превосходит предыдущую сверточную сеть. Кроме того, VGG также продемонстрировала, что фильтры свертки большего размера, 11x11 или 7x7, используемые Alexnet, могут быть заменены несколькими маленькими фильтрами свертки 3x3, улучшая производительность при одновременном снижении затрат на вычисления.

· GoogLeNet [3] представляет собой инновацию в сверточной сети с асимметричной сетью, состоящей из модулей, называемых начальным модулем, и сеть предназначена для снижения вычислительных затрат и обеспечения практичности. Фактически, чтобы снизить вычислительные затраты, вызванные свертками 3x3 и 5x5, свертка 1x1 используется для вычисления сокращения. Более того, начальный модуль использует слои max-pooling с шагом 2, чтобы вдвое уменьшить разрешение. По сути, GoogLeNet состоит из тех начальных модулей на более высоких уровнях, которые уменьшают вычислительные затраты этих уровней, затем он может стать глубже с традиционными сверточными нижними уровнями.

· ResNet [4] решает одну из самых больших проблем для сети VGG. В более глубоких сверточных сетях градиент исчезает, и обратное распространение через более глубокие слои незначительно. Конфигурация Resnet использует интеллектуальный способ распространения информации для предыдущих уровней с помощью ярлыков на более глубокие уровни. По сути, он состоит из 34 сверточных слоев, в основном с фильтрами 3x3 с полосой 2, и заканчивается слоем со средним объединением и 1000-канальным полностью связанным слоем с softmax.

· Xception [5] предлагает производную парадигму архитектуры сверточной нейронной сети от сети Inception. По сути, эта новая архитектура основана на разделимых по глубине слоях свертки, которые делятся на слои на входном, среднем и выходном потоках. Таким образом, данные сначала проходят через входной поток, затем в средний поток и, наконец, в выходной поток. Действительно, архитектура Xception имеет 36 сверточных слоев, которые структурированы в 14 модулей: 4 модуля для входного потока, 1 модуль x 8 раз для среднего потока и 2 модуля для выходного потока. Все эти модули имеют линейные остаточные связи, за исключением первого во входном потоке и последнего в выходном потоке, а затем применяют пакетную нормализацию [6]. Таким образом, эта сверточная нейронная сеть независимо вычисляет свертку для каждого канала, а затем объединяет их, чтобы получить результат. Следовательно, Xception уменьшает количество соединений между уровнями, предоставляя меньше параметров.

· MobileNet [7] разработан на основе разделяемых по глубине сверток, за исключением первого слоя, который представляет собой общий слой свертки. За каждым сверточным слоем следует пакетная нормализация и нелинейность ReLU, кроме последнего, у которого есть слой softmax для классификации. MobileNet состоит из 28 уровней с учетом глубинной и точечной сверток, которые представляют собой уровни, которые уменьшают разрешение до 1 с помощью свертки 1x1 (с последующей пакетной нормализацией и ReLU) перед следующим соединенным слоем.

· NASNet [8] основан на повторяющейся сети [9] для создания сверточных архитектур. При поиске нейронной архитектуры контроллер используется для создания архитектурных гиперпараметров, используемых нейронными сетями, поэтому рекуррентная нейронная сеть контроллера оптимизирует архитектурные гиперпараметры, повторяющиеся по сети, чтобы максимизировать ожидаемую точность проверки. NASNet ориентирован на построение масштабируемой архитектуры, поэтому он состоит из двух типов сверточных ячеек: нормальных сверточных ячеек, которые возвращают карту характеристик с тем же размером входных данных, и сверточных ячеек сокращения, которые возвращают карту характеристик, уменьшенную на 2 по размерности. В этой архитектуре рекуррентная сеть применяет алгоритм для ее оптимизации.

· EfficientNet [10] построен на основе NASNet , но он определяет три параметра alpha, beta, rho для управления глубиной, шириной и разрешением сверточной сети соответственно. Таким образом, эти параметры могут настраивать сеть в соответствии с различными требованиями даже без огромных затрат на компьютер (большой графический процессор вообще не нужен). Он также предоставляет различные варианты для этих требований, например, если требуется высокая точность, EffientNet-B7 с параметрами 600x600 и 66M может быть отличным вариантом. Несмотря на то, что требуется меньшая задержка и меньшая модель, EfficientNet-B0 с параметрами 224x224 и 5,3M является вариантом.

Keras и TensorFlow 2.0

TensorFlow 2.0 - это комплексная платформа машинного обучения с открытым исходным кодом, которая упрощает создание и развертывание моделей машинного обучения, созданных для Python командой Google Brain [23]. Он обеспечивает четыре ключевые возможности: 1) Отличная производительность при низкоуровневых тензорных операциях на CPU, GPU. 2) Вычисление градиента произвольных дифференцируемых выражений. 3) Масштабирование вычислений для многих устройств. 4) Экспорт модели для внешних исполняемых программ или устройств. Кроме того, он компилирует несколько современных алгоритмов и моделей, позволяющих реализовать глубокие нейронные сети для распознавания / классификации изображений и обработки естественного языка (NLP).

Keras - это высокоуровневый API, разработанный TensorFlow 2.0 для людей. Keras - это доступный, высокопроизводительный интерфейс для решения задач машинного обучения, ориентированный на современное глубокое обучение. Более того, он обеспечивает отличную абстракцию и строительные блоки, которые облегчают разработку и доставку решений для машинного обучения, даже обеспечивая высокую скорость итераций. Это позволяет всему исследовательскому сообществу использовать всю мощь и преимущества TensorFlow 2.0.

Примеры реализации методов компьютерного зрения

Вступление

Мы будем работать с двумя примерами, чтобы объединить знания и продемонстрировать, что одну и ту же модель можно использовать с разными наборами данных для создания системы классификации. В основном базовая модель будет идентична, но будут использоваться разные наборы данных. Первый набор данных состоит из изображений МРТ головного мозга опухоли, а второй - из изображений пород собак.

1. Обнаружение опухоли головного мозга

Набор данных

Набор данных [12] состоит из изображений МРТ. Эти МРТ-изображения представляют два разных класса: первый - со здоровым мозгом, а второй - с опухолью мозга.

Подготовка данных

Изначально собранные данные, описанные в предыдущем разделе, должны быть предварительно обработаны или подготовлены. В этом случае данные были обработаны путем изменения размера до 224 x 224 пикселей из-за предварительных условий сверточной нейронной сети (EfficientNetV0).

new_image_array = cv2.resize (img_array, (IMG_SIZE, IMG_SIZE))

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

Увеличение данных в python может быть выполнено с помощью следующего класса ImageDataGenerator:

from keras.preprocessing.image import ImageDataGenerator

Он получает в качестве параметра вариацию, которую требуется применить.

ImageDataGenerator (width_shift_range = [- 200 200])

ImageDataGenerator (height_shift_range = 0,5)

ImageDataGenerator (horizontal_flip = True)

ImageDataGenerator (vertical_flip = True)

ImageDataGenerator (диапазон_ вращения = 90)

ImageDataGenerator (zoom_range = [0,5,1.0])

ImageDataGenerator (диапазон яркости = [0,2,1.0])

Набор данных разделен на данные поезда и тестовые данные. Кроме того, данные поезда будут снова разделены, чтобы получить данные проверки. Данные проверки - это данные, которые используются во время каждой итерации / эпохи обучения для мониторинга производительности и настройки параметров и гиперпараметров модели.

Рисунок 5: Базовое разделение для протокола оценки.

Кроме того, данные поезда были обработаны в соответствии с диапазоном RGB (максимальное значение 255), а тестовые данные обработаны, чтобы получить значения роста в векторном формате.

импортировать тензорный поток как tf

X_train = X_train.astype (‘float32’) / 255

X_test = X_test.astype (‘float32’) / 255

num_classes = len (np.unique (y_train))

y_train_onehot = tf.keras.utils.to_categorical (y_train, num_classes)

y_test_onehot = tf.keras.utils.to_categorical (y_test, num_classes)

Создание модели

Прежде всего, будет использоваться сверточный слой EfficientNet-B0 [10], который построен поверх NASNet, но определяет три параметра alpha, beta, rho для управления глубиной, шириной и разрешением сверточной сети соответственно. Для этой первой итерации рекомендуется использовать EfficientNet-B0 с параметрами 224x224 и 5,3M.

из keras_efficientnets импортировать EfficientNetB0

conv_base = EfficientNetB0 (weights = ’imagenet’, include_top = False, input_shape = X_train [0] .shape)

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

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

Наконец, последний плотный слой имеет функцию активации softmax для классификации изображения.

На следующем изображении показана архитектура нейронной сети:

Рисунок 6: Архитектура нейронной сети.

Модельное обучение

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

из оптимизаторов импорта tensorflow.keras

model.compile (loss = ’category_crossentropy’, optimizer = ’adam’, metrics = [‘precision’])

ПРИМЕЧАНИЕ. Использование ModelCheckpoint - отличная стратегия для получения максимальной производительности модели. Представим, что вы настроили слишком много эпох и в этот момент столкнулись с переобучением. Затем, чтобы избежать повторения всего обучения, вы можете использовать контрольную точку модели:

model_checkpoint_callback = tf.keras.callbacks.ModelCheckpoint (

filepath = checkpoint_filepath,

save_weights_only = True,

monitor = ’val_accuracy’,

mode = ’max’,

save_best_only = True)

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

Модель достигла точности более 96% с данными проверки. Кривые обучения при обучении можно увидеть на рисунке 7, где показаны результаты, представляющие точность и потери.

Рисунок 7: Потеря и точность модели опухоли мозга.

Оценка модели

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

Рис. 8. Окончательная модельная оценка обнаружения опухоли головного мозга.

Модель получила 98’44% по классификации опухоли головного мозга. Чтобы проверить производительность модели, можно рассчитать матрицу неточностей, чтобы проверить прогнозы и ошибки, которые делает модель. Это должно быть сделано для сравнения с истинностью этого тестового набора данных.

2. Классификация собак.

Набор данных

Набор данных [13] состоит из естественных изображений пород собак, а размер набора данных составляет 20580 естественных изображений. Эти изображения классифицируются по 120 категориям или различным породам собак.

ПРИМЕЧАНИЕ. Та же методология применяется для подготовки данных и создания модели.

Модельное обучение

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

Модель достигла точности более 86% с данными проверки. Кривые обучения при обучении можно увидеть на рисунке 9, где показаны результаты, представляющие точность и потери.

Рисунок 9: Потери и точность по результатам исследования пород собак.

Оценка модели

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

Рис. 10. Окончательная модельная оценка классификации пород собак.

Модель получила 86’83% по классификации собак. Матрица путаницы может быть очень интересной для проверки неверных прогнозов и путаницы между разными породами.

Выводы

Модель может быть обучена с использованием различных наборов данных, чтобы получить отличные результаты и предоставить вспомогательную систему для классификации или распознавания, например, в медицинском секторе. Благодаря отличным результатам 98,44% точности при обнаружении опухоли головного мозга, он может оказать поддержку врачам в диагностике и стать надежным инструментом в их повседневной жизни. Кроме того, это может повысить их производительность и обеспечить огромный уровень автоматизации.

Что касается классификации собак, ветеринарам также может быть полезно распознавать своих пациентов, поскольку у каждой породы есть свои особенности. Однако необходимо повысить точность, чтобы получить лучшую классификацию (86,83%). Есть несколько подходов к достижению этого улучшения: увеличить набор данных с большим количеством выборок, применить больше дополнений данных или даже использовать архитектуру модели иерархии.

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

Мы загрузим модель и создадим python API Rest с помощью Flask, куда мы можем передать изображение в запросе и получить его классификацию.

ПРИМЕЧАНИЕ. Код модели находится в https://github.com/joangoal8/deep-learning-conv-tutorial

Электронная почта: [email protected]

LinkedIn: www.linkedin.com/in/joangomezalvarez

Instagram: @ joangoal8

использованная литература

[1] А. Крижевский, И. Суцкевер, Г. Э. Хинтон. Классификация Imagenet с глубокими сверточными нейронными сетями. В достижениях в системах обработки нейронной информации, 2012.

[2] К. Симонян, А. Зиссерман. Очень глубокие сверточные сети для распознавания крупномасштабных изображений. CoRR, абс. / 1409.1556, 2014.

[3] Сегеди, Кристиан, Лю, Вэй, Цзя, Янцин, Серманет, Пьер, Рид, Скотт, Ангелов, Драгомир, Эрхан, Думитру, Ванхаук, Винсент и Рабинович, Эндрю. Углубляем извилины. CoRR, абс. / 1409.4842, 2014.

[4] К. Хе, Х. Чжан, С. Рен, Дж. Сунь. Глубокое остаточное обучение для распознавания изображений. Препринт arXiv arXiv: 1512.03385, 2015.

[5] Ф. Шолле. Xception: глубокое обучение с разделенными по глубине свертками. Препринт arXiv arXiv: 1610.02357v2, 2016.

[6] С. Иоффе и К. Сегеди. Пакетная нормализация: ускорение глубокого обучения сети за счет уменьшения внутреннего ковариантного сдвига. В ICML, 2015.

[7] А. Г. Ховард, М. Чжу, Б. Чен, Д. Калениченко, В. Ван, Т. Вейанд, М. Андреетто и Х. Адам. Мобильные сети: эффективные сверточные нейронные сети для приложений мобильного зрения. Препринт arXiv arXiv: 1704.04861, 2017.

[8] Зоф Б., Васудеван В., Шленс Дж. И Ле К. В. Изучение переносимых архитектур для масштабируемого распознавания изображений. CVPR, 2018.

[9] Б. Зоф и К. В. Ле. Поиск нейронной архитектуры с обучением с подкреплением. В Международной конференции по обучающим представлениям, 2017.

[10] М. Тан, К. Ле, EfficientNet: переосмысление масштабирования модели для сверточных нейронных сетей. В Международной конференции по обучающим представительствам, 2019.

[11] Википедия. Https://commons.wikimedia.org/. Дата обращения 2021–06–20.

[12] Kaggle.com МРТ-изображения головного мозга для обнаружения опухолей головного мозга https://www.kaggle.com/navoneel/brain-mri-images-for-brain-tumor-detection

[13] Адитья Кхосла, Нитьянанда Джаядевапракаш, Бангпенг Яо и Ли Фей-Фей. Новый набор данных для детальной категоризации изображений. Первый семинар по детальной визуальной категоризации (FGVC), Конференция IEEE по компьютерному зрению и распознаванию образов (CVPR), 2011 г.