# 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
실험적으로 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 |