CDSS-AI 파이프라인 구축, 유연한 다중 암종 분석 아키텍처 설계 및 구현
CDSS-AI 파이프라인 구축, 유연한 다중 암종 분석 아키텍처 설계 및 구현
지난 이틀간의 목표는 단일 기능의 불안정한 파이프라인을 안정화하고, 이를 여러 종류의 AI 모델과 연동할 수 있는 유연하고 확장 가능한 아키텍처로 발전시키는 것이었습니다. 이 포스트는 그 과정에서 마주한 기술적 과제들과 이를 해결하기 위해 수립한 알고리즘 및 시스템 아키텍처를 기록합니다.
1일차: 파이프라인 기초 안정화 및 핵심 알고리즘 설계
첫날의 목표는 눈에 보이는 기능 이면의 불안정한 데이터 흐름을 바로잡고, 앞으로의 확장을 위한 기술적 청사진을 그리는 것이었습니다.
파이프라인 안정화: 눈에 보이지 않는 기반 다지기
초기 시스템은 CT 이미지로부터 3D 분할 결과를 생성했지만, 그 결과를 저장하고 사용자에게 보여주는 과정에서 여러 오류가 발생했습니다.
- 데이터 무결성 확보: Django 모델과 Celery Task 간의 데이터 불일치로 인한
FieldError,ValueError를 해결했습니다. 이는 AI 분석 결과를 데이터베이스에 정확하고 일관되게 기록하는 메커니즘을 수립하는 과정이었습니다. - 웹 접근성 확보: 3D 뷰어에 접근할 수 없었던
404 Not Found오류를 해결했습니다. 이 문제의 해결 메커니즘은 ①데이터베이스에 웹 표준(URL)에 맞는 경로를 저장하고, ②웹 서버가 해당 경로의 파일에 접근할 수 있도록 라우팅 규칙을 설정하는 두 가지 핵심 작업으로 이루어졌습니다.
2단계 파이프라인 설계: 핵심 알고리즘 수립
안정화된 1단계(장기 분할) 위에 2단계(종양 분할) 기능을 추가하기 위한 두 가지 핵심 알고리즘을 설계했습니다.
데이터 충돌 해결을 위한 ‘재가공’ 알고리즘
- 문제: 3D UI는 시각화를 위해 여러 개의 분리된 장기 파일을, AI 분석은 효율성을 위해 하나로 합쳐진 데이터 파일을 필요로 하는 요구사항 충돌이 있었습니다.
- 해결 알고리즘:
TotalSegmentator가 여러 개의 개별 장기 파일을 생성합니다.- 이 파일들로 즉시 UI용 3D 뷰를 만듭니다.
- 그 후, 코드가 이 개별 파일들을 다시 읽어 하나의 ‘멀티-라벨’ 데이터 파일로 병합하여 다음 AI 분석 단계를 위해 저장합니다. 이 데이터 재가공 메커니즘을 통해 상이한 두 요구사항을 모두 충족시켰습니다.
AI 모델을 위한 ‘입력 데이터 정제’ 알고리즘
- 문제: AI 종양 분할 모델은 단순히 장기의 ‘모양(마스크)’이 아닌, 실제 의료 영상 값이 담긴 이미지를 필요로 합니다.
- 해결 알고리즘: ‘디지털 마스킹’ 기법을 적용하기로 설계했습니다. 이는 1단계에서 저장된 ‘원본 CT 영상’과 ‘장기 마스크’를 불러와, 두 데이터를 곱셈 연산하여 ‘특정 장기 영역의 CT 값만 남기는’ 정제된 이미지를 생성합니다.
# AI 모델의 예측 정확도를 보장하는 핵심 알고리즘 masked_ct_data = original_ct_data * organ_mask_data
2일차: 다중 암종 지원을 위한 아키텍처 확장 및 구현
둘째 날은 설계된 알고리즘을 바탕으로, 여러 암종에 유연하게 대응할 수 있는 확장 가능한 시스템 아키텍처를 구현하는 데 집중했습니다.
외부 프로그램 연동: 정교한 오류 진단 메커니즘 구축
TotalSegmentator 실행 실패 시, 원인을 알 수 없는 exit status 1 오류가 발생했습니다.
- 해결 메커니즘: Django의 에러 처리 로직을 수정하여, 외부 프로그램 실행이 실패할 경우 해당 프로그램이 출력하는 표준 에러(Stderr) 메시지를 가로채 상세히 기록하도록 개선했습니다. 이는 향후 어떤 외부 AI 도구를 연동하더라도 문제의 근본 원인을 신속하게 진단할 수 있게 하는 중요한 디버깅 메커니즘입니다.
다중 암종 분석: 차별화된 전략과 유연한 아키텍처
연구 보고서 분석을 통해, 각 암종별 모델의 기술 성숙도에 따라 차별화된 접근 전략을 수립하고 시스템에 적용했습니다.
| 암종 (Cancer) | 핵심 전략 | 사용 AI/라이브러리 | 결과물 |
|---|---|---|---|
| 간/신장 | 계단식(Cascaded) 분석 | TotalSegmentator + nnU-Net | 장기 및 종양 분할 |
| 난소암 | 특화 라이브러리 직접 호출 | ovseg | 병변(종양) 분할 |
| 유방암 | 조직(Tissue) ROI 확보 | TotalSegmentator | 유방 조직 분할 |
| 위/폐 | 장기 분할 시각화 | TotalSegmentator | 장기 분할 |
확장 가능한 시스템 아키텍처 구현
향후 새로운 AI 모델이 추가되더라도 시스템을 쉽게 확장할 수 있도록 유연한 구조를 구현했습니다.
백엔드:
target_organ파라미터를 받는 단일 API 엔드포인트가 ‘라우터’ 역할을 하도록 설계했습니다.# target_organ 값에 따라 적절한 Celery Task를 호출하는 API 라우터 if target_organ in ['liver', 'kidney']: task = run_nnunet_pipeline.delay(...) elif target_organ == 'ovary': task = run_ovarian_cancer_segmentation.delay(...) elif target_organ == 'breast': task = run_breast_segmentation.delay(...)- 데이터베이스: 하나의 CT 검사에 여러 종류의 분석 결과가 저장될 수 있도록
ForeignKey관계로 데이터 모델을 수정했습니다. - 프론트엔드: API가 전달하는 모든 분석 결과를 동적으로 순회(Loop)하며 화면에 렌더링하도록 UI 컴포넌트를 구현했습니다. 이로써 향후 어떤 종류의 분석이 추가되더라도 UI 코드 변경 없이 자동으로 화면에 표시됩니다.
종합 결론 및 향후 과제
- 주요 성과:
- 불안정했던 단일 AI 파이프라인을 안정화하고 데이터 처리 메커니즘을 고도화했습니다.
- 각 암종의 기술적 특성을 반영한 차별화된 AI 분석 전략을 수립했습니다.
- 향후 기능 확장에 용이한 유연한 백엔드-프론트엔드 아키텍처를 성공적으로 구현했습니다.
- 향후 과제:
- 구현된 전체 파이프라인에 대한 통합 테스트 및 안정성 검증.
- 실제 임상 데이터를 이용한 각 AI 모델의 성능 평가.
- 오믹스 분석 결과와 AI 영상 분석 결과를 자동으로 연동하는 로직 구현.
This post is licensed under CC BY 4.0 by the author.