본문 바로가기
딥러닝/프로젝트

[외부프로젝트]MAIC 병리영상 부문

by 혜 림 2022. 1. 13.

[대회 링크]

https://maic.or.kr/competitions/8/infomation

 

2021년 하반기의 큰 이벤트 중 하나!였던 MAIC 병리영상 챌린지.

중간고사가 끝난 날부터 한 달 가까이 진행했다. 

KUBIG 에서 나 포함 6분이 모여서 함께했다. 

할말하않

 

 

[task]

 

소아 장 병리 이미지에서 ganglion을 segment 해서 그 면적을 측정하는 task ("장 신경절 영역 정량화")

이 ganglion의 면적이 작을수록 장이 수축을 잘 못해서 대변 활동의 장애로 이어진다고 한다. [각주:1]

 

 

[DNN 관련 깨달은 점 ]

 

1. WSI 이미지 포멧

 

병리 영상에서는 매우매우 화질이 좋은 이미지를 사용한다. 이를 한 번에 load 하고 보내기에는 무리가 있기 때문에 (1) 이미지를 tile 형태로 저장하고 (2) 여러가지 scale 별로 이미지를 쌓아서 피라미드 형태로 저장한다. 그래서 WSI 이미지에서는 해상도를 구하는 게 까다롭다. 이걸 이해해야 주최측에서 제공한 inference 코드를 이해할 수 있었는데, 이 과정도 꽤 어려웠다. 

 

이미지 해상도가 너무 컸기 때문에 패치를 나눠서 학습, inference를 했다. 개인적으로 그렇게 되면 너무 patch들이 독립적으로 학습될 것 같아서, overlapping하게 패치를 나눠서 학습을 해보면 어떨까, 하는 의견을 냈고 다들 좋다고 해주셨다. 이건 AlexNet 에서 overpooling을 보고 제안한 것이다. 물론 지금은 overpooling 을 쓰는 모델은 본 적이 없지만 거기서 언급했던 효과가 떠올라서! 하지만 inference 에서 overlapping 하게 나누어진 batch를 어떻게 sum 할 것인가에 대한 고민을 해보지 않아서 이 의견은 실현되지 못했다. 추후에 대회가 끝나고 Hann windows 에 대한 글을 팀원분이 발표해주셨는데, 이렇게 overlapping 을 해도 inference를 잘 실현할 수 있었겠구나 싶었다.  

 

2. loss

 

위의 이미지를 보면 알겠지만 우리가 segment 해야 하는 영역의 크기는 매우매우 작다. 그래서 대부분의 픽셀이 0인 상황에서 극소량의 ganglion만 segment 하는 게 어려운 일이었다. 어떻게 이 작은 영역을 잡을 수 있을 것인가? 를 해결할 수 있어야 했다. 

 

=> 그래서 팀원분이 loss를 가공해보면 어떻겠냐고 제안을 하셨다. ganglion 영역이 매우 작으니까, 그 영역의 크기에 대한 제한 term? 을 넣어보자는 의견이었다. 관련해서 내가 relu에서 threshold를 바꿔서 적용해보면 어떨까, 제안을 드렸고 그 분이 만드셔서 성능을 개선시켰다. 갑자기 성능이 엄청 뛰어올라서 예산 4등으로 본선에 올라갔다. 이때 내가 의견 내면 내가 구현하는 게 제일 깔끔하다는 걸 깨달았다. 

 

결선에서는 SOTA의 loss를 접목해보기로 했다. SOTA 논문을 읽으면서 BCE loss 만 쓰는 모델은 거의 없다고 느꼈다. 대부분 다른 loss를 하나씩 더 쓰고 있었다. 이걸 접목해보면 어떨까 싶었고, 정확도를 또 한번 크게 올릴 수 있었다. 

 

이런 기본적인 것에서부터 질문을 해야 한다고 느꼈다. 왜 이 loss를 써야 하지? 다른 loss를 쓸 방법은 없을까? 이런 것들

 

3. 잘못 label된 이미지

 

 난 당근 이런 오류는 없을 줄 알았는데 생각보다 많았다. 이상하리 만치 정확도가 낮은 친구들을 보면 거의 labeling/masking이 잘못 되어 있었다. 

 

4. model

 

사전 학습된 모델을 가져올 때는, 사전 학습된 이미지의 크기에 맞게 input을 바꿔주는 게 학습에 더 용이하고 제대로 된 inference 결과를 가져올 수 있다고 한다. 

 

 

 

[결과]

 

예선 4등, 그리고 본선 7등으로 우리 팀은 수상하지 못했다. 1등과의 평가 지표 차이가 대략 0.2 정도? 났던 것 같다. 꽤 크다. 

 

 

 

[기타 깨달은 점]

 

역시 팀장과 팀원이 중요한 것 같다. 

어떻게 해야 잘 leading을 할 수 있을 것인가. 

어떤 follwer 가 있을 때 team이 무너지는가. 

 

그리고 능동적으로 움직이는 자세가 무엇인지 배운 것 같았다. 

또 동시에 난 평생 능동적인 사람이 되지 못할지도를 느꼈다...

 

 

  1. 허슈스프렁병 [본문으로]

댓글