코딩하는 해맑은 거북이

[부스트캠프 AI Tech 5기] LV2 - Semantic Segmentation 본문

AI/부스트캠프 AI Tech

[부스트캠프 AI Tech 5기] LV2 - Semantic Segmentation

#CJE 2023. 6. 22.
본 게시물의 내용은 '부스트캠프 AI Tech lv2' Semantic Segmentation 대회를 마치고 작성하였다.

Semantic Segmentation 대회를 마치며...

해당 대회는 Hand Bone Image Segmentation으로 X-Ray 이미지로 된 사람의 손 뼈를 Segmentation 하는 모델을 만드는 것이다. 데이터셋은 사람 별로 각 양손을 촬영한 두 장의 이미지가 존재하고, 총 1100장의 데이터셋 중 Train은 800장, Test는 300장으로 주어졌다. 각 이미지의 크기는 (2048x2048)x3으로 동일하다.

 

손 뼈는 크게 손가락, 손등, 팔로 구성되고, 클래스는 ['finger-1', 'finger-2', 'finger-3', 'finger-4', 'finger-5', 'finger-6', 'finger-7', 'finger-8', 'finger-9', 'finger-10', 'finger-11', 'finger-12', 'finger-13', 'finger-14', 'finger-15', 'finger-16', 'finger-17', 'finger-18', 'finger-19', 'Trapezium', 'Trapezoid', 'Capitate', 'Hamate', 'Scaphoid', 'Lunate', 'Triquetrum', 'Pisiform', 'Radius', 'Ulna']로 총 29개이다.

평가방법은 Semantic Segmentation에서 사용하는 대표적인 성능 측정 방법인 Dice Coefficient로 진행한다.

 

- 프로젝트 전체 기간 : 23년 6월 5일 (월) 10:00 ~ 6월 22일 (목) 19:00

- 랩업 리포트 제출 : 23년 6월 26일 (월) 14:00 까지 (동료피드백X)

 

약 3주가 안되는 짧은 프로젝트로,

팀원들과 3일간 강의를 모두 들어오기로 하고, 이후 대회를 위한 계획을 짜기 시작했다.

주어진 베이스라인 코드가 torchvision과 SMP를 이용한 두 가지가 있었다.해당 두 개를 비교했을 때, torchvision을 활용한 코드가 미세하지만 더 좋았어서 해당 코드를 기본으로 잡고 실험을 진행했었다.

후에는 MMSeg를 이용한 세번째 베이스라인 코드가 등장하면서, SMP는 완전히 잊고있었던 것 같다..

이 점이 SMP를 이용한 모델 실험을 제대로 하지 못해서 아쉬움으로 남긴 한다.

또한, 이전 Image Classification, Object Detection 대회에서 Transformer 계열의 모델이 좋은 성능을 보였어서 해당 Segmentation 대회에서도 당연시하게 Transformer 계열의 모델이 좋을 것이라 생각했던게 착오였던 것 같다.

대회가 끝날 때 쯤 U-Net 계열 모델을 실험했었는데, 해당 모델의 성능이 더 좋게 나왔기 때문이다..

(역시 의료분야는 U-Net인가.... 싶을 정도)

마지막날 2가지 앙상블 방법을 사용했는데, 이전 대회와는 달리 크게 성능이 오르지 않았었다.

그때 제출 당시에는 우리팀이 실험한 모델이 다양하지 않아서 성능이 오르지않은 것이라 생각했었는데

다른 팀의 결과 발표도 보고나니, 다른 팀도 마찬가지로 이번 대회에선 앙상블이 크게 효과있지 않았던 것 같다.

이번 대회는 앙상블의 효과가 없었던 이유가 모델들의 분포가 거의 동일해서 그랬을 것이라는 멘토님의 말씀이 기억남는다.

대회는 16위로 아쉽게 마무리하였지만, 리더보드의 순위보단 배워가는 것이 많은 것 같다.

다른 팀은 MMSeg로 Transformer 계열의 SegFormer 모델을 실험해서 비교한 팀이 없었던 것 같고

(피드백해주시는 멘토님도 다른 팀의 발표를 듣고 이 부분을 실험하지 않은 것을 지적하시기도 했다.)

앙상블이 항상 좋지만은 않는다는 것을 배우고 간다!

 

