본문 바로가기

영상분할 분야 논문

Hierarchical Convolutional-Deconvolutional Neural Networks for Automatic Liver and Tumor Segmentation 리뷰

LiTS Challenge에서는 Liver와 Lesion 분할을 하는 대회인데, 벌써 2년정도가 지났음에도 불구하고 이 논문이 Liver Segmentation Task에서는 1위를 차지하고 있다. 0.963으로 1위를 Leaderboard에 기록되어 있다. 2위로는 H-DenseUNet과 뭐 다른 몇개 정도가 0.961로 있다. 최근에는 RA-UNet도 Liver 관련해서는 0.961로 동일한 결과를 내었다.

근데 뭐, 중요한 것은 H-DenseUNet이 Lesion에서는 State-Of-the-Art를 기록하며, 사실상 1위이다. 왜냐면 현재 논문은 Lesion에는 약하기 떄문.... 그럼에도 1위를 한 데에는 분명 무슨 이유가 있을 것이고, 배울만한 점이 있을 것이다.

 

여기서는 논문을 해석한 것을 간단하게 정리한 것을 보여주며, 중요한 핵심만 골라서 말한 뒤에 내 느낌을 적을 생각이다.

 

코드 유무 : (https://github.com/Lasagne/Lasagne )  Theano

 

[Abstract]

Liver and liver tumor challenge (LiTS) 대회 에서는 3가지 task로 평가를 한다

(1) 간 분할

(2) 간에 있는 종양 분할

(3) 종양 크기 평가

여기서는 CDNN(deep fully convolutional deconvolutional neural networks)의 계층적 프레임워크로 실험했다

(실행 순서)

1. 간단한 CDNN 모델로 전체 간 CT 영상들에 대해 빠르지만 대충 간을 분할한 결과를 내놓는다.

2. 그 다음, 또 다른 CDNN으로 간 영역에 대해 더 자세하게 간을 분할한다.

3. 분할된 간 영역에 대해 히스토그램 평활화로 contrast를 높인 후, 세번째 CDNN으로 간 종양을 분할한다.

CDNN 학습 시, loss는 Jaccard distance를 사용하였다.

LITS 데이터중 130명은 훈련, 70명은 test로 사용하였고, Dice score은 간은 96.3%, 종양은 65.7%를 기록하였다.

간 분할 1위, 종양 분할 5위, 종양 크기 평가는 3위를 했다.

 

-- Comment -- 

여기서 눈 여겨 봐야할 것은 일반적으로 Loss는 dice coefficient loss나 binary cross entropy loss를 사용하는 반면, jaccard loss를 쓴 점이다. 그리고 프레임워크를 사용했다는 점을 눈여겨 봐야한다. 특히 처음에 대충 간을 분할하고 이것을 쓰는 방법은 은근 많이 쓰인다. h-denseunet도 그렇고, 다른 논문에서 어느 정도 보이는 방법들이다.

 

[Introduction]

간 암은 암 중에서 흔히 일어남.

CT 영상은 간 암을 확인할 때 많이 쓰임.

CT영상에서 간을 자동적으로 분할하는 것은 꼭 필요한 단계.

그러나, 명암 대비가 낮고, 경계가 불분명하며, 모양이 다양해서 쉽지 않음.

심지어 간의 크기, 모양, 위치, 명암도, 색상등이 다 달라서 더 어려움.

다양한 방법들이 제공되었지만, interactive한 접근들이 여전히 종양 분할에 많이 쓰임.

우리는 CDNN을 기반으로 한 완전한 자동 프레임워크를 제공함.

1. 간단한 CDNN 모델로 전체 간 CT 영상들에 대해 빠르지만 대충 간을 분할한 결과를 내놓는다.

2. 그 다음, 또 다른 CDNN으로 간 영역에 대해 더 자세하게 간을 분할한다.

3. 분할된 간 영역에 대해 히스토그램 평활화로 contrast를 높인 후, 세번째 CDNN으로 간 종양을 분할한다.

우리는 전처리나 후처리에 집중하지 않고, 좋은 네트워크 구조에만 집중하여 다양한 조건에도 잘 다룰 수 있게 하였다.

 

[DataSet and Preprocessing]

Lits 데이터셋을 사용.

512*512 사이즈.

전처리로는 HU[-100,400]. ( 불필요한 정보 제거 )

완전한 3D를 한다면 contextual한 정보를 얻어 잠재적으로 분할을 더 잘 할 수가 있겠지만 , 하드웨어가 따라주질 않아 사용하고 싶지만 못했음.

우리의 CDNN은 2D 기반임

가장 인접한 두개의 slice들을 concat하여 채널이 한개가 아닌 3개로 CDNN으로 들어감.

각 단계마다 서로 다른 resampling 전략들이 사용될 것인데, 좀있다가 말할 것임

 

-- Comment --

여기서 완전한 3D라는 것은, input 자체가 한 사람의 CT 영상들인 즉 volume 자체를 넣겠다는 것인데, 그렇게 하는 것은 정말 메모리 사용량이 엄청 크기 때문에 못했다는 것이다. 그렇기에 대부분의 3D FCN에서 많이들 사용하는 인접한 , 즉 바로 전 CT 영상 과 현재 영상과 다음 영상을 합한 것을 input으로 사용하겠다는 것이다. (원래는 1채널).

 

[Method]

A. CDNN model

CDNN은 FCN의 한 분류임.

pixel 단위의 분류를 함. ( 한 픽셀이 0이냐 1이냐... 일반적으로는 한 이미지 단위로 이게 개냐 소냐 하는 것)

이 모델은 두 갈래로 나뉘는 데, 

(1) contextual 정보가 합쳐지는 convolutional path (convolution + pooling)

(2) 전체 이미지 화질이 복원되는 deconvolutional path ( deconvolution + upsampling)

이 두 방법으로 CDNN 모델은 global한 정보와 정밀한 세부정보들을 가질 수 있음.

 

// 세부 사항

Stride는 1로 고정

각 conv/deconv layer에 ReLu를 활성화 함수로 사용

output layer에는 sigmoid layer.

모든 conv/deconv layer 뒤에는 batch normalization이 추가됨. ( internal covariate shift를 방지)

loss는 Jaccard distance를 쓴다.

(일반 의료 영상 분할에 자주 쓰이고, 불균형이 높은 문제에 잘 적응하기에 따로 class-rebalance 할 필요 없음)

최적화 알고리즘은 Adam 사용 ( 학습률 = 0.003 )

Dropout Layer를 2개 사용 (오버피팅 방지하기 위해) ( p = 0.5)

(1) convolutional path 끝날 때 한개

(2) 마지막 deconv layer 바로 전에 한개

 

image augment 두 종류 사용 - 다양한 영상 조건에도 강건한 모델을 위해

한번 모델 학습할때마다 mini-batch에서의 원본 영상에서만 적용되기 때문에 그렇게 시간이 너무 많이 소요되지 않음.

즉 처음부터 한 후에 한꺼번에 학습되는 것이 아니라, 한번 영상을 훈련시키려고 mini-batch를 막 모델에 넣으려고 하기 전에! augment를 해서 넣는 다는 의미.

(1) 기하적인 변형을 통한 augment ( randomly flip, shifting, rotating, scaling )

(2) slice의 각 channel에 있는 영상마다 contrast를 랜덤하게 normalize함

** slice의 각 channel에 있는 영상은 dataset에서 말했다시피 인접한 두 slice들임.

 

-- Comment --

internal covariate shift가 뭔지 모르는 사람은 http://sanghyukchun.github.io/88/ 참고

쉽게 말해서 gradient vanishing 또는 learning rater가 작아지는 이유중  하나임.

그리고 은근 모델이 간단하다는 생각이 든다.

여기서 핵심적인 것은, 오버피팅을 피하기 위한 dropout layer, 그리고 internal covariate shift를 방지하기 위한 batch normalization layer.. 이거 이외에는 일반 UNet과 다를 바가 없다.

하지만 다른 논문과의 차이점은 mini-batch로 넣을 때, augmentation을 통해 좀 더 강건하게 만들었다는 점?

 

B. Liver localization

** 이 부분은 아까 첫 단계를 의미. ( 빠르고 대충 만든 간 만들기 )

지금 이 모델을 "CDNN-I" 로 명명

19 layer

파리미터 개수 : 230129

상세한 구조 설명은 [8]에 있음. 

학습할 때 :

(1)우선 모든 CT 영상을 128*128로 down-sample 한다.

(2) 모든 영상 volume의 slice thickness를 3mm로 resample

여기서 발견한건, 모든 slice가 학습에 도움을 주진 않는다는 것이다.

그렇기 때문에, 간이 있는 부분을 A로 친다면,  A-5부터 A+5까지를 학습데이터로 한다.

다시 말하면 한 사람의 몸을 범위로 나타냈을 때, [0,200] 으로 친다면, 간이 나오는 범위를 A로 하자. 

예시로 A = [10~30] 이라면, 실제 학습될 데이터를 [5~35]로 했다는 말이다.

** 또한, LITS의 마스크 데이터는 0 = 배경, 1=간, 2 = 암 으로 되어 있는 데, 지금 학습 할 때는 암을 모두 간으로 간주하게 하여 학습했다고 한다.

 

테스트 할 떄 :

(1)테스트하는 이미지는 훈련할 때 전처리와 동일하게 했다.

(2)CDNN-I로 분할한 후에는, 임계값을 0.5로 두었다고 한다. 그럼으로 0.5보다 큰 것은 1(간) , 작은 것은 0(배경) 처리

(3) 3D connect-component labeling 수행 => 간 영역으로 연결된 범위 중, 큰 범위가 선택됨.

 

-- comments --

여기서 [8]은 <Automatic skin lesion segmentation using Deep fully convolutional networks with Jaccard distance>이다. 

3D connect-component labeling은 https://swprog.tistory.com/entry/Connected-Component-Analysis  를 보면 된다. 

 

C. Liver segmentation

정확한 간 영역을 아는 것은 좀 더 발전된 CDNN 모델로 더 정교한 간 분할을 하는 데 큰 도움을 주고 계산을 줄이는 데도 도움을 줌.

훈련 단계 :

(1) 원본 CT 영상들에 대해 slice thickness를 2mm로 고정

(2) 간의 bounding box 를 추출하고, 10 voxel을 x,y,z에 모두 추가하여 VOI(volume of interest)를 만든다.

(3) VOI를 256*256으로 줄이던 늘리던 해서 만듬.

그리고 이 VOI를 다시 axial 방면으로 자른 걸로 훈련에 사용

 

CDNN -II 모델 : 간 분할 에 사용되는 두번째 모델

29 layer

파라미터 : 5M

CDNN-I와 비교해 LRF(local receptive field)의 크기와 필터 크기는 줄어들었음. (그렇기에 CDNN-II는 더 깊게 만들 수 있다. layer의 개수를 늘리는 데, 이 것은 즉 더 많은 비선형을 통해 오버피팅을 방지할 수 있다.)

feature channel의 개수는 각 layer마다 두 배가 된다.

[15]에 더 자세한 설명이 나와있다.

 

테스트 단계 :

CDNN-I으로 VOI를 추출해 내고, 각 VOI의 axial의 slice마다 CDNN-II가 적용된다. 그리하여 liver의 3D probability map을 도출 할 수 있었다.

후처리는 CDNN-I을 할 때와 동일하게 적용하여 liver mask를 얻었다.

 

-- comments --

LRF를 모른다면, https://www.slideshare.net/leeseungeun/cnn-vgg-72164295 를 보면 됨.

CDNN-II의 자세한 설명은 <Improving Dermoscopic Image Segmentation with Enhanced Convolutional-Deconvolutional Networks> Table 1에 나와있다.

 

D. Tumor segmentation

VOI 추출에 있어서 암 분할은 C. 간 분할과 상당히 비슷한데

차이점은 원본 화질을 사용하는 것 ( resample할 때 정보 손실 우려)

 

(1) 암이 있는 slice만 훈련 데이터로 사용 ( 학습 시간 줄이고, 암에 집중하기 위해서)

(2) 3D regional histogram equalization 사용하여 암과 주변의 contrast 대비 증가 ( liver mask가 있는 voxel들에게만 적용 시킴 )

(3) 명암 대비 증가된 것을 추가적인 input channel로 넣어 CDNN-II로 학습시킨다.

우리는 이러한 추가적인 input channel로 넣는 것이 암 분할 성능을 더 향상시킨다라는 것을 발견.

 

테스트 단계 :

C 단계에서 추출된 liver VOI를 기반으로 0.5의 임계값으로 0 - 간 , 1- 암 으로 나눈다.

 

E. Implementation

Theano와 Lasagne 를 사용함.

GTX 1060 GPU with 1280 cores and 6GB memories

five-fold cross validation 사용. 

각 folder마다 200 epoch

대회 test set에 적용할 때는, bagging-type ensemble strategy 사용.

나머지는 뭐 각 모델 별 훈련 시간 등등...

 

-- comments --

3D regional histogram equalization에 대해서는 직접 찾아보면 된다. opencv에도 잘 나와있다.

여기서 나는 어디에 추가적인 input channel로 넣는 다는 것인지는 이해를 못함...

 

5. Results and discussion

우리는 간 96.3 , 암 65.7, 암 크기 평가 0.017 ehekf

간 1등, 암 5등, 암 크기 3등

 

**** 중요 ****

다른 Unet이나 Cascaded-fcn 등과의 차이점!!

1. loss를 일반적인 dice나 BCE가 아닌  jaccard 를 썼다는 점

2. 일반적으로 공통적으로 다 사용하는 long range skip connection을 안썼다는 점.

향후 연구는 뭐 더 높이기ㅔㅆ다는 것인데... 전처리도 다양하게 써보고 그럴 것이라고 한다.

 

 

느낀 점 :

사실 이 연구는 피부분할 연구에서 시작한 네트워크인데, 간 분할도 잘 되는 것을 보아하니, 범용적으로 꽤 나 잘 통하는 것 같다는 느낌이 든다. 또한, 여기서 눈 여겨 봐야할 것은 Jaccard Loss를 사용했다는 점은 다른 연구에서와의 큰 차이이다. 대부분 loss는 dice나 cross entropy를 쓰기 때문이다. 그리고 또 하나 충격적인 것은, U-Net Connection이 아예 없는 데에도 불구하고 여타 연구들보다 월등한 업적을 남겼다는 점이다. 기본적으로 분할에서 U-Net은 BackBone 네트워크로 많이 쓰이고, long range skip connection은 기본적으로 다들 사용했었는 데, 이 connection을 사용하지 않음에도 이런 성능을 낸 다는 것은, 분명 분석해볼 만한 가치가 있다고 생각된다.

물론 lesion에서는 그렇게 높은 성적을 거두지는 못하였지만 간 분할에서만큼은 1등을 한 이 논문은 크게 가치가 있다.

lesion은 H-dense가 1위를 차지하였는 데, 지금까지 논문들을 봐 온 결과, 주관적인 내 생각에는 liver segmentation은 slice 단위로 하는 것이 가장 의미 있는 것 같으며, lesion은 contextual information이 있을 때 잘 분할 할 수 있는 것 같다. 비단 이 논문만이 아니라, 다른 논문에서도 3D FCN보다 liver segmentation에서는 2D FCN이 더 좋은 성능을 내는 것으로 많이들 알려져 있다. 하지만 lesion에서는 여전히 낮은 성적을 냈었는 데, 이 이유는 lesion의 경우에는 slice 단위로 하기에는 아직 무리가 있지 않나 싶다. H-Dense를 참고한다면, lesion을 잘 추출해 낼 수 잇는 경우는 , 3D FCN 으로 추출하는 것이 첫번째 방법이고 두번째는 slice 단위와 contextual 한 정보 두개를 모두 고려해야 잘 추출해 낼 수 있다고 생각이 든다.

여기에서 lesion이 잘 나오지 않은 이유는 내가 예상하는 것이 맞을 법 한데, 그 이유는 아마도 여기서는 lesion이 있는 부분만 학습을 시켰다고 했다. 그렇다면 모델은 분명 없어도 없다고 찾지 못하고, lesion이 있는 것만 봐왔기 때문에 없는 것에도 있다고 판별할 가능성이 크다. 그렇기 때문에 TEST에 대한 결과를 내가 직접 보지는 못해도, lesion 자체는 잘 추출해내지만 lesion이 없는 부분에 있어서는 잘 추출해내지 못하여, 없는 것을 있다고 하는 문제에서 에러율이 대폭 높아졌을 것이라고 생각한다.

이상.