Deep Learning Project

3D CNN for Asbestosis Detection(아스베스토시스)

Introduction 1 : 석면폐증 판독의 중요성

석면은 작은 크기에도 단영, 보온 등의 기능이 뛰어나 세탁기, 헤어드라이기 전자 제품과 지붕재, 천장재 등 건축자재로 많이 사용된다고 합니다. 하지만, 석면은 크기가 작은 만큼 우리 몸 스스로 분해하기 어려워 오래동안 몸 속에 머물면서 15년에서 40년의 잠복기간이 지나면 호흡곤란을 일으켜 사망한다고 합니다. 석면 폐증은 특징적인 징후나 증상이 없습니다.

따라서 저희 팀은 흉부 CT 사진을 사용해서 석면증을 발견하고 대처하고자 3D Convolution을 사용한 석면 폐증 판독 알고리즘을 개발하였습니다.

Introduction 2 :

CT 스캔에 컨볼루션 딥러닝 모델을 적용할 때 데이터를 바라보는 방식에 따라 크게 두가지 방법이 있습니다. CT 한장 한장을 개별적인 이미지로 보아 2D 컨볼루션을 적용하는 방법이 있고, 한 환자의 CT 여러장을 하나로 묶어 3D 컨볼루션을 적용하는 방법이 있습니다. 2D Convolution과 3D Convolution의 차이는 다음과 같습니다. 2D Convolution은 1개의 채널, 또는 다중채널이 들어올때도 2차원의 이미지를 생성합니다. 따라서 2D Convolution은 컨볼루션 연산 후 채널 간의 정보를 잃는 반면, 3차원 컨볼루션은 공간, 시간 축의 정보를 모두 보존합니다. CT 사진의 시간적 문맥을 고려한 모델을 설계하기 위하여 3D 컨볼루션을 연구가 진행되고 있습니다.

Data Preprocessing

저희 팀은 병원으로부터 석면폐증이 없는 경우, 석면폐증 의심되는 경우, 석면 폐증 초기인 경우, 그리고 석면 폐증인 경우의 총 4가지로 분류된 CT 샘플을 받았습니다. 석면 폐증이 없는 경우와 의심되는 경우는 정상으로, 석면 폐증이 초기인 경우와 있는 경우는 비정상으로 두 클래스로 원핫 인코딩을 하였습니다. 또한 각 환자의 키 또는 신체적 조건에 따라 CT 프레임 수가 20장 부터 150장 까지 다양합니다. 이를 동일하게 30장 프레임으로 맞추기 위해서 30장 보다 적을 경우 가운데 CT 프레임을 중복해서 붙이었고, 30장 보다 많을 경우에는 균일한 간격으로 추출하여 30장 수를 맞추었습니다. 1024 * 1024 사이즈의 CT 가로 세로의 가장자리의 검은 부분을 조금 자르고 224 로 리사이즈 하였습니다. 데이터 전처리후 영상데이터 사이즈가 커 종종 메모리 문제가 발생하기 때문에 배치사이즈를 작게 4로 두어 4*30*224*224*1 의 인풋을 가지고 모델을 훈련시키었습니다.

Model

[1] 저희가 만든 모델은 Learning Spatiotemporal(스페시오템포럴) Features with 3D Convolutional Networks 논문에서 제안한 3D Convnets을 사용하였습니다. 이 논문에서는 성능이 좋은 3D Convolution 필터의 채널축 사이즈를 찾기 위해 실험을 합니다. 아래 그림을 보시면 depth-1은 모든 컨볼루션 레이어에 필터의 채널축 사이즈를 1로 준 것이고, depth-3, depth-5, depth-7 각각 3, 5, 7을 사용하였습니다. 빨간 선인 depth-3이 가장 높은 정확도를 보였고, 우측에 각 컨볼루션 레이어마다 필터사이즈가 커지거나, 작아지는 모델과 비교했을 때에도 높은 정확도를 보였습니다.

따라서, 저희 모델도 필터의 채널축 사이즈를 3으로 하였고, 필터의 가로, 세로 사이즈 또한 VGG Net에서 3*3 필터가 가장 좋은 성능을 낸다고 하였기 때문에 3*3*3 필터를 사용하였습니다.

