본문 바로가기

부스트캠프 AI Tech

재활용 품목 분류를 위한 Object Detection 트러블 슈팅

# MMdetection 사용

 

bounding box annotation format

- COCO (Common Objects in Context) : [xmin, ymin, width, height]

- Pascal VOC (Visual Object Classes) : [xmin, ymin, xmax, ymax]

 

MMdetection

- Object detection을 위한 pytorch 기반 오픈소스 라이브러리

- configs : 사용 가능 모델들의 config 파일들

- mmdet : 모델을 포함한 핵심 코드들

 

# 모델 발산 (overshooting)

 

2024-01-07 15:24:56,099 - mmdet - INFO - Epoch [1][50/979] lr: 1.978e-03, eta: 0:49:29, time: 0.254, data_time: 0.052, memory: 2896, loss_rpn_cls: 0.3298, loss_rpn_bbox: 0.1149, loss_cls: 0.6845, acc: 92.6533, loss_bbox: 0.2043, loss: 1.3334, grad_norm: 17.4335

2024-01-07 15:25:06,541 - mmdet - INFO - Epoch [1][100/979] lr: 3.976e-03, eta: 0:44:54, time: 0.209, data_time: 0.007, memory: 2896, loss_rpn_cls: 0.6891, loss_rpn_bbox: 0.5887, loss_cls: 9.0597, acc: 89.9583, loss_bbox: 1.3146, loss: 11.6521, grad_norm: 612.0946

2024-01-07 15:25:16,763 - mmdet - INFO - Epoch [1][150/979] lr: 5.974e-03, eta: 0:42:59, time: 0.204, data_time: 0.007, memory: 2896, loss_rpn_cls: 136.4792, loss_rpn_bbox: 223.3101, loss_cls: 3296.5612, acc: 70.8836, loss_bbox: 2384.6222, loss: 6040.9727, grad_norm: 318635.5217

2024-01-07 15:25:26,720 - mmdet - INFO - Epoch [1][200/979] lr: 7.972e-03, eta: 0:41:40, time: 0.199, data_time: 0.007, memory: 2896, loss_rpn_cls: 25199.4517, loss_rpn_bbox: 77706.7472, loss_cls: 3679375.7491, acc: 74.5172, loss_bbox: 6326095.0386, loss: 10108377.0188, grad_norm: 2161526824.7996

2024-01-07 15:25:36,418 - mmdet - INFO - Epoch [1][250/979] lr: 9.970e-03, eta: 0:40:38, time: 0.194, data_time: 0.007, memory: 2896, loss_rpn_cls: 108895.3359, loss_rpn_bbox: 136694.3828, loss_cls: 2802252.3541, acc: 72.6687, loss_bbox: 2258657.7275, loss: 5306499.7435, grad_norm: 388199065.8670

2024-01-07 15:25:46,115 - mmdet - INFO - Epoch [1][300/979] lr: 1.197e-02, eta: 0:39:52, time: 0.194, data_time: 0.007, memory: 2900, loss_rpn_cls: 7772324.7931, loss_rpn_bbox: 18607491.3143, loss_cls: 425461852.1541, acc: 69.0663, loss_bbox: 166289961.0403, loss: 618131618.7596, grad_norm: 34307005481.9050

2024-01-07 15:25:55,060 - mmdet - INFO - Epoch [1][350/979] lr: 1.397e-02, eta: 0:38:53, time: 0.179, data_time: 0.007, memory: 2900, loss_rpn_cls: nan, loss_rpn_bbox: nan, loss_cls: nan, acc: 32.4246, loss_bbox: nan, loss: nan, grad_norm: nan 2024-01-07 15:26:03,424 - mmdet - INFO - Epoch [1][400/979] lr: 1.596e-02, eta: 0:37:50, time: 0.167, data_time: 0.007, memory: 2900, loss_rpn_cls: nan, loss_rpn_bbox: nan, loss_cls: nan, acc: 23.0432, loss_bbox: nan, loss: nan, grad_norm: nan

