Использование сверточных нейронных сетей в задаче диагностики меланомы.
Разработанный программный модуль позволяет настраивать параметры нейросети и сравнивать результаты.
Все изображения были взяты с сайта ISIC. На сайте содержатся изображения из различных датасетов, но для реализации был взят только датасет HAM10000 т.к. он обладает следующими преимуществами:
- Достаточный объем выборки (>10к изображений)
- Все изображения одного размера и размечены по диагнозам
- Почти отсутсвуют дефекты и посторонние объекты
Скаичвание данных делится на 2 этапа:
- Скачивание мета-данных всей БД полность. Чтобы в будущем при необходимости можно было докачивать изображения из других датасетов без особых затруднений.
- Скачивание самих изображений и только из необходимого датасета HAM10000. Все изображения сохраняются в папку img.
Скачивание мета-данных происходит очень долго. Готовая выгрузка метаданных по всей базе лежит в csv-файле в репозитории.
Берутся метаданные. Имя выступает X, класс выступает как y. Далее делается стандартный sklearn train_test_split Далее создаются папки train и test (validation), а внутри них папки соответсвующие классам изображений. В этом блокноте происходит сортировка изображений по нужным папкам соответсвующим классам изображений. Это нужно для превращения их в дальнейшем в тензоры для обучения нейросетей.
В работе исследовалось несколько различных подходов для обучения нейросети. Все из них реализованы с помощью фреймворка PyTorch
Был взят базовый туториал с сайта PyTorch по созданию CNN. Вместо датасета CIFAR10 использовался HAM10000. Архитектура нейросети без изменений. Проводились эксперименты с размером картинок для обучения и было достигнуто глобальное понимание как работает обучение в PyTorch. Результат в блокноте Training_own_CNN_no_changes_in_data.ipynb
Главная проблема предыдущего подхода - значительный дисбаланс в размерах классов. В результате этого сеть переобучается на класс, представителей которого больше всего в обучающей выборке.
Было принято решение взять от каждого класса не всех представителей для обучения, а столько сколько представителей в классе минимального размера. В датасете HAM10000 меньше всего представителей класса pigmented benign keratosis (115 шт), поэтому из каждого класса было взято 115 случайно выбранных изображений, которые использовались для тренировки и тестирования.
Далее чтобы увеличить объем выборки над изображениями производились различные манипуляции (вращения / отображения / обрезки и т.д.). В результате производилось обучение на фиктивной, зато равномерно распределенной обучающей выборке. Результат в блокноте Training_own_CNN_fixed_images_count.ipynb
Вместо использования своей слабой архитектуры были взяты все готовые предобученные сети, такие как:
- ResNet
- Inception v3
- VGG
- AlexNet
- ...
Далее по принципу transfer learning в каждой из сетей был изменен последний полносвязный слой на собственный с 8-ю выходными нейронами. Результат в блокноте Trained_CNN_no_changes_in_data.ipynb
Необходим для удобства настройки всех параметров и отображения результатов. Реализован на PyQt5
Окно открытия папок Окно настройки баланса классов Окно просмотра представителей классов Окно конвертации изображений в тензоры Окно настройки параметров обучения нейросети Окно просмотра результатов валидации модели Окно предсказания