[BME, CS, Journal] 열공망막박리 진단을 위한, 검안경 사진을 이용한 딥러닝(Deep Learning)

By @doctorbme1/30/2018kr-med

안녕하세요, @doctorbme 입니다. 오늘은 의학 분야에서 나름 뜨겁다는 영상 진단에 관한 한 논문을 들고 찾아뵐까 합니다. 그런데 사실 영상 진단의 이미지도 다양하고 적용 분야 또한 다양해서, 리뷰가 한번에 끝날 것 같지는 않습니다. 기회가 되는 대로 틈틈히 올려보도록 하겠습니다.

오늘 리뷰할 논문은 Accuracy of deep learning, a machine-learning technology, using ultra–wide-field fundus ophthalmoscopy for detecting rhegmatogenous retinal detachment 입니다. 초광각 안저촬영을 통해 열공 망막박리를 진단하자는 연구입니다. 열공 망막박리는 망막이 찢어지거나 구멍이 생기게 되어, 결국 망막이 떨어지게 되는 질환인데, 빠른 처치가 필요합니다. Scientific Reports 논문이고 Creative Commons 4.0이 걸려있으므로 편하게 사용 가능합니다. 이 글의 그림은 논문에 포함된 그림입니다.


주의사항 1 : 이 논문은 제가 보기에 그다지 잘쓴 논문이 아닙니다. 그럼에도 리뷰하는 이유는 의학 영상의 진단에 대해 딥러닝을 적용함에 있어서, 가장 기초적인 흐름을 보이기 때문입니다.

주의사항 2: 본 논문에 대한 의견은 제 개인적인 의견일 뿐이며, 참고만 하시길 바랍니다.


1) 데이터

  • 열공망박박리를 가진 407명의 환자에서 추출한 411개의 이미지 (학습: 329개, 평가: 82개)
  • 열공망박박리를 가지지 않은 238명의 사람에게서 얻은 420개의 이미지 (학습: 336개, 평가: 84개)

지도학습을 위해 환자와 환자가 아닌 사람들의 데이터를 구성합니다. 임상적 진단을 위한 가장 간단한 구성으로, 질환이 있거나 없거나 (1 or 0)를 판단하는 binary classification을 구성하는 경우가 많습니다. 물론 3개 이상의 진단 혹은 분류를 원하는 경우가 있습니다. 이 경우에는 확률을 반영할 수 있는 Soft-max 를 씁니다. (보통 맨 마지막 노드에 넣습니다.)

하지만 Soft-max를 쓰는 경우 ROC(Receiver operating characteristic)를 구성하기 난감해지기도 합니다. 민감도와 특이도, 이를 바탕으로 하는 ROC curve와 이에 따른 AUC(Area Under Curve)를 적용할 때, 여러 분류가 존재한다면 어디까지 맞춘 걸로 보고 (true) 틀린 걸로 볼 것이냐 (false)에 대한 문제가 남기 때문입니다.


논문의 figure 1. 대표적인 초광각 안저촬영 사진 입니다.
왼쪽의 경우 정상 사진을, 오른쪽의 경우 열공망박박리 (흰색 화살표)가 발생한 사진을 나타냅니다.

2) 방법

논문의 figure 3. 논문에서 사용한 Convolutional neural network(CNN) 구조에 대한 모식도 입니다.

  • 모델 구성
    데이터셋에서 얻은 이미지를 우선 96 x 96 픽셀의 작은 크기로 전환하고, (원래 이미지는 3900 x 3072 크기 입니다. 매우 큽니다.) 이를 바탕으로 CNN에 넣습니다. Convolutaional Layer와 Max Pooling Layer 가 번갈아가며 배치됩니다. 뒷 부분에는 Fully-Connected Layer (FC layer)를
    배치합니다. 여기서 공간 데이터 정보가 소실됩니다. Activation 함수는 ReLU를 사용합니다.

  • 학습
    100개의 이미지 단위로 미니배치(mini batch)를 통해 학습시킵니다. 초기 weight는 0.05의 표준편차와 0의 평균을 가지는 가우시안 분포로 랜덤하게 둡니다. FC layer에 Drop out을 적용하고, Adaptive Subgradient Methods, AdaGrad를 통해 weight를 찾아나갑니다.

  • 다른 알고리즘과의 비교
    RBF 커널을 사용한 Support Vector Machine, SVM을 사용합니다. Grid Search 등을 통해 Hyper parameter 를 튜닝합니다. SVM에서는 5-fold Cross Validation을 썼습니다.

  • 기타
    각 알고리즘을 100번씩 돌려서, 결과를 측정해서 평균과 95% 신뢰구간을 얻습니다.

3)결과

논문의 figure 2. 두 알고리즘 (CNN, SVM)의 ROC curve를 나타냅니다. 딥러닝(CNN)의 경우 AUC는 0.988 (95% CI, 0.981 - 0.995)를, SVM의 경우 0.976 (95% CI 0.957-0.996)을 나타냅니다.

논문에서는 CNN이 SVM보다 좋다고 결론내리고 있습니다.


제한점

논문에서는 좋은 데이터 얻기 어려웠다, 양이 적었다, 열공망막박리 이외에 다른 질병을 못해봐서 아쉽다.. 이런 이야기를 하고 있으나,

제가 보기엔

  1. 아니 왜, Transfer Learning을 안쓴걸까요, 이걸 쓰면 기존의 CNN을 가지고 조금만 더 학습시키면 될 것을. 그러면 아마 96 x 96이라는 (매우 작은) 해상도까지 안내려갔어도 되었을 것입니다.
  2. 맨 끝에 노드를 왜 soft-max 2개로 배치했는지 모르겠습니다. 어차피 binary classification 할거면서.... 오히려 한 개 노드 배치와 2개 노드 배치를 비교했을 때 2개를 써서 좋았다 이러면 모르겠으나....
  3. SVM은 cross validation 하면서 결과를 구하는데, CNN에는 똑같이 시행했다는 이야기가 없습니다.
  4. CNN과 SVM은 급차이가 좀 나는 느낌입니다. 비교를 할 것이었으면 AdaBoostRandom Forest 정도는 넣어줘야하는 것 아닙니까.
  5. 해상도를 이렇게 팍 줄일거면, 사실 어떻게 해상도를 줄였는지에 관한 이야기가 나와야 합니다.
    96 * 96 / (3900*3072) = 0.0769% (???) 손실되는 정보량이 너무 많습니다.
  6. 데이터를 구성할 때, 각 의사 선생님들이 어떻게 ground truth를 구성하였는지에 대한 정보가 없습니다. 사실 어떤 케이스에서 차이가 나는지 알려줘야 하거든요.

나름대로의 결론

딥러닝을 의학 영상 혹은 다른 데이터에 적용하기 위해서, 가장 기초적인 방법은

데이터 -> 알고리즘 -> 결과이고, 알고리즘은 CNN 등을 쓰며, 결과는 binary classification을 바탕으로한 ROC curve를 살펴본다. 다른 알고리즘과 비교하면 좋다.

입니다.

그런데, 이 논문은 위의 결론 이외에 다른 내용이 없습니다. (...)
이 논문 이외에 다른 좋은 논문들이 많은데, 우선 이 논문이 왜 좋지 않은지를 봐야 다른 논문을 볼 때, 왜 이런 이야기를 하는지 알게됩니다.


원래는 안저의 영상진단과 관련하여 아주 유명한 논문인, JAMA의 Development and Validation of a Deep Learning Algorithm for Detection of Diabetic Retinopathy in Retinal Fundus Photographs 논문을 리뷰하려 했으나,

그림 하나 사용하는데 가장 저렴해 보이는 구성을 만들어도, 위와 같이 840 불...(...)을 써야 하므로, 이건 제가 나중에 돈 많이 벌면 하는 걸로... (아무리 논문이 무료로 배포되더라라도, 논문의 그림을 사용하려면 돈을 내야하는 경우가 있으니 꼭 주의하시기 바랍니다.)

읽어주셔서 감사합니다.

comments