2024-01-07 15:26:11,609 - mmdet - INFO - Epoch [1][450/979] lr: 1.796e-02, eta: 0:36:54, time: 0.164, data_time: 0.007, memory: 2900, loss_rpn_cls: nan, loss_rpn_bbox: nan, loss_cls: nan, acc: 22.8398, loss_bbox: nan, loss: nan, grad_norm: nan

2024-01-07 15:26:19,901 - mmdet - INFO - Epoch [1][500/979] lr: 1.996e-02, eta: 0:36:10, time: 0.166, data_time: 0.007, memory: 2900, loss_rpn_cls: nan, loss_rpn_bbox: nan, loss_cls: nan, acc: 17.7686, loss_bbox: nan, loss: nan, grad_norm: nan

2024-01-07 15:26:28,213 - mmdet - INFO - Epoch [1][550/979] lr: 2.000e-02, eta: 0:35:33, time: 0.166, data_time: 0.007, memory: 2900, loss_rpn_cls: nan, loss_rpn_bbox: nan, loss_cls: nan, acc: 16.6375, loss_bbox: nan, loss: nan, grad_norm: nan

2024-01-07 15:26:36,563 - mmdet - INFO - Epoch [1][600/979] lr: 2.000e-02, eta: 0:35:02, time: 0.167, data_time: 0.006, memory: 2900, loss_rpn_cls: nan, loss_rpn_bbox: nan, loss_cls: nan, acc: 16.3647, loss_bbox: nan, loss: nan, grad_norm: nan

2024-01-07 15:26:44,823 - mmdet - INFO - Epoch [1][650/979] lr: 2.000e-02, eta: 0:34:32, time: 0.165, data_time: 0.006, memory: 2900, loss_rpn_cls: nan, loss_rpn_bbox: nan, loss_cls: nan, acc: 24.5242, loss_bbox: nan, loss: nan, grad_norm: nan

2024-01-07 15:26:53,230 - mmdet - INFO - Epoch [1][700/979] lr: 2.000e-02, eta: 0:34:08, time: 0.168, data_time: 0.007, memory: 2900, loss_rpn_cls: nan, loss_rpn_bbox: nan, loss_cls: nan, acc: 19.8670, loss_bbox: nan, loss: nan, grad_norm: nan

2024-01-07 15:27:01,598 - mmdet - INFO - Epoch [1][750/979] lr: 2.000e-02, eta: 0:33:46, time: 0.167, data_time: 0.007, memory: 2900, loss_rpn_cls: nan, loss_rpn_bbox: nan, loss_cls: nan, acc: 20.4708, loss_bbox: nan, loss: nan, grad_norm: nan

2024-01-07 15:27:09,921 - mmdet - INFO - Epoch [1][800/979] lr: 2.000e-02, eta: 0:33:24, time: 0.166, data_time: 0.007, memory: 2900, loss_rpn_cls: nan, loss_rpn_bbox: nan, loss_cls: nan, acc: 19.6764, loss_bbox: nan, loss: nan, grad_norm: nan

2024-01-07 15:27:18,310 - mmdet - INFO - Epoch [1][850/979] lr: 2.000e-02, eta: 0:33:05, time: 0.168, data_time: 0.007, memory: 2900, loss_rpn_cls: nan, loss_rpn_bbox: nan, loss_cls: nan, acc: 18.5620, loss_bbox: nan, loss: nan, grad_norm: nan

2024-01-07 15:27:26,680 - mmdet - INFO - Epoch [1][900/979] lr: 2.000e-02, eta: 0:32:47, time: 0.167, data_time: 0.007, memory: 2900, loss_rpn_cls: nan, loss_rpn_bbox: nan, loss_cls: nan, acc: 20.4218, loss_bbox: nan, loss: nan, grad_norm: nan

