Упрощение компьютерного зрения с помощью Monk, инструмента глубокого обучения с низким кодом и унифицированной оболочки для компьютерного зрения.
Библиотека монахов
📌Monk - это инструмент с открытым исходным кодом с низким кодом для компьютерного зрения и глубокого обучения.
Особенности монаха
📌 Младший код.
📌 Единая оболочка для основных фреймворков глубокого обучения - Keras, PyTorch, Gluoncv.
📌 Синтаксически инвариантная оболочка.
Позволяет
📌 Пользователи для создания, управления и контроля версий экспериментов по глубокому обучению.
📌 Пользователи могут сравнивать эксперименты по показателям обучения.
📌 Пользователи быстро находят лучшие гиперпараметры.
Оглавление
☑ Установка
☑ Загрузить набор данных
☑ Подробная информация о наборе данных
☑ Быстрое прототипирование - обучение, проверка и вывод
☑ Обучите классификатор с помощью Resnet50
☑ Обучите классификатор с помощью Densenet121
☑ Сравнить эксперименты
Установка
$ !git clone https://github.com/Tessellate-Imaging/monk_v1.git # If using Colab install using the commands below $ !cd monk_v1/installation/Misc && pip install -r requirements_colab.txt
Скачать набор данных
Набор данных - рентгеновские снимки грудной клетки (пневмония)
$ ! wget --load-cookies /tmp/cookies.txt "https://docs.google.com/uc?export=download&confirm=$(wget --save-cookies /tmp/cookies.txt --keep-session-cookies --no-check-certificate 'https://docs.google.com/uc?export=download&id=1li6ctqAvGFgIGMSt-mYrLoM_tbYkzqdO' -O- | sed -rn 's/.*confirm=([0-9A-Za-z_]+).*/\1\n/p')&id=1li6ctqAvGFgIGMSt-mYrLoM_tbYkzqdO" -O chest_xray.zip && rm -rf /tmp/cookies.txt
Разархивируйте данные
$ ! unzip -qq chest_xray.zip
Подробная информация о наборе данных
Что такое пневмония?
- Это инфекция одного или обоих легких.
- Это вызвано бактериями, вирусами и грибками.
- Пневмония - это инфекция, которая вызывает воспаление воздушных мешков в легких, называемых альвеолами.
Общие симптомы
- Высокая температура
- Озноб
- Кашель
- Сбивчивое дыхание
- Усталость
Какие существуют типы бактериальной пневмонии?
- Бактерии вызывают большинство случаев внебольничной пневмонии у взрослых.
- Человек может заразиться пневмонией, когда зараженный кашляет или чихает.
- Капельки, наполненные бактериями, попадают в воздух, и вы можете вдохнуть их в нос или рот.
- Обычно он показывает консолидацию фокальных долей.
Бактериальная пневмония на рентгеновском снимке грудной клетки.
Какие бывают типы вирусной пневмонии
- Вирусы - вторая по частоте причина пневмонии.
- Многие вирусы вызывают заболевание, в том числе одни и те же вирусы, вызывающие простуду и грипп.
- Лихорадка, озноб, сухой кашель, который может усиливаться и вызывать образование слизи, заложенность носа.
- Вирусная пневмония (справа) проявляется более диффузным «интерстициальным» рисунком в обоих легких.
Вирусная пневмония на рентгеновском снимке грудной клетки
Какие бывают типы пневмонии при ходьбе
- Менее тяжелая форма бактериальной пневмонии. Иногда врачи называют это «атипичной» пневмонией.
- Симптомы могут быть настолько легкими, что вы даже не подозреваете о них. Вы можете чувствовать себя достаточно хорошо, чтобы заниматься своими обычными делами, отсюда и слово «ходьба» в названии.
Какие бывают типы грибковой пневмонии
- Грибки - менее частая причина пневмонии. Если вы здоровы, то вряд ли заболеете грибковой пневмонией.
- Но у вас больше шансов заразиться им, если ваша иммунная система ослаблена из-за серьезной операции, трансплантации органов или ВИЧ.
- Грибковая пневмония возникает при вдыхании крошечных частиц, называемых спорами грибка.
Необходимость такого приложения
- Бактериальная пневмония требует срочного направления для немедленного лечения антибиотиками.
- При вирусной пневмонии проводится поддерживающая терапия. Поэтому точная и своевременная диагностика необходима.
- Быстрая радиологическая интерпретация изображений не всегда доступна, особенно в странах с ограниченными ресурсами, где детская пневмония имеет самый высокий уровень заболеваемости и самый высокий уровень смертности.
- Таким образом, использование трансферного обучения при классификации детских рентгеновских снимков грудной клетки.
Набор данных
- Помечено в общей сложности 5232 рентгеновских снимка грудной клетки у детей.
- Учебный набор включает 3883 пациента с пневмонией (2538 бактериальных и 1345 вирусных) и 1349 нормальных из общего числа 5856 пациентов.
- Набор для тестирования включает 234 нормальных изображения и 390 изображений пневмонии (242 бактериальных и 148 вирусных) от 624 пациентов.
Этикетки
- Нормальный рентген
- Рентген пневмонии
Быстрое прототипирование - обучение, проверка и выводы
Передача обучения
Базовая сеть
- Сверточная нейронная сеть сначала обучается на больших наборах данных, таких как coco или Imagenet.
- В этих наборах данных есть много классов, например, около 1000, 1500 классов.
- Таким образом, последний слой нейронной сети имеет такое же количество нейронов.
Тонкая настройка пользовательского набора данных
- В пользовательском наборе данных обычно разное количество классов.
- Вы берете сеть и загружаете в нее предварительно обученные веса.
- Затем удалите последний слой с дополнительным (или меньшим) количеством нейронов.
- Вы добавляете новый слой с количеством нейронов = количеству классов в вашем пользовательском наборе данных.
- При желании вы можете добавить дополнительные слои между этим недавно добавленным последним слоем и старой сетью.
Что такое быстрое прототипирование?
- Каждый проект классификации изображений начинается с основного шага - опробования трансферного обучения.
При переносе обучения вы берете модель глубокого обучения, обученную на очень большом наборе данных
- Затем обучите его на своем собственном наборе данных.
При этом вам нужно выбрать много гиперпараметров
- Во-первых, сама модель, такая как ResNet или DenseNet, никогда не знаешь, что использовать.
- Затем параметры набора данных, такие как размер пакета, форма ввода и т. Д.
- Затем параметры модели, такие как замораживание слоев, без использования предварительно обученных моделей и т. Д.
- Затем настройте оптимизатор, функцию потерь, планировщик скорости обучения и т. Д. Для выбора.
- И, наконец, количество эпох, по которым нужно тренироваться.
Примечание: не все можно сделать на самом первом этапе, поэтому в режиме быстрого прототипирования.
Что позволяет
- Установите модель.
- Независимо от того, использовать ли предварительно обученную сеть или обучать с нуля.
- Количество эпох.
Все остальные параметры установлены по умолчанию в соответствии с их оригинальными исследовательскими работами.
- Затем его можно изменить в промежуточном и экспертном режимах Монаха.
Создание и управление экспериментами
- Укажите название проекта.
- Укажите название эксперимента.
- По конкретным данным создайте единый проект.
- В каждом проекте можно создать несколько экспериментов.
- К каждому эксперименту можно привязать разные гиперпараметры.
$ gtf = prototype(verbose=1); $ gtf.Prototype("Pneumonia_Classification", "Quick_Prototype");
Выход
Mxnet Version: 1.5.0 Experiment Details Project: Pneumonia_Classification Experiment: Quick_Prototype Dir: /home/abhi/Downloads/webinar_2/workspace/Pneumonia_Classification/Quick_Prototype/
Это создает файлы и каталоги в соответствии со следующей структурой
workspace
|
|----Pneumonia_Classification
|
|
|---Quick_Prototype
|
|--experiment-state.json
|
|--output
|
|------logs
|
|------models
Обучение в быстром режиме
- Using Default Function
- dataset_path
- model_name
- num_epochs
Структура папок набора данных
parent_directory
|
|
|
|----training
|------Infected
|
|------img1.jpg
|------img2.jpg
|------.... (and so on)
|------Normal
|
|------img1.jpg
|------img2.jpg
|------.... (and so on)
|
|
|----validation
|------Infected
|
|------img1.jpg
|------img2.jpg
|------.... (and so on)
|------Normal
|
|------img1.jpg
|------img2.jpg
|------.... (and so on)
Изменяемые параметры
- dataset_path: путь к данным
- model_name: какую предварительно обученную модель использовать
- freeze_base_network: Обучить уже обученную сеть или нет
- num_epochs: количество эпох для тренировки
$ gtf.Default(dataset_path="chest_xray/train", model_name="resnet18_v1", num_epochs=5) #Start Training $ gtf.Train();
Train vs Val vs Test Dataset
Поезд
- Модель видит эти данные и учится на них.
- В нашем случае 80% исходных данных обучения.
Проверка
- Выборка данных, используемая для обеспечения объективной оценки соответствия модели обучающему набору данных при настройке гиперпараметров модели.
- В нашем случае 20% исходных данных обучения.
Тест
- Набор тестовых данных - это набор данных, используемый для обеспечения объективной оценки окончательной модели, подходящей для набора обучающих данных.
- Внешний набор.
Выполнение вывода на тестовых изображениях
Загрузить эксперимент в режиме вывода
- Установите флаг eval_infer как True.
$ gtf = prototype(verbose=1); $ gtf.Prototype("Pneumonia_Classification", "Quick_Prototype", eval_infer=True);
Выход
Mxnet Version: 1.5.0 Model Details Loading model - workspace/Pneumonia_Classification/Quick_Prototype/output/models/final-symbol.json Model loaded! Experiment Details Project: Pneumonia_Classification Experiment: Quick_Prototype Dir: /home/abhi/Downloads/webinar_2/workspace/Pneumonia_Classification/Quick_Prototype/
Выберите изображение и выполните вывод
$ img_name = "chest_xray/infer/normal-1.jpeg"; $ predictions = gtf.Infer(img_name=img_name); #Display $ from IPython.display import Image $ Image(filename=img_name)
Выход
Prediction Image name: chest_xray/infer/normal-1.jpeg Predicted class: NORMAL Predicted score: 7.098179340362549
$ img_name = "chest_xray/infer/pneumonia-1.jpeg"; $ predictions = gtf.Infer(img_name=img_name); #Display $ from IPython.display import Image $ Image(filename=img_name)
Выход
Prediction Image name: chest_xray/infer/pneumonia-1.jpeg Predicted class: PNEUMONIA Predicted score: 3.6506881713867188
Обучите классификатор с помощью Resnet50
Чтения в ResNet
Очки из статьи На пути к науке о данных
- Основная идея ResNet заключается во внедрении так называемого «ярлыка идентификации», при котором один или несколько уровней пропускаются.
- Более глубокая модель не должна давать ошибку обучения выше, чем ее более мелкие аналоги.
- Решает проблему исчезновения градиентов при увеличении глубины сети.
Очки от Среднего
- Занял 1-е место в классификационном конкурсе ILSVRC 2015 с коэффициентом ошибок в топ-5 3,57% (ансамблевая модель).
- Эффективно обученные сети со 100 слоями, а также с 1000 слоями.
- Замена слоев VGG-16 в Faster R-CNN на ResNet-101. Они отметили относительное улучшение на 28%.
Подробнее здесь
- Https://arxiv.org/abs/1512.03385
- Https://d2l.ai/chapter_convolutional-modern/resnet.html
- Https://cv-tricks.com/keras/understand-implement-resnets/
- Https://mc.ai/resnet-architecture-explained/
Блок ResNet - 1
Свойства
В этом блоке 2 ответвления
- Первая ветвь - это идентификационная ветвь, она принимает входные данные и подталкивает их в качестве выходных, Остаточных.
- Вторая ветвь имеет эти слои
- batchnorm - ›relu -› conv_1x1 - ›batchnorm -› relu - ›conv_3x3 -› batchnorm - ›relu -› conv_1x1.
Ветви добавляются поэлементно, поэтому обе ветви должны иметь вывод одинакового размера.
Последний слой этого блока - Релу.
Узкое место
- Числовые функции в первой и средней свертках: input_features / 4
- Последняя свертка имеет features = input_features.
Блок ResNet - 2
Свойства
Блок имеет два стартовых элемента
- батчнорм - ›Relu
Разместите стартовые элементы в этом блоке 2 ветки
Первая ветвь содержит эти слои
- conv_1x1
Вторая ветвь содержит эти слои
- conv_1x1 - ›batchnorm -› Relu - ›conv_3x3 -› batchnorm - ›Relu -› conv_1x1.
Ветви добавляются поэлементно, поэтому обе ветви должны иметь выходной сигнал одинакового размера.
#Set project and experiment $ gtf = prototype(verbose=1) $ gtf.Prototype("Pneumonia_Classification", "Experiment_1") #Load data and model $ gtf.Default(dataset_path="chest_xray/train", model_name="resnet50_v2",freeze_base_network=False, num_epochs=5) # Train $ gtf.Train()
Обучить классификатор с помощью Densenet121
Чтения в Densenet
Очки от Среднего
- «Эта архитектура возникла из желания улучшить разрабатываемые архитектуры более высокого уровня. В частности, устранение проблемы, заключающейся в том, что многие уровни в высокоуровневых сетях были в некотором смысле избыточными ».
Точки зрения на науку о данных
- Каждый уровень получает «коллективное знание» от всех предыдущих уровней. (См. Изображение выше).
#Set project and experiment $ gtf = prototype(verbose=1) $ gtf.Prototype("Pneumonia_Classification", "Experiment_2") #Load data and model $ gtf.Default(dataset_path="chest_xray/train", model_name="densenet121",freeze_base_network=False, num_epochs=5) # Train $ gtf.Train()
Сравнить эксперименты
# Invoke the comparison class $ from compare_prototype import compare
Создание сравнительных экспериментов и управление ими
- Укажите название проекта
# Create a project $ gtf = compare(verbose=1); $ gtf.Comparison("Expvs_2")workspace | |----Pneumonia_Classification | | |---Quick_Prototype | |--experiment-state.json | |--output | |------logs | |------models
Выход
Comparison: - Expvs_2workspace | |----Pneumonia_Classification | | |---Quick_Prototype | |--experiment-state.json | |--output | |------logs | |------models
Добавьте эксперименты
- Первый аргумент - название проекта
- Второй аргумент - название эксперимента
$ gtf.Add_Experiment("Pneumonia_Classification", "Experiment_1") $ gtf.Add_Experiment("Pneumonia_Classification", "Experiment_2")
Выход
Project - Pneumonia_Classification, Experiment - Experiment_1 added Project - Pneumonia_Classification, Experiment - Experiment_2 added
Выполнить анализ
$ gtf.Generate_Statistics()
При этом создаются файлы и каталоги в соответствии со следующей структурой
workspace | |--------comparison | | |-----Exp_1_vs_2 | |------stats_best_val_acc.png |------stats_max_gpu_usage.png |------stats_training_time.png |------train_accuracy.png |------train_loss.png |------val_accuracy.png |------val_loss.png
| |-----comparison.csv (Contains necessary details of all experiments)
Кривые точности тренировки
Кривые тренировочных потерь
Кривые точности проверки
Кривые валидационных потерь
Кривые времени тренировки
Максимальное использование графического процессора
Наивысшая точность проверки
Оба одинаково хорошо работали с данными валидации.
Проверим работоспособность на тестовом наборе
ResNet
gtf = prototype(verbose=1); gtf.Prototype("Pneumonia_Classification", "Experiment_1", eval_infer=True); # Load test data gtf.Dataset_Params(dataset_path="chest_xray/test"); gtf.Dataset(); # Test for accuracy accuracy, class_based_accuracy = gtf.Evaluate();
Выход
Mxnet Version: 1.5.0 Model Details Loading model - workspace/Pneumonia_Classification/Experiment_1/output/models/final-symbol.json Model loaded! Experiment Details Project: Pneumonia_Classification Experiment: Experiment_1 Dir: /home/abhi/Downloads/webinar_2/workspace/Pneumonia_Classification/Experiment_1/ Dataset Details Test path: chest_xray/test CSV test path: None Dataset Params Input Size: 224 Processors: 4 Pre-Composed Test Transforms [{'Normalize': {'mean': [0.485, 0.456, 0.406], 'std': [0.229, 0.224, 0.225]}}] Dataset Numbers Num test images: 624 Num classes: 2 Testing HBox(children=(IntProgress(value=0, max=624), HTML(value=''))) Result class based accuracies 0. NORMAL - 55.55555555555556 % 1. PNEUMONIA - 98.2051282051282 % total images: 624 num correct predictions: 513 Average accuracy (%): 82.21153846153845
DenseNet
$ gtf = prototype(verbose=1); $ gtf.Prototype("Pneumonia_Classification", "Experiment_2", eval_infer=True); # Load test data $ gtf.Dataset_Params(dataset_path="chest_xray/test"); $ gtf.Dataset(); # Test for accuracy $ accuracy, class_based_accuracy = gtf.Evaluate()
Выход
Mxnet Version: 1.5.0 Model Details Loading model - workspace/Pneumonia_Classification/Experiment_2/output/models/final-symbol.json Model loaded! Experiment Details Project: Pneumonia_Classification Experiment: Experiment_2 Dir: /home/abhi/Downloads/webinar_2/workspace/Pneumonia_Classification/Experiment_2/ Dataset Details Test path: chest_xray/test CSV test path: None Dataset Params Input Size: 224 Processors: 4 Pre-Composed Test Transforms [{'Normalize': {'mean': [0.485, 0.456, 0.406], 'std': [0.229, 0.224, 0.225]}}] Dataset Numbers Num test images: 624 Num classes: 2 Testing HBox(children=(IntProgress(value=0, max=624), HTML(value=''))) Result class based accuracies 0. NORMAL - 62.39316239316239 % 1. PNEUMONIA - 98.71794871794873 % total images: 624 num correct predictions: 531 Average accuracy (%): 85.09615384615384
В этом случае Densenet показал лучшие результаты на тестовой выборке.
Вы можете найти полный блокнот jupyter на Github. Дайте нам ⭐️ в нашем репозитории GitHub, если вам нравится Monk.
Если у вас есть вопросы, вы можете связаться с Абхишек и Акаш. Не стесняйтесь обращаться к ним.
Я очень увлечен компьютерным зрением и глубоким обучением в целом. Я участник библиотек Monk с открытым исходным кодом.
Вы также можете увидеть другие мои работы по адресу: