https://www.facebook.com/groups/KaggleKoreaOpenGroup/permalink/863920357673398/

캐글 코리아 (Kaggle Korea) : 안녕하세요! 이번에 끝난 캐글 대회 RANZCR CLiP - Catheter and Line Position Chall

안녕하세요! 이번에 끝난 캐글 대회 RANZCR CLiP - Catheter and Line Position Challenge 에서 11위/1547명 으로 솔로 금메달을 따게 되어서, 간단하게 대회 리뷰해보고자 글을 올리게 되었습니다 :)​ ​ 1. 대회

www.facebook.com

안녕하세요! 이번에 끝난 캐글 대회 RANZCR CLiP - Catheter and Line Position Challenge 에서 11위/1547명 으로 솔로 금메달을 따게 되어서, 간단하게 대회 리뷰해보고자 글을 올리게 되었습니다 :)​

1. 대회 소개​
chest x-ray 이미지를 인풋으로 받아, 환자에게 삽입된 카테터(튜브)의 종류 및 올바른 위치에 삽입됐는지의 여부를 분류하는 ​ multi-label classification 문제입니다. classification 레이블 뿐 아니라, 일부 이미지에 대해서는 카테터의 위치 정보가 주어졌습니다. (첨부한 두 번째 그림 참고 - 같은 색의 점들을 이으면 카테터의 위치가 됩니다.)​

2. 솔루션 https://www.kaggle.com/c/ranzcr-clip-catheter-line-classification/discussion/226557​

1) 고해상도를 어떻게 활용할 것인가? - Downconv​

2048x2048 이상의 높은 해상도의 이미지가 주어졌습니다. 그러나 이 이미지를 바로 인풋으로 넣으면 GPU 메모리가 감당하지 못하고, 그렇다고 해서 작게 resizing해서 넣으면 정보를 잃어버립니다.​
Conv2d 레이어 하나를 이용해 2048->1024로 이미지를 변환하는 downconv를 도입해 이를 해결했습니다. avg pooling한 이미지를 이 downconv의 아웃풋과 concat해서 CNN의 인풋으로 넣었습니다.​
(첨부한 세 번째 그림 참고)​

2) 카테터 위치 정보를 어떻게 활용할 것인가? - Pre-training​

카테터 위치 정보는 단순 분류 레이블보다 공간적인 측면에서 훨씬 더 많은 정보를 가지고 있기 때문에 모델이 이를 활용할 수 있도록 하는 것이 중요했습니다. 따라서 저는 encoder에 추가적으로 classification head를 부착한 UNet 구조를 사용하였습니다.​
카테터 위치 정보를 segmentation mask 형태로 전처리해, 이를 타겟으로 UNet을 학습시켰고, pre-trained UNet encoder를 가지고 classification 학습을 시켰습니다.​
(첨부한 첫 번째 그림 참고)​

3) unlabeled data를 어떻게 활용할 것인가? - Pseudo-training​

주어진 labaled 데이터셋 말고, 외부 x-ray 데이터셋들이 많이 존재합니다. 이런 데이터셋들은 카테터 레이블링이 되어있지 않습니다. 최근 unlabaled 데이터셋을 이용한 semi-supervised 및 self-supervised learning들이 제안되고 있습니다.​
제 경우 pseudo-labeling 후 재학습시키는 방법(pseudo-training이라고 우선은 명명하겠습니다)이 효과를 발휘했습니다.​
(첨부한 네 번째 그림 참고)​

3. 1위 솔루션 https://www.kaggle.com/c/ranzcr-clip-catheter-line-classification/discussion/226633​

* 카테터 관련 마스크 3개 생성, 이를 예측하는 UNet 모델 여러개 학습 후 pseudo-training​
* 원래 이미지에 예측된 마스크 3개를 concat한 것을 인풋으로 사용하여 분류 모델 여러개 학습 후 pseudo-training​
* multi-label 중 적절한 경우 multi-class loss 적용​
* segmentation 이미지 사이즈 > 1024, classification 이미지 사이즈: 384~512 (segmentation에서 훨씬 높은 이미지 해상도를 필요로 함을 알 수 있습니다.)​

4. 느낀점​

* 아이디어를 실험해볼 때, 세부 구현 방법에 따라 그 결과가 달라지는 경우가 있는 것 같습니다.​
* 고해상도, 큰 모델일수록 성능이 올라가는 이미지 대회는 특히 GPU/TPU장비가 중요한 것 같습니다. 4 x RTX3090 & 쓰레드리퍼3990x 서버를 제공해주시고, 대회 막판에 추가 서버들도 쓸 수 있게 해주신 Upstage 에 감사의 말씀 드립니다 :)​
* 여담으로, 이번 대회에서 실험한 로그들을 살펴보니, 280개의 실험을 했고, 60여개의 학습 옵션을 만들었고, 여러 실험들을 하는 데 사용된 학습시간은 총 1051시간이네요. 제가 아직 실력이 부족해서인지, 시행착오가 많았던 것 같습니다..ㅎㅎ​

많이 부족한 글 읽어주셔서 감사합니다!

Posted by uniqueone
,