Пролог
Я не буду начинать эту статью с описания ужаса, печали и печали, которые возникают при малейшем упоминании о введении Рака. Рак, скорее, не нуждается в представлении. Это, возможно, самое смертоносное заболевание, свидетелем которого когда-либо было человечество, и тем не менее, после столетий его существования, это одно из самых иллюзорных и сложных условий для преодоления.
На самом деле нет необходимости указывать значение диагноза в общем плане лечения этого состояния. Ранняя и правильная диагностика состояния чрезвычайно важна для шансов на выживание.
Итак, без лишних слов, давайте сразу перейдем к рассматриваемой проблеме и к тому, как методы искусственного интеллекта и глубокого обучения могут помочь нам в ее решении.
Проблема, которую мы пытаемся решить здесь, - это проблема бинарной классификации - определить, являются ли гистопатологические изображения рака в лимфатических узлах метастатическим или нормальным.
Лимфатические узлы - это небольшие железы в лимфатической системе, которые перемещаются по всему телу. Лимфатические узлы собирают и фильтруют жидкости, отходы и вредные микробы. В организме человека сотни лимфатических узлов.
Лимфатические узлы в подмышечной впадине - это первое место, где может распространяться рак груди. Метастатическое поражение лимфатических узлов - один из наиболее важных прогностических факторов рака груди. Прогноз хуже, если рак распространился на лимфатические узлы. Вот почему лимфатические узлы удаляются хирургическим путем и исследуются под микроскопом. Однако диагностическая процедура для патологоанатомов утомительна и требует много времени.
Самое главное, что мелкие метастазы очень сложно обнаружить, а иногда и не заметить. Это, в частности, основная проблема, которую мы попытаемся решить с помощью методов глубокого обучения.
Чтобы разобраться в этом случае и увидеть, насколько сложна проблема, давайте посмотрим на одно изображение, увеличенное и уменьшенное -
Уменьшенное изображение
Увеличенное изображение
Набор данных
У нас есть около 220 000 обучающих изображений и 57 000 тестовых изображений. Набор данных является подмножеством набора данных PCam, и единственное различие между ними состоит в том, что все повторяющиеся изображения были удалены.
Набор данных PCam получен из набора данных Camelyon16 Challenge, который содержит 400 полных изображений слайдов срезов сторожевых лимфатических узлов, окрашенных H&E.
Гистопатологические изображения представляют собой изображения лимфатических узлов, окрашенных гематоксилином и эозином (H&E), под микроскопом на предметном стекле. Этот метод окрашивания является одним из наиболее широко используемых в медицинской диагностике и дает синий, фиолетовый и красный цвета. Темно-синий гематоксилин связывается с отрицательно заряженными веществами, такими как нуклеиновые кислоты, а розовый эозин - с положительно заряженными веществами, такими как боковые цепи аминокислот (большинство белков). Обычно ядра окрашены в синий цвет, а цитоплазма и внеклеточные части - в различные оттенки розового.
Используемое программное обеспечение
- библиотека fastai, созданная как оболочка для платформы глубокого обучения Facebook с открытым исходным кодом.
- Ядра Kaggle для использования графического процессора
Коды и работа
Давайте сначала загрузим все пакеты:
import pandas as pd import matplotlib.pyplot as plt import numpy as np import os from fastai import * from fastai.vision import * %reload_ext autoreload %autoreload 2 %matplotlib inline
Путь ко всем файлам и его составляющим:
import os os.listdir(‘../input/’) ['train', 'test', 'train_labels.csv', 'sample_submission.csv'] path = Path(‘../input/’) path.ls()
Давайте создадим наш ImageDataBunch после увеличения изображения:
np.random.seed(42) tfms = get_transforms(do_flip=True, flip_vert=True) data = ImageDataBunch.from_csv(path, ds_tfms = tfms, folder=’train’, test=’test’, valid_pct=0.20, csv_labels= ‘train_labels.csv’, bs=64, size=224, suffix=”.tif”).normalize(imagenet_stats)
Вот как выглядят наши несколько изображений:
data.show_batch(5, figsize=(12,12))
Теперь мы обучим модель, а архитектура модели, которую мы будем использовать, - это ResNet50, которая обучена на наборе данных ImageNet, и мы будем использовать методы трансферного обучения.
learn = cnn_learner(data, models.resnet50, model_dir=”/temp/model”, metrics=accuracy)
Теперь мы найдем оптимальный диапазон скоростей обучения для нашей задачи классификации:
learn.lr_find() learn.recorder.plot()
Как обычно, мы сначала разморозим модель и воспользуемся методом «fit_one_cycle» для соответствия обучающим изображениям:
learn.unfreeze() learn.fit_one_cycle(10, max_lr = slice(1e-5, 1e-3))
Давайте посмотрим на 9 основных потерь нашей классификационной модели:
interp = ClassificationInterpretation.from_learner(learn) losses, idxs = interp.top_losses() len(data.valid_ds)==len(losses)==len(idxs) interp.plot_top_losses(9, figsize=(12,12))
Будет полезно увидеть матрицу путаницы в нашей модели:
Наконец, давайте посмотрим на точность прогнозов нашей модели:
preds,y, loss = learn.get_preds(with_loss=True) # get accuracy acc = accuracy(preds, y) print(‘The accuracy is {0} %.’.format(acc*100))
Точность прогноза составляет около 98,12%.
Вывод
В этой серии из трех частей мы столкнулись с тремя проблемами: а) диагностика малярийных клеток крови, б) рентгенологическая диагностика пневмонии и в) гистопатологические изображения рака. Мы также увидели, что одна модель глубокого обучения ResNet50, которая была обучена на совершенно другом наборе данных ImageNet, помогла достичь точности более 96–97% во всех трех задачах, и это тоже за очень короткий промежуток времени обучения и с несколькими строками коды.
Глубокое обучение имеет большое, определяющее и многообещающее будущее в медицинской науке. Это будет наиболее надежный инструмент, который будут иметь в своем арсенале будущие патологи и врачи, и сообщество специалистов по науке о данных будет играть очень важную роль.
Надеюсь, вам понравились эти статьи. Как всегда, я буду искренне рад всем вашим отзывам и комментариям.