ONNX
ytfeng commited on
Commit
960f622
·
1 Parent(s): 426909c

add evaluation framework and imagenet evaluation (#69)

Browse files
Files changed (2) hide show
  1. README.md +11 -1
  2. ppresnet.py +22 -7
README.md CHANGED
@@ -4,6 +4,15 @@ Deep Residual Learning for Image Recognition
4
 
5
  This model is ported from [PaddleHub](https://github.com/PaddlePaddle/PaddleHub) using [this script from OpenCV](https://github.com/opencv/opencv/blob/master/samples/dnn/dnn_model_runner/dnn_conversion/paddlepaddle/paddle_resnet50.py).
6
 
 
 
 
 
 
 
 
 
 
7
  ## Demo
8
 
9
  Run the following command to try the demo:
@@ -19,4 +28,5 @@ All files in this directory are licensed under [Apache 2.0 License](./LICENSE).
19
 
20
  - https://arxiv.org/abs/1512.03385
21
  - https://github.com/opencv/opencv/tree/master/samples/dnn/dnn_model_runner/dnn_conversion/paddlepaddle
22
- - https://github.com/PaddlePaddle/PaddleHub
 
 
4
 
5
  This model is ported from [PaddleHub](https://github.com/PaddlePaddle/PaddleHub) using [this script from OpenCV](https://github.com/opencv/opencv/blob/master/samples/dnn/dnn_model_runner/dnn_conversion/paddlepaddle/paddle_resnet50.py).
6
 
7
+ Results of accuracy evaluation with [tools/eval](../../tools/eval).
8
+
9
+ | Models | Top-1 Accuracy | Top-5 Accuracy |
10
+ | ------ | -------------- | -------------- |
11
+ | PP-ResNet | 82.28 | 96.15 |
12
+ | PP-ResNet quant | 0.22 | 0.96 |
13
+
14
+ \*: 'quant' stands for 'quantized'.
15
+
16
  ## Demo
17
 
18
  Run the following command to try the demo:
 
28
 
29
  - https://arxiv.org/abs/1512.03385
30
  - https://github.com/opencv/opencv/tree/master/samples/dnn/dnn_model_runner/dnn_conversion/paddlepaddle
31
+ - https://github.com/PaddlePaddle/PaddleHub
32
+
ppresnet.py CHANGED
@@ -9,9 +9,11 @@ import numpy as np
9
  import cv2 as cv
10
 
11
  class PPResNet:
12
- def __init__(self, modelPath, labelPath, backendId=0, targetId=0):
13
  self._modelPath = modelPath
14
  self._labelPath = labelPath
 
 
15
  self._backendId = backendId
16
  self._targetId = targetId
17
 
@@ -30,9 +32,10 @@ class PPResNet:
30
 
31
  def _load_labels(self):
32
  labels = []
33
- with open(self._labelPath, 'r') as f:
34
- for line in f:
35
- labels.append(line.strip())
 
36
  return labels
37
 
38
  @property
@@ -65,11 +68,23 @@ class PPResNet:
65
  outputBlob = self._model.forward(self._outputNames)
66
 
67
  # Postprocess
68
- results = self._postprocess(outputBlob)
69
 
70
  return results
71
 
72
  def _postprocess(self, outputBlob):
73
- class_id = np.argmax(outputBlob[0])
74
- return self._labels[class_id]
 
 
 
 
 
 
 
 
 
 
 
 
75
 
 
9
  import cv2 as cv
10
 
11
  class PPResNet:
12
+ def __init__(self, modelPath, labelPath=None, topK=1, backendId=0, targetId=0):
13
  self._modelPath = modelPath
14
  self._labelPath = labelPath
15
+ assert topK >= 1
16
+ self._topK = topK
17
  self._backendId = backendId
18
  self._targetId = targetId
19
 
 
32
 
33
  def _load_labels(self):
34
  labels = []
35
+ if self._labelPath is not None:
36
+ with open(self._labelPath, 'r') as f:
37
+ for line in f:
38
+ labels.append(line.strip())
39
  return labels
40
 
41
  @property
 
68
  outputBlob = self._model.forward(self._outputNames)
69
 
70
  # Postprocess
71
+ results = self._postprocess(outputBlob[0])
72
 
73
  return results
74
 
75
  def _postprocess(self, outputBlob):
76
+ batched_class_id_list = []
77
+ for ob in outputBlob:
78
+ class_id_list = ob.argsort()[::-1][:self._topK]
79
+ batched_class_id_list.append(class_id_list)
80
+ if len(self._labels) > 0:
81
+ batched_predicted_labels = []
82
+ for class_id_list in batched_class_id_list:
83
+ predicted_labels = []
84
+ for class_id in class_id_list:
85
+ predicted_labels.append(self._labels[class_id])
86
+ batched_predicted_labels.append(predicted_labels)
87
+ return batched_predicted_labels
88
+ else:
89
+ return batched_class_id_list
90