Введение

Так как это мой первый пост на Хабре, поэтому напишу немного о себе.В 2018 окончил медицинский университет и в данный момент около 3.5 лет работаю патологоанатомом. Год назад после участия в проекте по аннотации гистологических изображений, заинтересовался digital pathology и начал самостоятельно изучать то, что с этим связано (Python, ML,DL на Coursera и DataCamp) и в частности computer vision.

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

  • Получение полнослайдовых изображений (WSI) – подготовка датасета.

  • Аннотация изображений

  • Получение готового датасета (Train, Validation и Test)

  • Выбор и тренировка моделей

  • Тестирование моделей

Актуальность

Рак почки составляет около 2 % от всех диагнозов рака в мире.По данным GLOBOCAN диагностируется около 400 000 случаев в мире ежегодно (около 2.2% диагнозов рака).Соотношение мужчин и женщин около 2:1.(более детально по эпидемиологии можно почитать здесь ). Светлоклеточный рак почки - один из разновидностей рака, клетки которого имеют светлую ( отсюда и название) или эозинофильную (розовую) цитоплазму .Это самый частый вид почечноклеточного рака у взрослых и составляет 65-70 % от всех случаев. Часто связан с мутацией в гене - супрессоре опухолевого роста (VHL).

Датасет

Даже с учётом развития digital pathology и возможностью делиться слайдами, найти в открытом доступе достаточное количество изображений определенного вида опухоли (да и не только опухоли) пригодных для обучения модели и валидации довольно затруднительно.

Для проекта я выбрал коллекцию слайдов гистологических изображений, окрашенных гематоксилином и эозином, пациентов со светлоклеточным раком почки проекта Национального института рака США «Консорциум клинического протеомного анализа опухолей» (Clinical Proteomic Tumor Analysis Consortium, CPTAC) Clear Cell Renal Cell Carcinoma (CPTAC-CCRCC). Данные доступны на сайте Cancer Imaging Archive (TCIA).

Выбрал этот датасет из-за большого количества доступного материала (размер - 190 GB) в рамках одной патологии, из-за чего не должно было возникать проблем с подготовкой материала для тренировочного, валидационного и тестового наборов данных, обучением модели. Изображения доступны для скачивания в формате .svs.

Также присутствуют клинические данные пациентов, результаты генетических исследований (например статус VHL) . Для моей задачи они не были нужны, однако можно использовать в дальнейшем: например попытаться обучить модель предсказывающую статус гена VHL по гистологической картине.

Также хочу сразу отметить несколько минусов датасета :

  • Изображения без аннотаций. Так как я по образованию патологоанатом и исследование гистологического материала - это мои рабочие обязанности, то аннотировал слайды я самостоятельно.

  • Присутствуют слайды только хорошего качества : практически не встречаются артефакты и неинформативные изображения который не редки в обычной врачебной практике. Это влияет на результаты модели (результаты будут лучше, чем при использовании модели в реальной клинической практике).

Аннотация изображений

Как уже писал я ранее, аннотацию изображений проводил я самостоятельно с помощью программы QuPath 0.3.2.

Изначально для изображений я определил 6 классов :

  1. Кровь (Blood)

  2. Светлоклеточный рак почки (CCRCC)

  3. Жир (Fat)

  4. Ткань почки (Kidney)

  5. Строма (Stroma) – соединительная ткань, которая не является специфическим элементом и может встречаться как в нормальной ткани, так и в опухоли. Сюда же входят стенки сосудов и др..

  6. Артефакты (Artifact)

Однако из-за того, что практически все слайды хорошего качества, класс “Артефакты” я убрал.

Примеры экземпляров классов
Примеры экземпляров классов

На слайдах с помощью программы QuPath проводилась аннотация изображений: размечались крупные зоны, относящиеся к какому-либо классу, а затем с помощью встроенного функционала программы эти зоны разделялись на фрагменты (Tiles), на которых в последующем и обучались нейронные сети.

Аннотированное изображение ( присутствуют CCRCC и Blood)
Аннотированное изображение ( присутствуют CCRCC и Blood)
То же изображение, однако зоны разделены на фрагменты (Tiles)
То же изображение, однако зоны разделены на фрагменты (Tiles)

Получение готового датасета (Train, Validation и Test)

Координаты объектов с метками классов экспортировались в формате JSON (Pretty JSON), а затем с помощью библиотеки OpenSlide на Python со слайдов извлекались изображения в формате .jpeg и размером 256х256 пикселей. К изображениям не применялись методы аугментации или нормализации окраски.

Ссылка на блокнот

Весь датасет был разделён на 3 набора данных: Train, Validation и Test.

 

Train (slides = 62, patients = 27)

Validation (slides = 16, patients =  7)

