Closed TaehaKim-Kor closed 2 years ago
Sentinal - 2 Data R/G/B 파장 데이터와 적외선 파장 데이터가 주어짐. R/G/B 파장 데이터를 조합해서 Color Image를 만드는 방법이 DrivenData Blog에 게시됨. 자카드 지수로 평가함.
TIMM 라이브러리에서 제공하는 Unet계열의 모델을 활용함. Backbone : resnet34, efficientnetv2_b0, efficientnetv2_s, efficientnet_b0, efficientnet_b3 Sample 수를 기준으로 Kfold를 적용 각 위치 별 자카드 지수의 평균을 loss로 사용(+focal loss) Augmentation : random flips, rotations, scale, cut-outs, elastic Test-Time Augmentation : Horizontal flips
데이터에 노이즈가 많아서 데이터 클렌징 적용 UNet++ 모델 사용 학습 후 mIoU가 70% 이하인 이미지들을 전수조사하여 데이터 클렌징 적용 이렇게 정제한 데이터셋을 Kfold를 적용(5개) Validation 성능 기준으로 좋은 모델과 데이터셋을 수집 efficientnetv2_rw_s 인코더를 적용한 UNet++에 TTA를 적용함.(TTA 뭐 했는진 모름)
GroupKfold를 적용(5개) Augmentation : random crop, ShiftScaleRotate, GridDistortion. 커스텀 Augmentation 적용 : 구름이 30% 이하인 영역에 다른 구름 이미지 추가 Test-Time Augmentation : Horizontal flip, Vertical flip 사용 모델
Sentinal - 1 Data 직교하는 파장을 2개를 지구에 쏘아 반사된 값을 dB단위로 측정한 데이터(이미지 참고)
NASADEM 데이터 위성 사진 데이터
자카드 지수로 평가함.
전반적으로 일반화된 앙상블 모델을 생성하려고 노력함. (기존에 이런 유형의 대회를 참여할때 cross validation의 hold-out variance에 난항을 겪음.) (hold-out variance : 처음보는거긴 한데 맥락적으로는 dataset에서 임의로 test set을 나누면서 발생하는 variance를 말하는 듯) 5개의 fold를 생성 후 ensemble하였고 많은 augmentation을 먹임.
사용 모델 : UNet++(Pytorch Lightning)
Augmentation(Albumentation)은 아래의 순서로 적용 Randomcrop ShiftScaleRotate RandomSizedCrop 또는 PadifNeeded Transpose MaskDropout VerticalFlip HorizontalFlip RandomRotate90 MotionBlur 또는 MedianBlur 또는 Blur ElasticTransform 또는 GridDistortion 또는 RandomGridShuffle 또는 OpticalDistortion RandomBrightnessContrast Resize
신장의 기능 조직을 디텍팅하는 분류기를 만들어야함. 냉동 신장 이미지와 포르말린으로 박제한 신장 이미지가 주어짐. Dice Efficient로 평가함.
사용모델 : Unet SeResNeXt101 + CBAM + Hypecolumns + deepsupervision 손실함수 : bce loss + lovasz-hinge loss(classification head에는 bce loss) Psuedo Labeling 적용 3등과 같이 Edge Effect를 피하기 위한 테크닉을 적용(중앙에 작은 부분만 사용했다는데..) -> 3등 솔루션 참조하면 됨.
5개의 fold로 구성 사용모델 : UNet구조에 Backbone을 ResNeXt50 and ResNeXt101(EfficientNet은 그닥이었나봄..) Augmentation은 빡세게 넣음
특이점 : Scientific Prize 수상 아마 보고서를 잘 써서 그런 듯 함.
내용이 너무 많아 요약하자면
폐 X-ray 사진을 주고 병이 있는 부분을 segmentation
Segmentation Network를 학습시키긴 하는데, 조금 방법이 특이해서 참조할만함. 3가지 Threshold를 설정함.
top_score_threshold : segmentation model의 출력을 위한 기준값, 이를 바탕으로 classification mask를 생성함.
min_contour_area : classfication mask의 각 클래스별 추론된 픽셀의 수를 제한하는 기준값, 모델이 질환을 너무 크게 분류하는 것을 방지
bottom_score_threshold : 저 두개를 통과한 모델을 대상으로, 폐 질환이 존재하는 픽셀을 정하기 위한 기준값, 이를 바탕으로 폐 질환이 있는 픽셀 segmentation을 결정함.
손실 함수는 Binary Cross Entropy, Dice Loss, Focal Loss를 사용함. 단 초기에 Dice loss가 너무 커서(10배 정도) 다른 loss의 가중치를 2~4 정도 곱해줌
폐질환 이미지와 건강한이미지 사이의 sample ratio를 조절해가며 학습시킴. 코드를 정확히 보진 않았는데, 대충 보면 초기에는 폐질환이미지를 80%정도 넣었다가 점점 40%수준까지 줄이는 방법이었나봄.
전체적인 학습 과정은 아래와 같음.
잘 나온 model 3개를 뽑아서 checkpoint averaging을 함. TTA는 horizontal flip만 했음. 모델은 Unet구조를 쓴 듯
건강한 폐와 아닌 폐를 구분하는 classification과 어디인지를 조사하는 segmentation으로 나누어서 조사하였음.
Classification This part is used to classify whether an image in related with pneumothorax or not. Our model is a multi-task model based on unet with a branch for classifying. Data: all data Cls loss: BCE + focal loss Seg loss: BCE Augmentation: hflip, scale, rotate, bright, blur Backbone: seresnext 50, seresnext101, efficientnet-b3 Ensemble: stacking
Segmentation: There are two models used to segment, unet and deeplabv3. Data: data with pneumothorax Loss: dice loss Augmentation: same as classification Backbone: seresnext50, seresnext101, efficientnet-b3, efficientnet-b5 Ensemble: average
외부 데이터의 사용 : 품질은 좋지 않았는데, 그냥 쓰거나 psuedo labeling해서 씀 positive sample과 negative sample의 비율을 0.5로 일정하게 유지함 다른 팀과 다르게 classification 모델을 분리하지 않음. 앙상블 효과는 많이 못 봤다고 밝힘.(10개 중 3개 fold에서 m2모델이 더 높은 성적을 기록한 것 같음) 모델은 아래처럼 사용 My final models were 3 SE-Resnext50 models: m1:704x704 images with no pseudo m2:576x576 images with CheXpert Pseudo m3:576x576 images with CheXpert and NIH Pseudo Attention: CBAM Loss: Lovasz Loss No threshold search, just used 0.5 Optimizer: Adam with 0.0001 learning rate, no learning rate change during training Epochs: 15 EMA of model parameters after 6 epoch. Batch Size: 3 per GPU when trained on 576x576 images, so the batch size was 9 when using 3 1080Ti, no accumulations of batch-size, no Synch-BN was used. 2 per GPU on 704x704 images.
내용
목적
기존 대회의 내용을 조사하여 정리하고 우리가 활용할 수 있는 방안을 수색함.
작성 방법
각 코멘트별로 대회 하나에 대한 내용을 정리함.