안녕하세요. 운이 좋게도 이번에 한화에서 진행한(Oct '24) IR sensor를 이용한 객체인식 AI challenge에서 1위를 수상하였습니다.
해서 이번 포스팅은 그 과정을 공유하고자 합니다.
Data Preprocessing
우선 데이터 전처리 부분입니다. IR sensor는 쉽게 생각하면 열화상 카메라라고 생각하시면 됩니다. 들어오는 input값은 마치 흑백카메라와 같이 채널이 한개인 image shape이라고 보시면 됩니다.
위의 과정을 통해 잘못된 labeling을 수정하였습니다. 뒤의 augmentation과정에서 albumentation을 추가로 사용하였는데 잘못된 labeling정보때문에 런타임 에러가 발생할 수 있습니다.
두번째로는 GT의 클래스 분포도를 확인하였습니다.
빈도가 가장 큰 클래스와 낮은 클래스 간의 차이, imbalance가 심합니다. 분포를 고르게 dataloader를 설정해서 test해보았는데 오히려 test set에서의 score가 낮게 나왔습니다. 아마도 test set의 class분포도도 마찬가지로 심하게 imbalance하기 때문일 것 같습니다.
다음으로는 normalization을 위한 pixel의 평균, 표준편차를 구하였습니다.
Base model
이제는 base model를 정할 차례입니다. off-the-shelf로 모델들을 사용하여 epoch 2~5 만 수행하여 validation set에서 대략적인 성능을 확인한 후 baseline model을 정하였습니다.
캐글등의 컴패티션을 보면 모델간의 앙상블은 거의 필수적으로 수행합니다. test set의 domain에 최대한 adaptation할 수 있도록 다른 성격의 모델, DETR계열의 Co-DETR(swin-transformer 백본, resnet101백본)과 Yolo계열의 ppoloe와 yolox를 baseline model로 설정하였습니다.
해당 모델들은 scratch부터 시작하지 않고 COCO로 pretrained 된 모델에서부터 학습을 시작하였습니다.
Augmentation
Augmentation은 매우 중요합니다. 모델별로 살펴보겠습니다.
Yolox는 mosaic, mixup, randomaffine, flip (horizontal만 수행)의 augmentation을 적용하였고, ppyoloe는 mosaic을 적용하면 오히려 성능이 떨어져 random distort, randomcrop, flip (horizontal)을 적용하였습니다.
CoDETR(swin, resnet101) 의 경우satuation될때까지는 albumentation을 이용하여 shift, scale, rotate, cutout, blur, gaussian noise, flip, resize를 적용하였고 satuation이 된 후에 후술할 pseudo label과 같이 mosaic, mixup 기법을 추가하였습니다.
Extra Data
제공된 dataset이 양이 크지 않기때문에 transformer계열(DETR)의 성능을 최대화하기에는 부족했습니다. 이를 위해 상업적이용이 가능한 최대한 비슷한 도메인의 IR dataset을 roboflow에서 찾아서 extra data로 추가였습니다.
extra data의 class의 구성이 제공된 dataset의 class구성과 다르기때문에 처음에는 대략적으로 class mapping을 하여 해결하려했지만 false negative문제가 발생했습니다.
차라리 기존 데이터셋으로 학습한 DETR 모델을 extra dataset으로 pseudo label을 만들어서 사용해보았더니 오히려 성능이 더 좋았습니다. pseudo label을 만들어 기존 dataset과 shuffle하여 사용하였는데 처음부터 너무 많은 extra data을 사용하지 않았고 500개씩 extra data w pseudo label을 추가하여 학습하는 식으로 모델의 성능을 높였습니다.
Ensemble
마지막으로 이렇게 학습한 model들을 앙상블하였고 nms를 사용하는 것보단 WBF 를 사용하는 것이 더 결과가 좋았습니다.
코드는 https://github.com/ies0411/IR_detection 레포에서 자유롭게 보실 수 있고, 대회 정보는 https://www.hscaichallenge.com/ 에서 참고하실 수 있습니다.