1. Введение

В этой статье мы собираемся обсудить классификацию изображений с использованием глубокого обучения. В этой статье мы обсудим классификацию изображений с использованием модели глубокого обучения под названием Convolutional Neural Network (CNN). Прежде чем мы перейдем к коду CNN, я хотел бы уделить время объяснению архитектуры CNN. Этот проект делается в рамках последнего года.

2. Архитектура

Обычные нейронные сети (NN) не могут работать с изображениями. Просто представьте, что каждый пиксель связан с одним нейроном, а таких нейронов будет тысячи, что потребует значительных вычислительных ресурсов. CNN обрабатывает изображения по-разному, но все же следует общей концепции NN.

Они состоят из нейронов, которые имеют обучаемые веса и смещения. Каждый нейрон принимает входные данные, выполняет операцию скалярного произведения и следует функции нелинейности. И у них по-прежнему есть функция потерь (например, SVM/Softmax) на полносвязном уровне, и все советы и рекомендации, которые мы разработали для обучения обычной NN, по-прежнему применимы.

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

Использование CNN помогает уменьшить количество параметров, необходимых для изображений, по сравнению с обычной NN. Кроме того, это помогает сделать совместное использование параметров, чтобы оно могло обладать инвариантностью перевода.

свертка

Давайте углубимся в то, как работает слой свертки. У свертки есть набор обучаемых фильтров, которые будут матрицей (ширина, высота и глубина). Мы рассматриваем изображение как матрицу, и фильтр будет скользить по матрице изображения, как показано ниже, чтобы получить свернутое изображение, которое является отфильтрованным изображением фактического изображения.

В зависимости от задачи в модели доступно более одного фильтра для удовлетворения различных функций. Функция может искать ВСЮ ячейку, искать форму и т. Д. Значение матрицы фильтра изучается на этапе обучения модели.

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

Функция активации

Функции активации — это функции, которые решают, учитывая входные данные в узел, что должно быть на выходе узла? Поскольку именно функция активации определяет фактический результат, мы часто называем результаты слоя его «активациями». Одной из популярных функций активации в cnn является ReLu.

Максимальное объединение

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

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

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

Полностью подключен

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

Софтмакс

Функция Softmax вычисляет распределение вероятностей события по «n» различным событиям. В общем, эта функция будет вычислять вероятности каждого целевого класса по всем возможным целевым классам. Позже рассчитанные вероятности будут полезны для определения целевого класса для заданных входных данных.

Математически функция softmax показана ниже, где z — это вектор входных данных выходного слоя (если у вас есть 10 выходных единиц, то в z 10 элементов). . И снова j индексирует выходные единицы.

Классификация изображений

Я объясню кодовую базу для моего проекта, которую я делал в течение последнего года.

Скачать набор данных

Поскольку мой проект основан на обнаружении ВСЕХ, то есть мы собираемся классифицировать ВСЕ изображения из изображений нормальных клеток, поэтому я собираюсь использовать изображения ядер wbc. Набор данных был выпущен в рамках конкурса ISBI на веб-сайте codalab. Набор данных состоит из 10 661 изображений ядер лейкоцитов, в которых присутствуют обе категории, т. е. нормальные клетки и ВСЕ клетки.

Размер изображения 450*450

Подготовка и предварительная обработка данных

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

вставьте сюда фрагмент папки с данными

Теперь мы разделим наши данные на два набора с коэффициентом разделения 8:2.

Учебный набор — 8 480 изображений.

Набор для тестирования — 2120 изображений.

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

Обрезать

Границы изображений были обрезаны до максимально возможной степени, при этом следя за тем, чтобы не удалить какую-либо часть изображения ядра ни с одного из изображений. Изображения были обрезаны с их исходного размера 450 ∗ 450 до нового размера 400 ∗ 400. Это было сделано для того, чтобы сохранить как можно больше информации во время изменения размера изображения, что было необходимо из-за ограничений ресурсов нашей системы.

Аугментация

Увеличить количество обучающих данных для лучшей классификации, а также избежать переобучения, чтобы во время обучения модель никогда не видела одну и ту же картинку дважды. Мы выполнили аугментацию нашего обучающего набора данных, применив к ним случайные повороты и перевороты. Это было сделано с помощью библиотеки Python «Augmentor», доступной на github. С помощью аугментора мы увеличили количество обучающих изображений с 8 480 до 20 000.

Создание моделей классификации изображений

Из-за неудовлетворительных результатов доступных моделей DL мы решили разработать собственную модель для задачи классификации. Наша модель состоит из 17 слоев, из которых 14 сверточных слоев — разделены на 6 блоков.

Архитектура

• 14 модулей {convolution + relu}

• 5 модулей {Max pooling}

• 3 {полностью подключенных + полностью подключенных} модуля

• 2 {выпадающих} модуля

• 1 модуль {softmax}

Свертки работают с окнами 3x3, а максимальные слои пула работают с окнами 2x2.

Первый блок свертки извлекает 32 фильтра, второй блок свертки извлекает 64 фильтра, третий блок свертки извлекает 128 фильтров, четвертый блок свертки извлекает 256 фильтров, пятый блок свертки извлекает 384 фильтра и последний блок извлекает 512 фильтров.

Модель построена с использованием следующих слоев:

• Conv2D — двумерная сверточная сеть

• Активация — Релу

• Пакетная нормализация

• Максимальное объединение

• Плотная — полностью связанная нейронная сеть

  • Слой Softmax в качестве вывода

Сетевое обучение

Модель компилируется с набором параметров обучения. Функция активации, используемая для скрытых слоев, представляет собой функцию нелинейной активации «Relu». Функция активации, используемая для выходного слоя, представляет собой вероятностную функцию активации «Softmax».

Во время обучения оптимизатор SGD показал лучшие результаты при скорости обучения 0,0002. Модель работала в течение 100 эпох с размером пакета 30.

Результаты

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

Обратные вызовы были выбраны для контроля точности проверки и сохранения модели с максимально возможными параметрическими весами. Учитывая простоту архитектуры модели, была достигнута точность 93,02%.

В таблице 2 показано сравнение производительности различных моделей и нашей модели.

Архитектура Точность (%)

АлексНет 81,62

ВГГ_16 84,8

Реснет50 84,77

Начало V3 83,67

Предлагаемая модель 93.02