Пролог

Я не буду начинать эту статью с описания ужаса, печали и печали, которые возникают при малейшем упоминании о введении Рака. Рак, скорее, не нуждается в представлении. Это, возможно, самое смертоносное заболевание, свидетелем которого когда-либо было человечество, и тем не менее, после столетий его существования, это одно из самых иллюзорных и сложных условий для преодоления.

На самом деле нет необходимости указывать значение диагноза в общем плане лечения этого состояния. Ранняя и правильная диагностика состояния чрезвычайно важна для шансов на выживание.

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

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

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

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

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

Чтобы разобраться в этом случае и увидеть, насколько сложна проблема, давайте посмотрим на одно изображение, увеличенное и уменьшенное -

Уменьшенное изображение

Увеличенное изображение

Набор данных

У нас есть около 220 000 обучающих изображений и 57 000 тестовых изображений. Набор данных является подмножеством набора данных PCam, и единственное различие между ними состоит в том, что все повторяющиеся изображения были удалены.

Набор данных PCam получен из набора данных Camelyon16 Challenge, который содержит 400 полных изображений слайдов срезов сторожевых лимфатических узлов, окрашенных H&E.

Гистопатологические изображения представляют собой изображения лимфатических узлов, окрашенных гематоксилином и эозином (H&E), под микроскопом на предметном стекле. Этот метод окрашивания является одним из наиболее широко используемых в медицинской диагностике и дает синий, фиолетовый и красный цвета. Темно-синий гематоксилин связывается с отрицательно заряженными веществами, такими как нуклеиновые кислоты, а розовый эозин - с положительно заряженными веществами, такими как боковые цепи аминокислот (большинство белков). Обычно ядра окрашены в синий цвет, а цитоплазма и внеклеточные части - в различные оттенки розового.

Используемое программное обеспечение

  1. библиотека fastai, созданная как оболочка для платформы глубокого обучения Facebook с открытым исходным кодом.
  2. Ядра 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% во всех трех задачах, и это тоже за очень короткий промежуток времени обучения и с несколькими строками коды.

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

Надеюсь, вам понравились эти статьи. Как всегда, я буду искренне рад всем вашим отзывам и комментариям.