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

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

Как обычно, я хочу попробовать, как я могу использовать CNN в биологических задачах. Я нашел набор данных изображений рака на Kaggle, который содержит 220 025 гистопатологических изображений рака и нераковых заболеваний. Я понял, что невозможно использовать мой ноутбук для обучения CNN с нуля. Между тем, это не мультиклассовая проблема, только 0 (не рак) и 1 (рак). Таким образом, также неразумно обучать более 220 тысяч изображений и позволять классификатору определять, является ли это раком.

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

Ответ:

VGG16

Эта глубокая сверточная нейронная сеть была введена в 2014 году и достигла 92,7% точности тестов в первой пятерке в ImageNet, которая хранит более 14 миллионов изображений, принадлежащих к 1000 классам. 14 миллионов намного больше, чем 220 025. Кроме того, классификация 1000 должна иметь не меньшую сложность, чем бинарная классификация. Поэтому я могу использовать предварительно обученную модель для этой задачи обнаружения рака. Учитывая, что VGG16 — это глубокая CNN и обучалась в течение нескольких недель, я склонен полагать, что сверточные слои способны очень хорошо справляться с извлечением признаков.

Поэтому я удалил последний плотный слой, и новая модель вернет мне 4096-d вектор для каждого изображения. Вы можете подумать, что новая модель встраивает изображение в пространства признаков 4096-d. Из-за вычислительной мощности мне не удалось обработать все 220 025 изображений. В этом пробном приложении я уменьшил разрешение 500 изображений (по 250 из каждой категории).

Визуализация через UMAP

Сначала я подумал, что должен визуализировать поднабор данных из 500 выборок в нижних пространствах признаков. Чтобы уменьшить 4096 пространственных объектов до 2, я запустил UMAP, который показывает относительно лучшую производительность, чем tSNE. Результат UMAP предполагает, что линейный классификатор или нахождение линейной границы решения не дадут мне идеальной точности. Простой нелинейный классификатор: k ближайших соседей.

kNN и PCA

Сначала я разделил 500 образцов на обучающий набор из 375 образцов и набор для тестирования из 125 образцов. Затем я изучил исходные 4096 функциональных пространств и 113 PC-пространств, уменьшенных с помощью PCA. Чтобы найти оптимальное k, я применил 10-кратную перекрестную проверку. Для обоих наборов данных k=9 возвращает наивысшую точность для проверочного набора. Далее я собираюсь протестировать kNN с k = 0 на 125 тестовых выборках. Для 4096 пространств признаков точность тестирования составляет 0,728; для 113 мест ПК точность тестирования составляет 0,752. Что ж, уменьшение размерности действительно повышает производительность и экономит вычислительную мощность. Имея в виду, что я одинаково уменьшил частоту дискретизации. Так что я не оценивал по точности и полноте.

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

Справочник



Источник данных

https://www.kaggle.com/c/histopathologic-cancer-detection

Доступность кода

https://github.com/ImXman/Cancer_detection