[2] 데이터 전처리 단계에서 만들었던 4*30*224*224*1 이 3D Convolution 연산에 인풋으로 들어가고 3*3*3 커널 64개를 사용하여 3*28*222*222*1 텐서가 출력됩니다. 나머지 Layer 도 마찬가지로 이와 비슷하게 수행됩니다. 6개의 3D컨볼루션 층과 4개의 3D 맥스 풀링 마지막에 두개의 덴스 레이어를 거쳐서 석면 폐증이 있는 CT와 없는 CT 를 구분하는 모델을 만들었습니다.

Cost Function

Categorical Cross Entropy는 Cross Entropy 앞에 Softmax를 붙인 것으로 원핫 인코딩으로 된 두 개 이상의 다중 클래스를 분류할 때 사용합니다. 다음은 4개의 배치 데이터에 대한 모델이 예측한 값이고, 마지막 층에 소프트 맥스를 사용하여서 두 개의 합이 1이 됩니다. 이 배치에 대해서 앞쪽 두개는 석면폐증이 없고, 뒤쪽 두개는 석면폐증이 있는 데이터인데 아직 학습이 덜 되어서 4개 모두 석면폐증이 없다고 분류한 것을 볼 수 있습니다. 크로스 엔트로피 를 통과후 실제값과 차이가 많이 날 수록 오차가 높게 나오는 것을 확인할 수 있습니다.

Optimization

Adadelta (아다 델타) 를 사용하여 가중치 갱신하였습니다. Adadleta는 RMSProp과 유사하게 (분모) 현재 시점의 그라디언트를 element-wise 제곱하고, 이를 제곱근한 값을 분모로 나누어주어 최저점에 빠르게 도달하는 역할은 한다. Adadelta가 RMSProp과 다른 점은 분자에 학습속도 대신 이전 시점의 파라미터 변화량에 대한 지수가중평균을 곱해준다. decay rate값은 0.95 엡실론은 10^-7 으로 기본 값을 사용하였습니다.

Weight Intialization

참고로 분모에 그라디언트가 0으로 수렴할때는 너무 커지기 때문에 엡실론을 더해주며, 엡실론의 값을 고민할 필요는 없다.

Distributed Learning

모델은 GPU 가 두개 달린 컴퓨터에서 학습을 하였습니다. 다중 GPU를 사용하기 위해서 Tensorflow에서 지원하는 Mirrored Strategy 를 사용하였습니다. Mirrored Strategy는 사용 가능한 모든 GPU에 모델, 그라디언트, 로스를 복제하고 로스와 그라디언트를 계산하여 최종 모델을 업데이트 합니다. All Reduce 알고리즘 -> 모든 기기들이 같은 변수의 상태를 가지어 동기 훈련 방식을 지원한다. 이 때 로스는 서로 합쳐지기 때문에 배치사이즈와 장비 수의 곱으로 나누어 주어야 합니다.

Confusion Matrix

민감도가 현저하게 낮음. ㅠㅠ 질병이 있는 사람은 없다고 판단할 확률이 높고, 질병이 없는 사람은 없다고 잘 판단하는 알고리즘...ㅠ

Recall (Sensitivity)

-Specificity Rate

-Precision (Positive Prediction Value) 양성 예측도 : 있다고 판단했는데 실제 있을 확률

-Negative Prediction Value : 없다고 판단했는데 실제 없을 확률

-Accuracy :

향후 방향

배치사이즈를 다양하게 학습이 필요함.

참고 문헌

Deep learning approaches using 2D and 3D convolutional neural networks for generating male pelvic synthetic computed tomography from magnetic resonance imaging.

Classification of CT brain images based on deep learning networks :

바탕으로 3D Convolution을 진행하였습니다. notation은 인풋일 경우 배치 * 프레임 길이 * 세로 * 가로 * 채널 수 (b*l*h*w*c) 이고 , 커널은 시간축 사이즈 * 세로축 * 가로축 에 적용되는 (d*k*k)입니다.

3*3 의 필터로 연산할 경우 3*3 크기의 지역 정보와 함께 채널간의 지역 정보 또한 같이 고려하여 하나의 값으로 나타낸다. 다르게 말하면 하나의 커널이 두가지의 역할을 모두 수행하는 것이다.

Last updated