상세 컨텐츠

본문 제목

[Project review]Introducing Hann windows for reducing edge-effects in patch-based image segmentation을 읽고서..

KUBIG

by 최끝장1234 2022. 1. 4. 13:48

본문

이번 글에서는 Introducing Hann windows for reducing for reducing edge-effects in patch-based image segmentation이라는 기사를 읽고, 참여했던 프로젝트에 대한 review를 하고자 한다. 

2학기에 KUBIG(고려대학교 데이터 사이언스 학회)에서 의료영상프로젝트 팀에 들어가서 사람들과 대회를 나갔다. 서울대병원 AI에서 주최한 대회로, 소아의 장 병리 이미지를 가지고, 특정 layer3, 5에 대해 신경절에 해당하는 영역 segmentation을 한 후, 그 영역의 volume을 계산하는 과제였다. volume은 대회측에서 이미 코드를 주었기 때문에, 신경쓸 필요 없었고, 핵심은 신경절을 segmentation하는 것에 있었다. 제공하는 이미지는 해상도가 각각 다르기도 하고, 크기도 컸기 때문에, 이를 그대로 모델에 집어넣으면, 제공되는 GPU 용량을 초과했다. 그래서 불가피하게 이미지를 일정한 크기의 patch로 분할하여서 이를 각각 모델에 학습했다. 그리고  inference시에도 이미지를 patch단위로 나누어서 각각 predict하고 reconstruction해야 했다. 대회과정에서 다양한 모델, loss 등을 시도했지만, 결과론적으로 우리팀은 예선에서는 4위로 본선에 진출했지만, 본선에서는 7위로 대회를 마무리했다.

그렇게 시간이 흐르고 이번주에 팀원들끼리 우리가 어떤 점에서 부족했는지 되짚어보는 시간을 가질 수 있었다. 여러가지 의견들이 나올 수 있었지만, 그 중에서도 가장 치명적이였다고 생각하는 부분은 '후처리'에 관한 것이었다. 좀 더 구체적으로 말하면 interence시 분할한 patch들을 reconstruction할때, 우리팀은 어떠한 후처리도 하지 않고 patch들을 이어붙이기만 했다. 당시 우리팀이 이 부분에 대해서 아예 염두를 하지 않았던 건 아니지만, 다른 부분들에 더 신경을 썼던 것 같다. (당시 우리는 이러한 후처리의 중요성보다 다른 부분들이 더 중요하고 판단했던 것 같다)

그러던 중 팀원 중 한명이 patch segmentation시 수행하는 후처리에 대한 research article을 찾았고,  난 이를 읽어보면서, 우리 preoject가 간과한 후처리에 대한 부분을 생각해보기로 결심했다.

 

research article의 제목에서 나타있듯, patch-segmentation시 발생하는 edge-effect를 해결할 수 있는 window기반의 방법론에 대한 것이다. 여기서 edge effect는 patch를 recontruction할때, patch의 경계 부분에서 원래 이미지에서 확인할 수 있는 context을 반영하지 못하는 문제를 말한다. 이를 해결하기 위해 Article에서 제시한 방법은 2가지로 크게 요약될 수 있다. 첫번째는 stride크기를 patch 크기의 절반으로 하여, overlapped하게 패치를 뜯어낸 후, predict한다. 그러면 원래 이미지에서 edge를 제외한 모든 부분에서 patch들은 4번씩 predict할 수 있다. 즉 overlap하지 않고 patch를 뜯어 낼 때보다 원래 이미지를 더 잘 반영할 수 있다. 두번째는 patch를 예측하고, reconstruction할때 window를 patch들에 곱해주는 것이다. window를 곱해준 이후 patch들은 다음과 같이 변한다.(article fig1에 해당하는 자료임.)

(a), (b), (c), (d)는 사용하는 window가 다음. 사용하는 window에 따라 patch들의 모양이 바뀜.

위 그림을 보면 알 수 있듯이, 중심부에서 경계로 갈수록 흐릿해진다. 이러한 과정을 통해, overlap되는 부분들을 smooth하게 이어붙일 수 있다. (즉 recontruction할때 patch들의 border가 남는 문제를 해결할 수 있다) 흥미로웠던 점은 Article에서는 원래 이미지의 edge와 corner에 해당하는 부분은 다른 부분들과 다르게 overlap이 적게 되기 때문에, 특수한 case로 분류하여 다른 방식의 window 계산을 쓴다는 것을 확인할 수 있었다.

Article에서는 여러가지 method들에 대해서 실험한 결과 역시 수치적으로 보여줬다.  그 결과 우리가 project에 사용한 방식인 patch를 overlap하게 뜯지 않은 방식보다 overlap하게 뜯은 방식이 window method와 관계없이 더 좋은 성능을 낸다는 것을 보여줬다. 그리고 사용한 여러가지 window method 중에서는 Hanh방식을 적용했을때, 가장 좋은 성능을 낸다는 것을 보여줬다. 아래는 Hanh 방식의 window function을 나타낸 것이다. 

i, j는 원래 이미지의 위치를 나타낸다.

이렇게 Article을 읽으면서, 예전으로 돌아가 project를 진행할때 어떤식으로 구현하면, 좋을지 생각했다. window function이 식으로 주어져있기 때문에, 이를 함수로 만들면 충분히 가능하다고 판단됐다. 비록 project결과만 보면 약간 아쉽지만, project가 끝나고 부족한 부분을 되짚어보면서 이렇게 또 많은 것을 얻어가는 것 같다. 다음에는 이렇게 알게된 idea를 떠올리면서, 비슷한 task를 더 효과적으로 다룰 수 있다는 확신이 들었다.

아래는 내가 읽은 Article의 url이다.

https://journals.plos.org/plosone/article?id=10.1371/journal.pone.0229839

관련글 더보기

댓글 영역