DCode

MediLabel On-premise

프로젝트 개요

항목 내용
기간 2020.04 — 2022.11 (2년 8개월, 개발 중단으로 프로젝트 종료)
역할 온프레미스 제품 개발 시니어 프로그래머
제품 Qt 기반 의료영상 Labeling 및 Annotation 도구
기술스택 C++, Qt, VTK, TensorFlow, REST API, Git

제품 소개

MediLabel은 인그래디언트(Ingradient, 구 재이랩스) 에서 개발한 딥러닝 기반 의료영상 라벨링 소프트웨어다. 의료 AI 모델 학습에 필요한 대용량 의료 데이터(CT, MRI 등)에서 장기나 병변 영역을 반자동으로Annotation(라벨링)하는 도구이다.

이 제품이 기존 라벨링 도구와 다른 점은 다음과 같다.

MediLabel 제품 소개영상


프로젝트 배경

의료영상 Labeling 도구는 AI 학습 데이터 구축 과정에서 핵심적인 역할을 한다. 의사 또는 라벨러가 의료영상(CT, MRI 등)에서 장기나 병변 영역을 수동으로 라벨링하고, 이 데이터가 AI 모델 학습에 사용된다.

기존 제품은 Web 기반으로 제공되고 있었으나, 대용량 의료영상 데이터를 처리하고 실시간 3D 시각화가 필요한 온프레미스 환경에서의 제품 요구가 있었다. 온프레미스 제품은 클라우드 의존성 없이 병원이나 연구소 내부망에서 운영되어야 했다.

주요 제약은 다음과 같았다.


담당 범위


주요 기능

의료영상 Annotation

의료영상에서 장기나 병변 영역을 Polygon 또는 Volume 형태로 Labeling하는 핵심 기능.

VTK 기반 3D Viewer

CT/MRI Volume 데이터를 3D 공간에서 시각화하고 회전/확대/축소가 가능한 Viewer.

3D Label 편집 (Isocontour, Sculpting)

Volume 데이터에서 특정 영역을 3차원 공간에서 직접 편집하는 기능.

TensorFlow AI 모델 통합

AI 분할 모델의 출력 결과를 제품 내 Label 데이터로 변환하고 편집 가능한 형태로 제공.

REST API 기반 Cloud 연동

온프레미스 제품에서 Cloud 서비스로 데이터를 전송하거나 Cloud의 AI 분석 결과를 수신하는 기능.


설계 및 구현

2D-3D Annotation 데이터 일관성 유지

Annotation은 2D 슬라이스에서 수행되지만, 실제 대상은 3D Volume 데이터다. 2D Polygon으로 그린 영역을 3D 공간상의 연속적인 Volume 데이터로 변환하는 구조가 필요했다.

각 슬라이스의 Polygon을 3D 공간상의 Contour로 변환하고, 보간을 통해 슬라이스 사이의 영역을 채우는 방식으로 Volume Label을 생성했다. 역방향으로 Volume Label을 특정 슬라이스에서 2D Polygon으로 잘라내는 것도 가능하게 하여, 두 표현 간의 변환이 자유롭도록 했다.

고려했던 대안은 3D 공간에서 직접 Polygon을 그리는 방식이었으나, 의사와 라벨러에게 익숙한 2D 슬라이스 기반 조작 방식을 유지하는 것이 더 나은 사용자 경험을 제공한다고 판단했다.

AI 모델 통합의 데이터 변환 레이어

TensorFlow 모델에서 출력된 세그멘테이션 마스크는 픽셀 단위의 Label Map이다. 이를 제품의 Polygon/Volume Label 데이터로 변환하는 과정에서 다음 문제를 해결해야 했다.

변환 레이어를 별도 모듈로 분리하여, 추후 다른 AI 모델(PyTorch, ONNX 등)로 교체되더라도 제품 코어에 영향을 주지 않도록 했다.


개발 환경 및 운영


결과

2022년 제품 개발이 중단되어 프로젝트는 종료되었다. 온프레미스 제품의 핵심 기능은 안정화 단계까지 완료되었으나, 회사의 사업 방향 전환으로 인해후속 개발이 진행되지 않았다.


회고

의료영상 도메인에서 가장 중요하게 고려해야 할 점은 데이터의 정확성과 사용자 조작의 신뢰성이었다. AI가 생성한 Label이라도 반드시 사람이 검증하고 수정할 수 있어야 했고, 이 요구사항이 전반적인 설계에 반영되었다.

VTK와 Qt의 통합은 잘 동작했지만, 두 라이브러리 간의 이벤트 전달과 메모리 관리에서 몇 가지 문제를 경험했다. 특히 대용량 Volume 데이터를 로드할 때의 메모리 사용량을 예측하고 제한하는 것이 필요했다.