해결된 질문
작성
·
190
0
안녕하세요.. 데이터세트에 대한 질문이 있습니다.
강의에서 train, validation으로 테이터 세트를 나누어서 진행하는 부분에서, 훈련용 데이터세트는 당연히 훈련 전용일것이고,
Validation의 경우 epoch 를 반복하면서 모델 검정 간격을 정해주면 그때 사용 하는것 같은데.. 여기서 질문이 있습니다.
Validation에서 객체를 잘못 구분할 경우 이것이 피드백이 되어 모델 훈련에 반영이 되는것인지요? 아니면 단순하게 mAP, mAR 만 확인하는 것인지요?
만약 mAP, mAR 을 확인하는 것이라면 시간을 절약하기 위해서 validation 데이터 세트에 대한 검정간격을 자주 하지 않아도 되지 않을까 싶은데 이러한 판단이 맞는 것인지 궁급합니다.
만약 반대로 validation. 데이터 세트에 대한 검정자체가 모델 훈련에 직접적으로 피이드백을 해서 훈련 결과에 개선효과가 있다면 검정을 자주 하는 것이 좋은것인지요??
이와는 별개로 GPU 성능에 따라서 동일한 데이터세트와 동일한 조건에 대한 학습 결과가 달라질수 있는지요??? 만약 그렇다면 GPU 성능을 높이고 batch size를 많이 할수록 학습 결과가 개선이 되는 것으로 이해하는 것이 맞는지요??
항상 좋은 강의 고맙습니다.
답변 1
0
안녕하십니까,
1, 2, 3번에 대한 답변을 한꺼번에 드리면,
=> 네, 보통은 피드백이 되어서 모델 훈련에 반영이 됩니다. 주로 learning rate를 동적으로 변경하면서 학습을 시킵니다.
보통은 validation 성능 평가(말씀하신 검정)은 1회 epochs 학습 시마다 수행합니다. 하지만 learning rate 변경을 적용하는 주기를 변경할 수는 있습니다. 10회 연속 validation loss가 증가한다던가... 하지만 이 주기의 변경이 모델 성능에 어떻게 영향을 미칠 지는 알 수 없습니다. 대략적으로 몇회 연속 loss가 증가하면 learning rate를 1/10 으로 감소시킨다던가... 이런 부분은 다양하게 적용해보고, 제일 좋은 주기를 결정합니다.
그리고 아래 질문,
이와는 별개로 GPU 성능에 따라서 동일한 데이터세트와 동일한 조건에 대한 학습 결과가 달라질수 있는지요??? 만약 그렇다면 GPU 성능을 높이고 batch size를 많이 할수록 학습 결과가 개선이 되는 것으로 이해하는 것이 맞는지요??
=> 동일한 조건이면 batch size도 동일하다는 의미 인데, 단순히 batch size의 변경이 학습 결과 개선에 어떻게 영향을 미치는 지를 여쭤보시는 건지요? 만일 그렇다면, 일반적으로 batch size 크기를 너무 크게 하면 성능이 조~오금 떨어집니다. 그렇다고 batch size를 1에 너무 가깝게 해도 성능 향상이 좋지 않습니다. 어느 정도 크기인지는 이 역시 경험적으로 판단이 필요하지만, 보통은 12 미만 정도가 조금이라도 성능이 좋았던것 같습니다.
감사합니다.
저는 지금까지 아래 변수값 설정으로 검정 주기를 설정하는 것으로 알고 있었는데. 그게 아니었네요.. ^ 하하
cfg.evaluation.interval = 10
=> mmdetection 등에서는 evaluation을 1회 epochs당이 아니라 cfg.evaluation.interval 설정값 별로 수행할 수 있게 구성되어 있습니다.
질문1-1
학습 중에 모델의 성능 평가에 사용하는 것은 validation 세트입니다.
학습이 완료된 모델을 이용하여 최종 모델의 성능 평가를 적용하는 것은 test 세트입니다.
질문1-2
제가 요새 코랩을 유료로 사용하는데, 아래 evaluation 수행하면 코랩에서 연결을 해제해버리는 경우가 종종 발생합니다.
=> 음, 이런 경우가 있나요? 제 생각엔 이것 때문에 코랩에서 연결을 해제할 것 같지는 않습니다.
질문 1-3 그래서 편법으로 evalution.interval 을 0 으로 해서 수행을 하지 않고 모델을 자주 저장한 후, 저장된 모델별로 테스트용 데이터에 대해서 평가를 하고 있는데. 이런 방법도 괜찮을까요?
=> evaluation을 하게 되면 수행시마다 해당 모델을 저장하는 것이 보통입니다.
일반적으로는 가장 마지막에 수행된 모델을 가지고 테스트용 데이터로 평가합니다. 하지만 중간쯤에 평가된 모델 성능이 좋다면 이 모델을 이용해서 테스트용 데이터로 평가하는 경우도 있씁니다.
evaluation interval을 정하시고, 이 중 가장 validation 데이터 세트로 성능이 좋은 모델을 선택하셔서 테스트 데이터로 평가해보시면 좋을 것 같습니다.
질문 2
GPU 모델에 따라서 모델 성능이 달라지지는 않습니다.
아, 이게 현재 코랩 환경에서 evaluation을 하면 안타깝게도 process가 죽습니다.
mmdetection에서 validation을 적용하면 현재로서는 안될 것 같습니다.
답신 감사합니다.
저는 지금까지 아래 변수값 설정으로 검정 주기를 설정하는 것으로 알고 있었는데. 그게 아니었네요.. ^ 하하
cfg.evaluation.interval = 10
질문 1.
그렇다면 위의 변수에 따라서 아래와 같은 AP, AR 에 대한 평가 주기가 달라지던데..
그럼 이때 사용하는 데이터는 validation 세트 인가요? test 세트인가요?
강의에서는 validation 과 test 데이터를 동일한 자료로 대부분 사용하긴 하시더라구요.. ^^
이런 질문을 드리는 이유는--
제가 요새 코랩을 유료로 사용하는데, 아래 evaluation 수행하면 코랩에서 연결을 해제해버리는 경우가 종종 발생합니다. 그래서 편법으로 evalution.interval 을 0 으로 해서 수행을 하지 않고 모델을 자주 저장한 후, 저장된 모델별로 테스트용 데이터에 대해서 평가를 하고 있는데. 이런 방법도 괜찮을까요?
ccumulating evaluation results...
2024-01-18 02:30:02,868 - mmdet - INFO -
Average Precision (AP) @[ IoU=0.50:0.95 | area= all | maxDets=100 ] = 0.612
Average Precision (AP) @[ IoU=0.50 | area= all | maxDets=1000 ] = 0.772
Average Precision (AP) @[ IoU=0.75 | area= all | maxDets=1000 ] = 0.729
Average Precision (AP) @[ IoU=0.50:0.95 | area= small | maxDets=1000 ] = 0.600
Average Precision (AP) @[ IoU=0.50:0.95 | area=medium | maxDets=1000 ] = 0.620
Average Precision (AP) @[ IoU=0.50:0.95 | area= large | maxDets=1000 ] = 0.677
Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets=100 ] = 0.723
Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets=300 ] = 0.723
Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets=1000 ] = 0.723
Average Recall (AR) @[ IoU=0.50:0.95 | area= small | maxDets=1000 ] = 0.600
Average Recall (AR) @[ IoU=0.50:0.95 | area=medium | maxDets=1000 ] = 0.630
Average Recall (AR) @[ IoU=0.50:0.95 | area= large | maxDets=1000 ] = 0.817
질문 2. GPU 모델별 성능?
GPU 성능 관련해서는 다양한 GPU 들이 있던데.. 가격차이도 너무 천차만별이더군요..
코랩에서도 V100, A100, T4 등 선택이 가능하도군요.. 이러한 GPU 하드웨어에 따라서 동일한 조건에서 훈련시키 모델의 성능이 달라지는지 궁금합니다.
좋은 강의와 친절한 답변에 항상 감사드립니다