Решение задачи "Разработка инструмента оценки качества работы алгоритмов разметки медицинских изображений" хакатона "Лидеры Цифровой Трансформации" команды trying to pretend.
- Папка model: код решения и пример использования.
evaluator.pyмодуль с обученной моделью.example.ipynb: пример использования модуляevaluator.pyдля оценки разметки датасета.clean-solution.ipynbфинальное обучение модели и сохранение файлов.solution.ipynbкод и описание методов, применённых в процессе поиска лучшей модели и подбора гиперпараметров, содержит также не вошедшие в финальную версию, но потенциально полезные идеи.- папка metrics: реализация метрик для сравнения двух изображений.
- Папка application: клиент с графическим интерфейсом.
test_predictions.csvоценка тестовых данных алгоритмом.
- Модель: Python 3 + библиотеки numpy, pandas, scikit-learn
- Клиент: PyQt
Создание объекта модели: model = Evaluator().
Отправка оцениваемых данных: model.fit(expert, predicted), где predicted - оцениваемая разметка, expert - правильная разметка (список grayscale изображений типа np.ndarray).
Получение значения метрик для всех объектов выборки: model.evaluate().
Для поиска различий между автоматической и экспертной разметками применяются метрики:
- Standard surface distance
- Symmetric surface distance
- Volume overlap error
- Relative volume difference
- Dice coefficient
- Hausdorff distance
и их модификации (surface dice at tolerance, surface overlap at tolerance с различными коэффициентами).
Алгоритм оценки разметки
- Составление признаков из расстояний между разметкой эксперта и оцениваемой разметкой, заполнение пропусков, возникших при делении на 0.
- Применение StandardScaler.
- Получение оценки как взвешенного среднего по результату работы случайного леса, SVC с rbf ядром и логистической регрессии.
Алгоритм выбора модели и обучения
- Разделение выборки на обучающую и валидационную.
- Сравнение моделей машинного обучения среди SVC (RBF, linear, sigmoid), GaussianNB, SVR, KNeighborsRegressor, KNeighborsClassifier, RandomForestClassifier, RandomForestRegressor (MAE, MSE), LogisticRegression из библиотеки sklearn с помощью бутстрепа на 100-500 случайно выбранных подмножествах обучающей выборки.
- Выбор трёх лучших моделей, их проверка на валидационной выборке, подбор их гиперпараметров, построение VotingClassifier на них, выбор весов голосования.
- Обучение итоговой модели на всей выборке с известными метками.
Подробное описание, результаты тестов и графики доступны в файле solution.ipynb.
- Кластеризация. Не все способы визуального выделения аномалий будут корректно обрабатываться простой моделью на метриках: из-за неравномерного распределения выделенных пикселей в области качество оценки может существенно упасть. Решить эту проблему может предварительная кластеризация пикселей.
- Небинарные маски. Реализация решения для масок, состоящих из более, чем двух значений, возможно с помощью добавления веса каждому пикселю.
- Обобщение на 3D.
- Атласы. Использование цифровых атласов тела позволит исключить случайно затронутые выделением эксперта области и повысить точность оценки.
- SergioVera, DeboraGil и др. “Medial structure generation for registration of anatomical structures”, Skeletonization, Chapter 11 (2017)
- Ramprasaath R. Selvaraju и др. “Grad-CAM: Visual Explanations from Deep Networks via Gradient-based Localization”, IEEE (2017).
- R. Padilla, S. L. Netto и E. A. B. da Silva, "A Survey on Performance Metrics for Object-Detection Algorithms", IWSSIP (2020)
- Dinu Dragan, и Dragan Vojo Ivetic, “Region Marking Software Tool for Medical Images”, eTELEMED (2012)
- Реализация метрик https://github.com/deepmind/surface-distance