RL-Medical
PyTorch를 사용한 해부학적 랜드마크 검출을 위한 다중 에이전트 심층 강화 학습(Multiagent Deep Reinforcement Learning).
이 코드는 논문 Communicative Reinforcement Learning Agents for Landmark Detection in Brain Images의 코드입니다.
서론
해부학적 랜드마크를 정확하게 검출하는 것은 여러 의료 영상 작업에서 필수적인 단계입니다. 이 저장소는 3D 의료 영상에서 랜드마크를 자동으로 검출하기 위해 새로운 통신형 다중 에이전트 강화 학습(Communicative Multi-Agent Reinforcement Learning, C-MARL) 시스템을 구현합니다. C-MARL은 모든 에이전트가 아키텍처의 특정 가중치를 공유함으로써 명시적인 통신 채널뿐만 아니라 암묵적인 통신 신호를 학습할 수 있게 합니다.
C-MARL 외에도, 이 코드는 단일 에이전트 및 통신 채널이 없는 다중 에이전트(Network3d로 명명)도 지원합니다.
이 코드는 원래 Amir Alansary의 저장소에서 포크된 것입니다.
편의를 위해 data 폴더에 ADNI 데이터셋에서 주석 처리된 20개의 랜드마크가 있는 10개의 뇌 MRI 스캔이 포함되어 있습니다.
결과
여기는 보지 못한(unseen) 데이터에서 학습된 에이전트들의 몇 가지 예시입니다:
- 5개의 에이전트로 구성된 제안하는 C-MARL 시스템의 한 예입니다. 이 에이전트들은 뇌 MRI 스캔에서 5가지 다른 랜드마크를 찾고 있습니다. 각 에이전트의 ROI는 노란색 상자로 표시되며 파란색 점을 중심으로 하고, 빨간색 점은 목표 랜드마크입니다. ROI는 매 에피소드가 시작될 때마다 3mm 간격으로 샘플링됩니다. 빨간 원판의 둘레 길이는 z축에서 현재 랜드마크와 목표 랜드마크 사이의 거리를 나타냅니다.
<p align="center">
<img src="https://raw.githubusercontent.com/gml16/rl-medical/HEAD/doc/brain_5_agents.gif">
</p>
- 유사하게, 태아 초음파 스캔에서 5개의 C-MARL 에이전트가 사용되었습니다.
<p align="center">
<img src="https://raw.githubusercontent.com/gml16/rl-medical/HEAD/doc/fetal_5_agents.gif">
</p>
<p align="center">
<img src="https://raw.githubusercontent.com/gml16/rl-medical/HEAD/doc/cardiac_apex.gif" width="255">
</p>
- 성인 뇌 MRI에서 전방교련(anterior commissure, AC)점 검출 (HQ video)
<p align="center">
<img src="https://raw.githubusercontent.com/gml16/rl-medical/HEAD/doc/brain_ac.gif" width="255">
</p>
- 태아 두부 초음파에서 투명뇌실(cavum septum pellucidum, CSP)점 검출 (HQ video)
<p align="center">
<img src="https://raw.githubusercontent.com/gml16/rl-medical/HEAD/doc/fetal_csp.gif" width="255">
</p>
코드 실행하기
메인 파일은 src/DQN.py이며, 아래에 설명된 훈련(training) 모드와 평가(evaluation) 모드의 두 가지 사용 방식을 제공합니다.
편의를 위해 Conda 환경이 제공되었습니다 (참고: 제 컴퓨터에서는 PyTorch 및 CUDA 툴킷 때문에 환경 크기가 3.7GB입니다). 코드가 이미 작동한다면 사용할 필요는 없습니다.
conda env create -f environment.yml
conda activate rl-medical
다른 모든 명령어는 src 폴더에서 실행합니다.
훈련(Train)
5개의 C-MARL 에이전트(코드에서는 CommNet으로 명명됨)를 훈련하는 예시
python DQN.py --task train --files data/filenames/image_files.txt data/filenames/landmark_files.txt --model_name CommNet --file_type brain --landmarks 13 14 0 1 2 --multiscale --viz 0 --train_freq 50 --write
위 명령어는 논문에서 제시된 모델을 훈련하는 데 사용된 것입니다. 리플레이 버퍼(replay buffer) 크기의 기본값은 매우 큽니다. 메모리 사용량을 줄이려면 --memory_size 및 --init_memory_size 플래그에 더 낮은 값을 설정하는 것을 고려하십시오.
--write 플래그를 사용하면, 훈련 로그와 Tensorboard가 --logDir 디렉토리(기본값은 runs)에 생성됩니다.
<code>--landmarks</code> 플래그는 에이전트의 수와 목표 랜드마크를 지정합니다. 예를 들어, --landmarks 0 1 1은 총 3개의 에이전트가 있음을 의미합니다. 한 에이전트는 랜드마크 0을 찾고 나머지 두 에이전트는 동일한 랜드마크 번호 1을 찾는 것입니다. 이 3개 에이전트 모두 서로 통신합니다.
평가 (Evaluate)
python DQN.py --task eval --load 'data/models/BrainMRI/CommNet8agents.pt' --files 'data/filenames/image_files.txt' 'data/filenames/landmark_files.txt' --file_type brain --landmarks 13 14 0 1 2 3 4 5 --model_name "CommNet"
python DQN.py --task eval --load 'data/models/BrainMRI/CommNet5agents.pt' --files 'data/filenames/image_files.txt' 'data/filenames/landmark_files.txt' --file_type brain --landmarks 13 14 0 1 2 --model_name "CommNet"
<!-- * 3 C-MARL 에이전트
```
python DQN.py --task eval --load 'data/models/BrainMRI/CommNet3agents.pt' --files 'data/filenames/image_files.txt' 'data/filenames/landmark_files.txt' --file_type brain --landmarks 13 14 0 --model_name "CommNet"
``` -->
python DQN.py --task eval --load 'data/models/BrainMRI/Network3d8agents.pt' --files 'data/filenames/image_files.txt' 'data/filenames/landmark_files.txt' --file_type brain --landmarks 13 14 0 1 2 3 4 5 --model_name "Network3d"
python DQN.py --task eval --load 'data/models/BrainMRI/SingleAgent.pt' --files 'data/filenames/image_files.txt' 'data/filenames/landmark_files.txt' --file_type brain --landmarks 13 --model_name "Network3d"
Ground Truth가 없는 추론 (Inference without ground truth)
인수(argument) --task play를 사용하면 실제 정답 랜드마크 없이 추론(inference)을 실행할 수 있습니다. 이 경우, 인수 --files에는 image_files.txt만 포함되어야 하며, landmark_files.txt는 전달해서는 안 됩니다. 예를 들어, 8개의 C-MARL 에이전트의 경우 다음과 같습니다:
python DQN.py --task play --load 'data/models/BrainMRI/CommNet8agents.pt' --files 'data/filenames/image_files.txt' --file_type brain --landmarks 13 14 0 1 2 3 4 5 --model_name "CommNet"
참고로, play 모드(task mode)를 사용할 때 평가 파일과 로그에는 정답이 없기 때문에 랜드마크의 xyz 위치와 거리 대신 "N/A"가 표시됩니다.
사용법 (Usage)
usage: DQN.py [-h] [--load LOAD] [--task {play,eval,train}]
[--file_type {brain,cardiac,fetal}] [--files FILES [FILES ...]]
[--val_files VAL_FILES [VAL_FILES ...]] [--saveGif]
...
시각화 도구 (Visualiser)
랜드마크가 있는 이미지 디버깅/시각화를 돕기 위해 visualise.py 스크립트를 사용할 수 있습니다. 이 스크립트는 각 이미지를 에이전트들이 랜드마크 위치에 배치된 것을 보여줍니다. Enter 키를 누르면 데이터셋의 다음 이미지로 넘어갑니다.
사용 예시:
python visualiser.py --files data/filenames/image_files.txt data/filenames/landmark_files.txt --file_type brain --landmarks 0 1 2 3
기여 (Contributing)
이슈(Issues)와 풀 리퀘스트(pull requests)는 언제나 환영합니다.
인용 (Citation)
본 코드(code)를 연구에 사용한다면, 이 논문을 인용해 주십시오:
@article{leroy2020communicative,
title={Communicative Reinforcement Learning Agents for Landmark Detection in Brain Images},
author={Leroy, Guy and Rueckert, Daniel and Alansary, Amir},
...
자료 (Resources)
이 프로젝트에 대한 더 많은 정보: