작성
·
456
0
안녕하세요 수강생입니다.
다름이 아니라 efficientDet esri 코드를 기반으로 custom data로 프로젝트를 하고 있습니다.
현재 결과 보고 작성단계로 모델성능 측정을 하고 시각화하고 싶습니다.
inference time은 공유해주신 코드에서 이미지, 영상 등 예시를 통해서 측정하는 방법을 알 수 있었습니다.
그리고 precision-recore scurves, f1score, mAP graphs and area 등을 구하고 싶습니다.
1. acc, loss 측정 방법
1) 제가 탐색한 방법으로 compile후 history 시각화가 있습니다.
model fitting 하기 이전에 model.compile해서 history로 acc, loss를 구하고 싶은데요.
혹시 compile에 정의할 loss 함수로 focal function로 지정해야하는지 해당 코드에서는 어떤 loss function적절한지, 혹은 학습 기록 보니까 optimizer는 momentum으로 지정해야하는 것인지 고민입니다.
2. mAP를 구하는 방법
1) 라이브러리에 의해 구하는 방법
https://blog.roboflow.com/mean-average-precision/
의 포스트에서 공유한 calculate mAP in colab 처럼
https://colab.research.google.com/drive/1pLvZpz0_Ob0yOQ7hxPhVRT04Cb3FGARb#scrollTo=dFSgxwD9Igo6
2) 직접 세어서 구하는 방법
이런 방식으로 confidence_threshold를 0.9부터 0.05까지 inference하면서 그래프를 그리려고 합니다.
다만, 한장의 이미지에 측정을 하고 있어 그 이미지가 모델을 잘 설명할 수 있는 사례인지 알수없고, 한장의 이미지로만 측정을 하는게 맞는지, 또 그래프를 그리고 면적을 측정하는 것이 맞는 방법인지 고민하고 있습니다.
이러한 고민들을 했습니다.
이러한 방식들이 적절한지, 혹은 다른 계산 방법이 있다면 추천해주시면 감사하겠습니다.
감사합니다.
답변 4
0
감사합니다!
지도해주신 덕분에 결과 낼 수 있었습니다.
이제 아래와 같이 평가표로 작성하려고 합니다.
D버전 별 자리에 mAP 등 정리하려고 합니다.
1) 측정된 AP로 정리하려고 합니다.
AP가 소숫점 자리로 나옵니다.
D0 0.8070435
D1 0.8156416
D2 0.8210681
80정도가 나오는데 제 모델이 32~51정도의 원래 모델보다 너무나도 높습니다.
제 모델이 2개 클래스와 4000장의 이미지, PASCAL이 20여개 클래스와 5000장의 이미지를 가지고 있습니다.
클래스당 데이터량이 많다고 해서 이 정도의 성능이 나올 수 있나라는 생각이 듭니다.
동시에 D버전별 격차가 그렇게 크지도 않습니다. efficientDet 모델의 특징인 경량화에도 도달하지 못한 것 같습니다.
저렇게 정리를 하는 것이 맞겠습니까?
2) 모델 FLOPS 측정은 어떻게 할까요?
마찬가지로 평가할 수 있는 function이 있을까요?
3) inference time도 측정하고 싶습니다.
이미지에 inference 하면 0.04~0.06초가 나오곤 하는데 이게 inference time이라고 해야할까요?
혹은 마찬가지로 평가할 수 있는 function이 있을까요?
4) 저러한 평가표를 작성할 때 연산에 사용된 CPU, GPU와같은 하드웨어도 언급을 해야할까요?
0
오, 대단하십니다.
mAP는 맨 처음에 나옵니다.
Average Precision (AP) @[ IoU=0.50:0.95 | area= all | maxDets=100 ] = 0.807
APs는 작은 크기의 오브젝트만 골라서 mAP 계산한것, APm은 중간 크기의 오브젝트만 골라서 mAP한것, APl은 큰 크기의 오브젝트만 골라서 mAP한것 입니다.
0
안녕하세요
말씀 주신 대로
train에서 setup_model을 통해서 loss 등을 시각화할 수 있었습니다.
추가로 mAP를 구하고자 합니다.
tf2/eval의 model_fn function을 통해서 아래와 같은 결과를 구했습니다.
204/1250 [===>..........................] - ETA: 2:04creating index...
index created!
Loading and preparing results...
Converting ndarray to lists...
(82000, 7)
0/82000
DONE (t=0.67s)
creating index...
index created!
Running per image evaluation...
Evaluate annotation type *bbox*
DONE (t=5.86s).
Accumulating evaluation results...
DONE (t=1.00s).
Average Precision (AP) @[ IoU=0.50:0.95 | area= all | maxDets=100 ] = 0.807
Average Precision (AP) @[ IoU=0.50 | area= all | maxDets=100 ] = 0.912
Average Precision (AP) @[ IoU=0.75 | area= all | maxDets=100 ] = 0.889
Average Precision (AP) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = 0.257
Average Precision (AP) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = 0.655
Average Precision (AP) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = 0.891
Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets= 1 ] = 0.659
Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets= 10 ] = 0.910
Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets=100 ] = 0.919
Average Recall (AR) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = 0.705
Average Recall (AR) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = 0.874
Average Recall (AR) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = 0.955
efficientdet-d0 {'AP': 0.80704355, 'AP50': 0.91207325, 'AP75': 0.88887256, 'APs': 0.25724372, 'APm': 0.65451163, 'APl': 0.8910165, 'ARmax1': 0.6585982, 'ARmax10': 0.910449, 'ARmax100': 0.91937375, 'ARs': 0.7051282, 'ARm': 0.8744898, 'ARl': 0.9553778}
먼저, 이것으로 mAP를 구하는 방법이 맞는지 아니라면 별도의 function이 있을지
맞다면 수치 중 'APm'이 맞는지 궁금합니다.
감사합니다.
0
안녕하십니까,
1. acc, loss 측정 방법
1) 제가 탐색한 방법으로 compile후 history 시각화가 있습니다.
=> model 단순히 tf model이 아니어서, compile의 optimizer는 config로 변경할 수 있지만, loss 함수는 변경하기 어렵습니다. .
https://github.com/google/automl/blob/master/efficientdet/tf2/train.py
에 110 라인 보시면 setup_model() 함수가 있습니다. 여기에서 작업이 되어야 하는데, 그냥 model을 compile() 손수 변경하시려면 제대로 동작하지 않을 수 있습니다.
2. mAP를 구하는 방법
음. 손으로 하는 방법 보다는 라이브러리로 구하는 방법을 권장드립니다.
그런데, 위에서 소개한 라이브러리 말고 efficientdet에서 할 수 있는 방법도 있습니다. 강의를 만들 당시에 문제가 좀 있어서 소개하질 못해서 일단은 위 소개된 라이브러리로 작업 권장 드립니다.
다른 방법으로는 efficientdet 학습 할 때 검증 데이터 세트로 테스트를 원하는 데이터 세트를 입력하면 학습 시에 evaluation을 해줄 수 있습니다.
감사합니다.