2024-01-07 15:27:35,176 - mmdet - INFO - Epoch [1][950/979] lr: 2.000e-02, eta: 0:32:32, time: 0.170, data_time: 0.007, memory: 2900, loss_rpn_cls: nan, loss_rpn_bbox: nan, loss_cls: nan, acc: 15.2981, loss_bbox: nan, loss: nan, grad_norm: nan 2024-01-07 15:27:40,012 - mmdet - INFO - Saving checkpoint at 1 epochs [>>>>>>>>>>>>>>>>>>>>>>>>>>>>>] 969/969, 40.4 task/s, elapsed: 24s, ETA: 0s

2024-01-07 15:28:05,736 - mmdet - INFO - Evaluating bbox...

2024-01-07 15:28:05,738 - mmdet - ERROR - The testing results of the whole dataset is empty.

 

optimizer를 SGD에서 Adam으로 바꾸며 같은 lr 값인 0.02를 유지하니 학습시 발산이 되었다.

lr값을 0.001로 조절하여 학습을 재진행

RNN과 같이 발산이 자주 일어나는 경우 Gradient Clipping(그래디언트 클리핑)을 사용할 수도 있다고 한다.

 

추가적으로 초기 발산을 막아주기 위해 warmup 에폭을 사용할 수 있다.

 

# 모델 재학습 (과적합)

 

모델을 새로 빌드(build_detector)없이 학습을 반복(train_detector)하게 됨.

KFold가 되지 않고 이미 학습한 모델을 사용하여 훈련을 여러번 반복함.

결과적으로 마지막 fold는 과적합된 모델이 생성됨.

 

KFold나 반복되는 train 코드를 짤때에는 모델을 새로 빌드 혹은 init 하는 것을 잊지 말자.

 

# Adam 학습이 느림

 

많은 하이퍼 파라미터 튜닝을 해보진 않았지만 전체적으로 SGD 보다 Adam 학습이 느린 느낌이다.

왜 일반적으로 더 좋은 optimizer라고 일컫는 Adam이 더 느린지, 혹시 더 만져야할 파라미터가 있는지 더 알아본다.

 

결과적으로는 adam이 맞지 않는 모델이 더러 존재한다는 것과 adam 사용시 lr을 1/10가량 낮추는 것이 좋음을 확인

 

# COCO annotaion json 다루기

 

info, licenses, categories : 바꿀 필요 없음

images : file_name, id로 이루어짐, id는 4882까지, width, height 고정

annotations : image_id, category_id, bbox, id로 이루어짐, id는 23143까지, area 계산

 

# adamw란 무엇일까

 

https://hiddenbeginner.github.io/deeplearning/paperreview/2019/12/29/paper_review_AdamW.html

 

[논문 리뷰] AdamW에 대해 알아보자! Decoupled weight decay regularization 논문 리뷰(1)

재야의 숨은 고수가 되고 싶은 초심자

hiddenbeginner.github.io

실험적으로 lr은 SGD에 비해 1/10 혹은 그 이하로 낮춰야 잘 돌아간다. (adam도 마찬가지)

 

# valid set 설정 실수

 

valid set을 잘못 설정하면 결과가 정말 잘나온다. (좋은거 아님)

train set과 set이 겹치는 부분에 대한 성능이 과하게 오르기 때문..

들어보니 자주 나오는 실수라고 하니 만약 valid 성능이 너무 잘 나온다면 의심해보자.

좋다 말았다는 느낌으로 허탈감을 느끼게 될 수있다.

 

# cosine 스케줄러

세세한 lr 스케줄을 하지 않는다면 사용하기 좋아, 모델 실험시 많이 활용하였다.

에폭을 줄였을때도 어느정도 학습이 보장되는 느낌

'부스트캠프 AI Tech' 카테고리의 다른 글

글자 검출 프로젝트 트러블 슈팅  (0) 2024.01.22
[WEEK 12-13] CV Data-Centric  (0) 2024.01.22
[WEEK 9-11] Object Det  (1) 2024.01.03
[WEEK 8] AI 서비스 개발 기초  (1) 2023.12.26
GitHub 제대로 쓰기  (0) 2023.12.14