부스트캠프 Segmentation 대회 정리

kimkihoon·2022년 6월 19일
0

부스트캠프 AI

목록 보기
46/49

목표

이번 대회를 하기에 앞서 제 목표는 마지막 대회니만큼 지금까지 적용해봤던 기법들을 적용해보고 앞서 object detection 대회와 같은 dataset을 사용하기 때문에 그때 해보지 못했던 것들을 해보는 것을 목표로 잡았다. 그리고 팀이 결성되고 나서 항상 순위를 조금씩이라도 올려왔기 때문에 이번에도 마찬가지로 그렇게 해보자고 설정했다.

목표 달성을 위해 한 일

Mmsegmentation 라이브러리에 많은 모델들이 있는데 그것들 중 성능이 좋은 것들을 빠르게 찾아보고 그 backbone 혹은 structure를 바꾸어 보는 것을 우선순위로 두었다. 많은 모델들을 사용해봤다. Swin-L, hrnet, deeplabv3+, convNext 등등 많은 모델들과 architecture들을 섞어서 실험을 해보았다. 그 중 convNext와 uperNet을 같이 사용한 모델이 가장 성능이 좋았기 때문에 이것을 개인적으로 최종 모델로 두고 실험을 진행하였다. 우선 모델이 정해지고 나서는 augmentation을 적용하는 것부터 시도했다. 적용해본 augmentation들은 다음과 같다.
albu_train_transforms = [
dict(type='RandomBrightnessContrast', brightness_limit=0.1, contrast_limit=0.15, p=0.5),
dict(type='HueSaturationValue', hue_shift_limit=15, sat_shift_limit=25, val_shift_limit=10, p=0.5),
dict(type='GaussNoise', p=0.3),
dict(type='CLAHE',p=0.5),
dict(
type='OneOf',
transforms=[
dict(type='Blur', p=1.0),
dict(type='GaussianBlur', p=1.0),
dict(type='MedianBlur', blur_limit=5, p=1.0),
dict(type='MotionBlur', p=1.0)
], p=0.1
)
]
이 외에도 다양한 augmentation들을 적용해 보았다. Copy&paste, mosaic, rotate
Channelshuffle 등 많은 augmentation들을 적용해보았지만 효과가 있었던 것은
Copy&paste와 위에 적용한 augmentation들 뿐이었다. 그렇게 augmentation도
적용하고 나서 해보았던 것은 pseudo labeling이었다. 학습시킨 데이터들로 test
Dataset을 돌려서 얻은 결과물을 다시 학습시키는 반지도 학습인데 이것으로 점
수를 조금 더 올릴 수 있었다. 하지만 너무 과하게 적용해서인지 최종 결과에는
모델이 과적합 한 것으로 나온 경향이 있어서 아쉬웠다.

전과 비교해서, 내가 새롭게 시도한 변화는 무엇이고, 어떤 효과가 있었는가?

Copy&paste라는 cutmix와 비슷한 augmentation을 새롭게 적용해보았다. Cutmix를 해보려고했지만 구현난이도가 높아보여서 이미 구현이 되어있고 사용법만 익히면 되는 copy&paste로 방향을 틀었다. 그리고 이 기법이 상당히 효과를 많이 보았던 것 같다. 또 전부터 해보고싶었던 seed를 어떤 값으로 고정을 시키고 모델을 돌려보기도 했다. 이 점으로 인해 seed값이 어떤 랜덤성이 있는 값에 많은 영향을 끼친다는 것을 알았고 성능 향상 혹은 하락에도 꽤 기여를 한다는 것을 알게 되었다. 다음 실험부터는 seed값을 고정을 꼭 해놓고 여러 기법들을 적용해보아야겠다고 생각이 들었다. 그러나 어떤 값으로 고정을 해야할 지는 잘 모르겠다. 그리고 backbone을 바꾸는 과정도 새롭게 시도해보았다. 모델에 따라서 적용하는 backbone을 다양하게 바꿔서 실험을 해보았는데 개인적으로는 점수가 잘 나오지 않아서 아쉬웠던 시도였다.

아쉬웠던 점

개인적으로 pseudo labeling을 너무 많이 적용한 것이 패착이었던 것 같다. 그리고 다른 팀원분이 하신 실험으로 인해 valid 값이 제일 좋다고 무조건 가장 높은 점수가 나오는 것은 아니라는 것을 알게 되었지만 그걸 알게되었다고 어떤 값에서 early stopping을 해야하는지 판단하기가 어려웠다. 그래서 그냥 valid mIoU를 기준으로 가장 좋은 것을 선택하여 제출하는 식으로 진행했던 것이 아쉽다. 그리고 ensemble을 hard voting방식만 적용했는데 weighted voting을 적용한 것이 성능이 기대한 것만큼 나오지 않은 점이 아쉽고 마지막에 soft voting 방식을 시도하다가 시간부족으로 인해 제출을 하지 못한 점이 많이 아쉽다. 일반쓰레기의 성능이 제대로 나오지 않는 것을 알았지만 어떻게 하면 좋게 올릴 수 있을지 생각이 잘 나지 않은 점 또한 많이 아쉽다.

한계/교훈을 바탕으로 다음 P-Stage에서 스스로 새롭게 시도해볼 것은 무엇일까?

이제 마지막 프로젝트가 하나 남았는데 이번 프로젝트에서 제가 맡은 부분은 product serving 파트이다. 그래서 지금까지 제가 해왔던 모델 성능 올리는 부분은 참여를 하지 않지만 level 3 에서 새롭게 배우는 것을 제대로 공부해서 그 동안 잘 하지 못했던 special mission같은 것들도 진행하면서 이번 프로젝트에 임하려고 한다.

0개의 댓글