그리고 Segmentation Task는 데이터셋의 크기도 2048x2048x3으로 큰 것도 있었지만, Pixel 단위로 Annotation을 알려주어야 하므로 데이터의 용량을 줄일 수 있는 다양한 방법들에 대해 배울 수 있었다. 또한, 주어진 환경에서 큰 모델과 대용량 데이터를 처리하는데 한계를 많이 느꼈었다. Segmentation 대회에 대한 정보가 많이 없는 이유도 환경문제가 있지 않을까 싶었다. 

 

아쉬운 점은 모델 결과에 대한 가설 검정과 분석을 잘 진행되었지만 이후 큰 성능 향상이 보이지 않을 때 모델의 한계를 느꼈었지만, 시간 내에 더 나은 모델을 탐색하거나 최적의 모델을 찾지 못한 것이 기억에 남는다.

또한, 의료 도메인 지식의 부족으로 Inference 결과를 시각화해서 확인해도 제대로 예측한 것이 맞는지 모호했고, GT Annotation도 일부 각기 다르게 라벨링된 부분이 있어 라벨 클렌징을 하려해도 무엇이 옳은 정답인지 알 수 없었던 것이 한계로 느껴졌다. 그리고 데이터셋을 확인해봤을 때, 모두 비슷하게 느껴져서 이를 단순히 오버피팅해서 학습하면 성능은 높지않을까라는 의견이 팀 내에 나왔었고 이에 공감을 했었는데, 이도 의료 도메인 지식이 부족해서 나온 의견이었던 것 같다.

실제 의료 도메인 분야에서 일하는 사람들이 해당 데이터셋을 보면 각 데이터셋이 모두 완전 다르다고 말할 수 있다는 의료계 분야에서 일하시는 멘토님의 말씀에 머리를 띵!하고 한 대 맞은 것 같았다.

 

마지막으로 정리하면!

이번 대회를 마치면서 이전 경험을 통해 고정되었던 생각들이 여러 부분에서 전환점을 맞이할 수 있었다..👍

 

나의 역할

팀원 모두가 맡았던 역할은 EDA, Online Augmentation, Experiments(Model, Loss, Optimizer)를 진행하였고, 이 외에 제가 맡은 역할은 크게 Offline Augmentation과 Ensemble이 있었다.

 

- Offline Augmentation

주어진 데이터셋이 한 사람의 양손을 각각 X-Ray로 촬영한 것으로 구성되어 있고, 왼손과 오른손이 정확히 대칭적이지 않다는 것을 파악했었다. 따라서 Offline Augmentation로 Horizontal Flip을 통해 Upsampling을 진행하면 성능이 개선되지않을까라는 생각에서 실험을 진행하였다. 해당 실험을 진행할 때, 한 이미지에 존재하는 GT Annotation의 개수가 많아서 모든 데이터셋에 대해 Up-Sampling할 때 30분 이상의 시간이 걸렸었다. 실험 결과는 학습 데이터셋이 늘어난 효과로 크진 않았지만 성능을 개선시킬 수 있었다.

 

- Ensemble

앙상블은 Voting 방식과 확률평균값 방식으로 2가지를 구현하여 기존 단일 모델보다 성능을 개선시켰다.

앙상블을 진행할 때, 각 픽셀별 확률을 모두 비교하고 싶었지만 메모리 한계와 시간적 제약으로 인한 어려움이 있었다. 확률 값을 모두 저장하면 파일용량이 증가하고 이에 따른 파일로딩시간도 증가하는 문제가 있었다. 이를 해결하기 위한 방법을 탐색해보았고 대용량 데이터 처리를 위해 CSV 형식 대신 Parquet 형식의 파일포맷을 사용하여 파일용량과 로딩시간을 약 5배 단축시킬 수 있었다. 

 

 

배웠던 키워드들

- smp

- mmsegmentation

- dice coefficient

- combined loss

- 다양한 모델들

- parquet

 

 

Github

 

GitHub - boostcampaitech5/level2_cv_semanticsegmentation-cv-03: level2_cv_semanticsegmentation-cv-03 created by GitHub Classroom

level2_cv_semanticsegmentation-cv-03 created by GitHub Classroom - GitHub - boostcampaitech5/level2_cv_semanticsegmentation-cv-03: level2_cv_semanticsegmentation-cv-03 created by GitHub Classroom

github.com

 

Notion

 

Semantic Segmentation(2023.06.07 ~ 2023.06.22)

Data

calico-dance-4bf.notion.site

 

Comments