이번 대회에서 EDA라는 개념에 처음 깊게 들어가보았는데 EDA부분에서는 부족한 점이 많아서 조금 아쉽다🤐😪
분할 모델같은 경우는 기본적으로 데이터 자체에 대한 해석이 중요한 것같다. 다음엔 더 많은 EDA기법들을 다 써봐야겠다.
그래도 첫 대회였으니까!!😛
EDA란?
EDA(Exploratory Data Analysis, 탐색적 데이터 분석)는 벨연구소의 수학자 ‘존 튜키’가 개발한 데이터분석 과정에 대한 개념으로, 데이터를 분석하고 결과를 내는 과정에 있어서 지속적으로 해당 데이터에 대한 ‘탐색과 이해’를 기본으로 가져야 한다는 것을 의미한다.
이번 대회에서는 EDA를 통해 과 문제에 대한 이해를 높이고, train 데이터와 test데이터의 차이를 극복하기 위한 전략을 구성하는 것이 중요하며, 모델 개발에 필요한 정보를 얻어내어 효과적인 AI 모델을 구축하는데 활용하는 것이 필요하다.
EDA 과정
1.데이터셋 구성 파악: 데이터셋에 포함된 위성 이미지와 해당 이미지에 대한 건물 영역의 마스크 정보를 확인.
Dataset Info.
- train_img [폴더]
- TRAIN_0000.png ~ TRAIN_7139.png
- 1024 x 1024
- 학습 위성 이미지의 촬영 해상도는 0.5m/픽셀이며, 추론 위성 이미지의 촬영 해상도는 공개하지 않습니다.
- test_img [폴더]
- TEST_00000.png ~ TEST_60639.png
- 224 x 224
polygon정보는 이진이미지 형태로 rle인코딩 되어있음.
2.이미지 시각화: 데이터셋의 일부 이미지와 해당 건물 영역 마스크를 시각화하여 어떤 형태의 이미지와 건물 분포가 있는지 확인 .이를 통해 데이터셋의 특성을 이해.
test데이터이미지의 위성의 고도가 더 낮은것을 확인하였음.
=>1024x1024 사이즈의 훈련데이터를 그대로 사용하기보다는 test이미지의 건물 크기와 비슷하게 확대해야 함
3.건물 영역 분포 분석: 데이터셋에 포함된 건물 영역의 분포를 분석.
- 훈련 이미지의 배경 대비 건물 면적 그래프 생성
총 이미지 중 건물 면적 비율이 1%인 사진이 약 19%
건물 면적이 15%이상인 위성 영상은 적음
평균적으로 5~10%대
=> 데이터에서 배경이 차지하는 비율이 높다.
=> 데이터 불균형 처리를 위한 적절한 데이터 전처리와 증강 기법을 적용하여야함.
insight : 설계 방향성
EDA를 통해 Test 데이터의 위성 고도가 낮아 건물 크기가 작아진 것을 확인하였고,평균적으로 5~10% 대의 건물 면적 비율을 학인하였다. 정확한 예측을 위해서는 클래스 불균형 처리와 test dataset에 맞는 augmentation 기법이 중요하다는 것을 확인 하였다.
그래서 훈련 데이터를 적절히 확대 및 리사이징하여 고도에 따른 건물 크기 변화에 대응하는 augmentation 기법들을 설계하였고 건물 면적 비율과 관련하여, 데이터 불균형 처리를 위해 클래스 가중치 설정 또는 데이터 증강 기법을 활용하여 배경보다 건물 클래스에 더 중요한 가중치를 부여하여 모델이 클래스간의 경계를 명확하게 분할하게 하는 것을 목적으로 하였다.
Data preprocessing test
1.data augmentation
(1) RandomCrop
- train데이터보다 test데이터이미지의 위성의 고도가 더 낮아 건물 크기가 다른 것을 확인하였음. 훈련데이터를 그대로 사용하기보다 test이미지의 건물 크기와 비슷하게 확대해주어야 하므로, 훈련데이터를 분할하여 자체 평가산식 결과 dice socre가 가장 높은 RandomCrop(224,224)를 이용해 훈련데이터를 임의로 증강 및 224사이즈로 확대하였습니다.
Augmentation(the same conditions) | dice score |
RandomCrop(224,224) | 0.6928615501457371 |
RandomCrop(512,512) | 0.5011153397721709 |
RandomResizedCrop(224, 224, scale=(0.5, 0.21875), ratio=(1, 1)) | 0.4643268911577399 |
* A.RandomResizedCrop(224, 224, scale=(0.5, 0.21875), ratio=(1, 1))와 같이 설정하면, 원본 이미지를 랜덤하게 512x512에서 224x224 크기 사이로 확대하여 자르게 된다.
* 최소 확대 비율: 50% = 1024 * 0.5 = 512
* 최대 확대 비율: 약 21.875% = 1024 * 0.21875 ≈ 224
-RandomCrop(224,224)적용 시각화
2.데이터 불균형 처리 test
(1) Filtering
-eda에서 데이터에서 배경이 차지하는 비율이 높아 데이터 불균형 처리를 해야함을 확인하였음. 데이터셋에서 배경 대비 건물 면적 비율에따라 특정 기준을 충족하지 않는 샘플들을 제거하는 작업으로 똑같은 조건에서 비교해본 결과, 훈련 데이터 분할로 자체 평가산식 점수가 가장 높은 '배경 대비 건물 비5% 이하를 제외하는 필터링'이 선택되었다.
Excluding building area percentage | dice score |
1% | 0.505 |
2% | 0.512 |
3% | 0.521 |
5% | 0.525 |
8% | 0.400 |
하지만 7000장의 데이터셋에서 배경 대비 건물 비5% 이하를 제외하면 2929장의 훈련데이터를 사용해야하는데 , 이렇게 되면 데이터셋의 다양성을 상실할 수 있고, 모델의 일반화 능력이 저하될 확률이 커진다.
같은 조건에서 리더보드 점수는 전체 데이터셋을 사용하여 학습한 모델의 score가 더 높았다.
data preprocessing | leader board score |
전체 데이터셋 사용 | 0.2273179838 |
5%제외 데이터셋 사용 | 0.2179275814 |
(2) CropNonEmptyMaskIfExists(height=224, width=224)
-위의 (1)번의 대안으로 데이터 불균형 처리를 위해 CropNonEmptyMaskIfExists 데이터 증강 기법을 활용하여 일부 이미지에 마스크가 존재하지 않는 빈(mask가 없는) 영역을 제외하고 이미지를 잘라내도록 하였다.
randomcrop과 데이터 불균형 처리를 동시에 할 수 있어서 모델 성능이 향상됨을 확인.
data preprocessing | dice score | leader board score |
CropNonEmptyMaskIfExists(height=224, width=224) | 0.7335961685529905 | 0.5751065275 |
RandomCrop(224,224) | 0.6928615501457371 | 0.5436697873 |
선택된 aumentation 기법 code
# 데이터 증강을 위한 transform 파이프라인 정의
transform = A.Compose(
[
A.CropNonEmptyMaskIfExists(height=224, width=224),
A.HorizontalFlip(p=0.5),
A.VerticalFlip(p=0.5),
A.Rotate(limit=30,p=0.3),
A.ColorJitter(p=0.3),
A.ToGray(p=0.2),
#고정값
A.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225]), # 이미지 픽셀값 정규화
ToTensorV2() # 이미지를 텐서로 변환
]
)
선택된 aumentation 기법 설명
1. CropNonEmptyMaskIfExists: 이미지와 해당 이미지의 마스크(mask) 정보를 함께 처리하여 빈(mask가 없는) 영역을 제외하고 이미지를 잘라낸다. 이렇게 함으로써 빈 영역을 배제하고 건물 영역을 보다 효과적으로 학습하여 클래스 불균형 문제를 해결 할 수 있다.
2. 건물이나 특정 구조물의 방향에 무관하게 모델을 학습시키도록 하는 증강기법 사용.
HorizontalFlip: 이미지를 수평으로 뒤집는 Augmentation. 확률 p에 따라 뒤집히거나 유지.
VerticalFlip: 이미지를 수직으로 뒤집는 Augmentation. 확률 p에 따라 뒤집히거나 유지.
Rotate: 이미지를 랜덤하게 회전시키는 Augmentation. 회전 각도의 범위를 limit으로 지정하고, 확률 p에 따라 회전이 적용.
3. 이미지의 색상을 랜덤하게 변화시키거나 흑백으로 만드는 증강으로 이미지의 조명 조건에 대한 불변성을 제공해 조명 조건이 달라져도 모델이 더 일반화된 예측을 수행하도록 함.
ColorJitter: 이미지의 색상을 랜덤하게 변화시키는 Augmentation입니다. 확률 p에 따라 적용됩니다.
ToGray: 이미지를 흑백으로 변환하는 Augmentation입니다. 확률 p에 따라 적용됩니다.
4. Normalize: 이미지의 픽셀값을 정규화. 평균과 표준편차를 지정하여 이미지를 정규화. 사전 훈련 데이터셋으로 사용한 imagenet의 평균과 표준편차 사용함.
5. ToTensorV2: 이미지를 텐서로 변환.
위의 Augmentations을 모두 순서대로 적용하여 이미지를 증강하게 된다. 이렇게 증강된 이미지를 모델에 입력으로 사용하여 학습시에 모델의 성능과 일반화 능력 향상을 기대하고, 데이터 증강기법들로 인해 모델이 더 다양한 상황에 대응하고 더욱 강건하게 학습되도록 하였다.
'Machine Learning > ML Contest' 카테고리의 다른 글
RSNA 2023 Abdominal Trauma Detection(1) -base line 입문 (0) | 2023.09.24 |
---|---|
위성 이미지 건물 영역 분할 AI 경진대회 - (4) - 모델 구축 및 실험관리 (0) | 2023.08.04 |
위성 이미지 건물 영역 분할 AI 경진대회 - (3) - Hyperparameter,Regularization ,Loss Function (0) | 2023.08.03 |
위성 이미지 건물 영역 분할 AI 경진대회 - (1) - intro (0) | 2023.08.01 |