최근에는 vision에 관한 논문들이 많이 출시 되고 있다. 그중에서도 가장 많이 쓰이는 모델이 yolo인데 실제로 이를 활용한 논문이 공개되었다.
논문에 관해선 파라미터와 사용한 데이터, 결과등을 아래의 링크에 정리해 두었다. 실제 만드는 모델도 이를 참고하였다.
정리 : https://velog.io/@suminwooo/Yolo-%ED%99%9C%EC%9A%A9-book-segmentation-%EB%85%BC%EB%AC%B8-%EC%A0%95%EB%A6%AC
논문 링크 : https://www.researchgate.net/publication/346820617_Research_of_YOLO_Architecture_Models_in_Book_Detection
한가지 아쉬운점은 book segmentation을 하기 위해 yolo를 사용하여 똑같이 구현하려고 하였으나 cuda11에선 tensorflow 1버전을 지원이 되지 않았고 1버전을 많이 사용하지 않아 수정하기도 쉽지 않기에 mask rcnn을 사용하였다.
(mask rcnn 논문 정리 : https://velog.io/@suminwooo/Mask-RCNN-%EB%85%BC%EB%AC%B8-%EB%B6%84%EC%84%9D)
모델링 과정은 아래의 순서로 진행하였다.
vgg image annotator 링크 : https://www.robots.ox.ac.uk/~vgg/software/via/via.html
모델을 학습하면서 실시간으로 모델의 loss를 확인 할 수 있다. 기본적으로 총 6개의 loss가 설정되어 있다. 이는 tensorboard를 통해 확인 할 수 있다.
1. epoch_loss : 2~5번 loss의 합을 log로 취한 값
2. epoch_mrcnn_bbox_loss : 경계 상자의 크기가 정확한 지 판단하는 값
3. epoch_mrcnn_class_loss : 클래스가 정확한지 판단하는 값
4. epoch_mrcnn_mask_loss : 인스턴스의 모양(픽셀이 인스턴스에 올바르게 할당되는지)이 정확한지 판단하는 값
5. epoch_rpn_bbox_loss : bbox의 크기가 맞는지 판단하는 값
6. epocj_rpn_class_loss : bbox의 클래스가 맞는지 확인하는 값
6개의 로스를 보면서 계속 모델을 튜닝하는 과정을 거치는데 실제 모델에서는 1개의 클래스만 존재하기 때문에 2, 4, 5번만 활용하여 loss를 확인한다.
참고 링크 : https://www.debugcn.com/ko/article/45423969.html
1. head만 훈련시키는 것보다 all을 추가하여 훈련시키는 것이 좋다.
2. default option( head layer epoch = 100회, 4+ layer (fine tune resnet stage 4 and up) epoch = 60, all layer epoch = 10)도 성능이 좋다.
3. augmentation은 복잡하게 적용하는 것보다 fipud, fliplr, rotating가 적당하다고 함.
4. 옵티마이저로 SGD with clipnorm가 적당(적용중). Adam은 빠르나 local optimal가 어려움
5. 데이터셋을 cluster(likes gray, color, HSV... )로 나누는 것은 도움이 되지 않는다고함
6. 데이터셋 확보
7. 높은 weight decay(즉, L2 regularization)
8. k-fold cross-validation
9. anchor scale 낮추기(예시 : I tried anchor scale (4, 8, 16, 32, 64), (8, 16, 32, 64,128) and it performed worse than (16, 32, 64, 128, 256))