Врачам, работающим с гистологиями различных органов, в частности костного мозга, приходится тратить много времени на анализ этих изображений вручную. Поэтому предлагается приложение, способное сегментировать клетки костного мозга на гистологических изображениях и классифицировать их.
-
image_viewer.py: За основу взято решение со stackoverflow (не могу найти источник. Если найду, то обновлю)
-
main_window.py: https://stackoverflow.com/questions/9249500/pyside-pyqt-detect-if-user-trying-to-close-window - за основу взято решение
Для взаимодействия с сервером необходим файл client.txt, который в целях информационной безопасности в данном репозитории отсутствует. Для получения необходимо написать на почту:
Необходимо установить следующие библиотеки для Python:
- PySide6 (PyQt 6)
- minio
- numpy
Опционально для алгоритма Watershed нужно установить следующие библиотеки для Python:
- OpenCV
- skimage
Для обучения нейронной сети нужно иметь установленными следующие модули:
- torch
- torchvision
- albumentations
Необходимо скачать все файлы в этом репозитории и сохранить их в одном репозитории, в том же относительном расположении, в котором они располагаются в github.
Для запуска приложения необходимо находится в той же папке, где расположен README.md, вызвать командную строку и в ней ввести:
python main.pyДля запуска обучения нейронной сети необходимо находится в папке model, вызвать командную строку и в ней ввести:
python main.pyДля предоставления исполняемого файла необходимо написать на почту:
Графический интерфейс выполнен согласно изначальной постановке задачи.
В меню File можно выбрать папку с изображениями. Для этого необходимо выбрать Load Images и в появившемся окне выбрать папку, где находятся изображения. После этого в левом верхнем поле отобразиться список всех изображений (пока что разрешения, которые поддерживаются, - это jpg, jpeg, png).
В меню File можно отдельное изображениями. Для этого необходимо выбрать Load Image и в появившемся окне выбрать файл. После этого в левом верхнем поле отобразиться список всех изображений (пока что разрешения, которые поддерживаются, - это jpg, jpeg, png).
Выбор элемента списка изображений, клеток и классов осуществляется через нажатие левой кнопки мыши или через Enter.
Для сегментации выбранного изображения необходимо выбрать меню Algorithms и в нём выбрать алгоритм, по которому будет осуществляется сегментация. На данный момент доступен только Watershed. После выбора алгоритма и повторном выборе изображения слева отобразится список всех клеток, которые алгоритм смог выделить. При выборе определённой клетки в правом верхнем окне отобразится увеличенное изображение клетки (размером 200x200 пикселей).
Для просмотра того, как алгоритм справился с сегментацией нужно выбрать меню Edit и в нём выбрать Segmentation. Тогда отобразиться жёлтым цветом границы сегментированных изображений.
Для того, чтобы получать данные с сервера по определённому изображению, нужно выбрать меню Mode и в нём выбрать Server Mode. После чего, выбрать изображение (название файла с гистологией должно совпадать с тем, которым именуется этот же файл на сервере, если он есть). Тогда после первого выборе изображения в списке, json-файл с данными по этому изображению будет скачен с сервера.
Для того, чтобы отправить на сервер все данные (изображения отсегментированных клеток с присвоенными классами и json-файлы), необходимо в меню Server выбрать Server Upload.
В меню Mode можно выбрать Transparency Mode. Это режим, который позволяет выдеть на месте изобржения клетки: изображение клетки, где отсегметированная часть имеет большую яркость, чем неотсегментированная часть.
Для перехода в режим выбора класса (или смены класса) необходимо выбрать изображение из списка изображений и клетку из списка клеток, затем, нажать на Change Class. Под увеличенным изображением клетки появится список всех классов клеток костного мозга. Для присвоения этого класса нужной клетке необходимо после выбора класса либо выбрать другую клетку, либо выбрать другое изображение, либо нажать кнопку Confirm (тогда список классов исчезнет), либо закрыть приложение.
При повторном выборе гистологического изображения список клеток изменится: будет присвоен класс и вероятность, с которая была выдана после классификации или после ручного присвоения (в этом случае вероятность будет равна 1).
После выведения списка клеток можно нажать кнопку Sort Cells, которая отсортирует все клетки по названию класса в алфавитном порядке, по возрастанию вероятности и по номеру клетки.
Это приложение условно можно разбить на 2 части:
-
Графический интерфейс (описание см. выше)
-
Свёрточная нейронная сеть для классификации клеток костного мозга (EfficientNet B5).
Графический интерфейс состоит из следующих программ:
-
image_viewer.py - содержит класс ImageViewer, который нужен для отображения гистологического изображения и изображения клетки. Этот класс наследуется от QGraphicsView.
-
list_widget.py - содержит класс ListWidget, который наследуется от QListWidget с добавлением возможности взаимодействия через клавишу Enter.
-
main_window.py - содержит класс QCMainWindow, который наследуется от QMainWindow с добавлением всплывающего сообщения.
-
server_connect.py - содержит класс ServerClient с методами загрузки и скачивания файлов с сервера и на сервер соответственно.
-
watershed.py - содержит реализацию алгоритма Watershed с использованием библиотеки OpenCV и skimage
-
ui_interface.py - содержит класс Ui_MainWindow, который наследуется QCMainWidget, который использует все выше описанные файлы для создания графического интерфейса приложения.
-
main.py - запускает программу.
Обучение свёрточная нейронной сети состоит из следующих программ:
-
get_data.py - функция, которая преобразует массив данных, лежащий в путях указанных в отдельном файле dataset_paths.csv, в данные для обучения нейронной сети (разделённые на батчи, перемешанные и аугментированные). Эта функция возвращает loader тренировачной и валидационной выборок.
-
train.py - класс обучения нейронной сети, с методами train, evaluate и run.
-
visualisation.py - содержит функции для визуализации изображений, графиков и матриц ошибок (не используется).
-
model_run.py - запускает обучение нейронной сети и сохраняет данные об обучении в отдельные json-файлы.
-
model - MIT License
-
Графический интерфейс - MIT License
В случае возникновения проблем писать на почту:
