Image와 label 객체의 채널을 (512,512,3) -> (3,512,512)로 transpose
Train/valid split: Group K-fold
Group K-fold로 split된 데이터로 torch dataloader 정의
Model: Torchvision을 이용한 pretrained model 불러오기 및 output class 수정
from torchvision import models
model=models.segmentation.fcn_resnet50(pretrained=True)
model.classifier[4]=nn.Conv2d(512,len(CLASSES),kernel_size=1) # output class data class에 맞게 수정
Loss / Optimizer
# Loss function 정의
criterion=nn.BCEWithLogitsLoss()
# Optimizer 정의
optimizer=optim.Adam(params=model.parameters(),lr=LR, weight_decay=1e-6)
Train
정해진 epoch만큼 model을 이요해 forward 수행
앞서 정의한 loss와 optimizer로 backward 수행
Validation
모델 size를 original size로 복원 (512 -> 2048)
Sigmoid 함수를 사용해 prediction 값을 0~1범위로 변환 후, threshold(=0.5) 초과는 1로, 나머지는 0으로 설정
평가 Metric Dice coefficient 계산
Best model 불러오기
학습된 model이 저장된 pt 파일을 불러와 inference에 활용
Test (Submission.csv)
Output에 대한 RLE 인코딩 사용
RLE(Run-Length-Encoding): 파일 size 줄이기 위해 각 pixel 값 대신 'start position, total length'로 output 저장