Test (slides = 52, patients = 15

Blood

7697

2075

2446

CCRCC

88429

16644

43758

Fat

10924

10291

13062

Kidney

50306

14885

42635

Stroma

12150

2010

5739

Total

169506

45905

107640

Распределение изображений по классам
Распределение изображений по классам

Отмечу, что слайды (а в последствии изображения) от одного и того же пациента могли присутствовать только в одном из наборов т.е. изображения от одного пациента не могли быть, например, в Train и Validation.

Нужно добавить, что c учётом того, что проект тренировочный и модели не будут использоваться в реальной клинической практике, из всех доступных полнослайдовых изображений для обучения и тестирования я использовал только часть. Это сделано естественно для удобства и экономии времени, чтобы иметь возможность более-менее адекватно обучить нейросети на Google Colab.

Выбор и обучение моделей глубокого обучения

Для обучения использовалось три готовых модели имплементированных на Keras:

  1. InceptionV3

  2. EfficientNetV2S

  3. ResNet101V2

Модель

Количество параметров

Глубина

Top-1 accuracy на ImageNet

Top-5 accuracy на ImageNet

InceptionV3

23.9 M

189

77.9%

93.7%

EfficientV2S

21.6 M

-

83.9%

96.7%

ResNet101V2

44.7 M

205

77.2%

93.8%

Ссылка на блокнот

Функция потерь - "Categorical crossentropy"

Метрики : Accuracy score, ROC_AUC, PR_AUC, Precision, Recall

Результаты

Model

Set

Loss

Accuracy

ROC_AUC

PR_AUC

Precision

Recall

 

Inception V3

 

Train

0.0541

 0.9805

0.9989

0.9959

 0.9814

0.9798

Validation

0.3529

0.9248

0.9861

0.9271

0.9266

0.9233

Test

0.6850

0.8344

0.9650

0.8977

0.8405

0.8293

 

EfficientNetV2S

 

Train

0.0824

0.9714

0.9975

0.9906

0.9731

0.9700

Validation

0.3346

0.9280

0.9877

0.9154

0.9304

0.9263

Test

0.3971

0.9071

0.9834

0.9182

0.9107

0.9038

 

ResNet101V2

 

Train

0.0584

0.9796

0.9984

0.9937

0.9807

0.9785

Validation

0.2530

0.9390

0.9905

0.8920

0.9415

0.9370

Test

0.2264

0.9392

0.9874

0.9260

0.9419

0.9367

Confusion matrix для каждой модели
Confusion matrix для каждой модели

Ссылка на блокнот

Наилучшие результаты как на валидационном, так и на тестовом наборе данных показала модель ResNet101V2 с точностью в 93.92 % и PR_AUC - 0.926. С классификацией изображений, содержащих жировую ткань или кровь трудностей у моделей не возникало. Довольно большое количество ошибок присутствует среди классов "Stroma", "CCRCC" и "Kidney".

"CCRCC" и "Kidney" : ткани имеют довольно сложную структуру, ткань почки, например, отличается в различных её отделах : присутствуют канальцы различного строения клубочки и др. Вероятно, для более точной классификации следуют использовать большее количество данных для обучения, что данный датасет позволяет. "Stroma" также разнородный класс и к тому же один из наименее представленных. В него я включал соединительную, мышечную ткани, стенки сосудов, зоны гиалиноза. Этот класс, возможно, следует разделить на несколько и более чётко обозначить их. Отмечу, что строма, жир и кровь - это вполне нормальные ткани организма и изображения представителей этих классов можно набирать из различных датасетов гистологических изображений.

Также для увеличения качества модели можно использовать методы нормализации окраски (имеются готовые библиотеки на Python). Ведь один и тот же материал, окрашенный разными лаборантами может выглядеть по разному : например, может превалировать розовый, или фиолетовый цвет, вид ядерного хроматина и др..

Всем, кто прочитал это спасибо за внимание :-) Буду рад всем советам касательно обучения моделей для компьютерного зрения в патологической анатомии или критике работы. Повторюсь, что не являюсь ML-инженером и данный проект исключительно любительский.

Комментарии (4)


  1. ShashkovS
    26.05.2022 22:16

    Круто!
    А каким образом получают подобные изображения от… живых пациентов?


    1. Sarjin
      27.05.2022 16:13

      Биопсия почки? разрезали, взяли материал, зашили.


  1. radioxoma
    27.05.2022 13:05

    Не описаны проблемы с которыми столкнулись. Например отсутствие сканера для стёкол)

    А какие "методы нормализации окраски"? Вклад лаборанта можно частично нивелировать используя разделение красителей методом color deconvolution (если не рассматривать флуоресцентную микроскопию), получится 2-3 серых картинки.


    1. Goupil
      27.05.2022 13:42

       Например отсутствие сканера для стёкол)

      Автор применял датасет с Cancer Imaging Archive

      получится 2-3 серых картинки.

      Не понимаю как разделение на каналы может помочь. Вы предлагаете разделить на каналы допустим гемотоксилина и эозина и потом отдельно их анализировать? Или сделать из них 2n тензор вместо RGB? Ну так это проблему не снимет.