Implementation notes

Как реализован проект

MedSeg Body Lab сделан как исследовательский MVP: веб-интерфейс принимает снимок, Python backend готовит preview, запускает выбранный сегментатор и возвращает маску, оверлей и метрики обработки.

Пример медицинского снимка

Архитектура

Backend отдает статический frontend, принимает multipart-загрузки через `/api/segment`, готовит preview изображения, сохраняет run в папку `runs/` и возвращает ссылки на `original.png`, `mask.png`, `overlay.png`.

  • Frontend: HTML, CSS, vanilla JavaScript.
  • Backend: Python HTTP server без тяжелой инфраструктуры.
  • Images: Pillow и NumPy для preview, масок и оверлеев.
  • Medical path: nibabel, pydicom, SimpleITK для CT/MR preview и подготовки данных.
  • Training path: PyTorch Residual U-Net на парах `image + mask`.
  • TotalSegmentator path: готовые CT/MRI модели для NIfTI/DICOM volume.

Как обучалась модель

В проект добавлен Residual U-Net на PyTorch. Стартовый checkpoint был обучен на синтетических парах `image + mask`, затем модель дообучается на CTPelvic1K dataset6: реальные CT-срезы таза совмещаются с масками костей, а подготовщик добавляет псевдо-классы мягких тканей, контуров и плотных областей. Обучение идет с Dice + CrossEntropy loss, augmentations, resume/fine-tune и сохранением метаданных `best_dice` в `artifacts/best_model.json`.

  • NumPy генерирует и нормализует массивы изображений.
  • Pillow читает PNG/JPG/TIFF и сохраняет mask/overlay.
  • PyTorch обучает `resunet_v2` и выполняет inference.
  • nibabel читает NIfTI-тома CTPelvic1K, SimpleITK оставлен для других medical volume форматов.

Pipeline

1

Upload

Пользователь загружает PNG/JPG/TIFF, NIfTI или DICOM-файл через браузер.

2

Normalize

Backend приводит изображение к 8-bit preview и сохраняет исходник в run-папку.

3

Segment

Выбирается demo-алгоритм или обученная U-Net модель.

4

Report

Интерфейс показывает маску, оверлей, метрики, предупреждения и ссылку скачивания.

Technologies

Python

Оркестрация API, загрузок, файлов результата и запуска сегментаторов.

NumPy + Pillow

Быстрая обработка 2D preview, маски, color overlay и синтетического демо-снимка.

nibabel / SimpleITK

Чтение NIfTI, MHA/MHD/NRRD volume-данных и подготовка срезов для обучения.

PyTorch

Residual U-Net, Dice+CE loss, augmentations, resume и fine-tune на PNG-парах.

TotalSegmentator

Опциональный backend-режим для готовой сегментации CT/MRI volume из NIfTI или DICOM.

Vanilla JS

Форма загрузки, drag-and-drop, переключение слоев и отображение результата.

CTPelvic1K scripts

Подготовка реальных CT volume+mask пар в PNG-набор для fine-tune модели.