MCPcopy
hub / github.com/alibaba/EasyCV / single_mnn_test

Function single_mnn_test

easycv/toolkit/quantize/quantize_utils.py:97–179  ·  view source on GitHub ↗

MNN models test

(cfg, model_path, data_loader, imgs_per_gpu)

Source from the content-addressed store, hash-verified

95
96
97def single_mnn_test(cfg, model_path, data_loader, imgs_per_gpu):
98 '''
99 MNN models test
100 '''
101 # build MNN interpreter, and get input tensor
102 interpreter = MNN.Interpreter(model_path)
103 session = interpreter.createSession()
104 input_all = interpreter.getSessionInputAll(session)
105 name = list(input_all.keys())[0]
106 input_image = interpreter.getSessionInput(session, name)
107 correct = 0
108
109 if hasattr(data_loader, 'dataset'): # normal dataloader
110 data_len = len(data_loader.dataset)
111 else:
112 data_len = len(data_loader) * data_loader.batch_size
113
114 prog_bar = mmcv.ProgressBar(data_len)
115 results = {}
116 for i, data in enumerate(data_loader):
117 # use scatter_kwargs to unpack DataContainer data for raw torch.nn.module
118 input_args, kwargs = scatter_kwargs(None, data, [-1])
119 kwargs[0]['img'] = kwargs[0]['img'].squeeze(dim=0)
120 images = kwargs[0]['img']
121 img_meta = kwargs[0]['img_metas']
122 images = images.cpu().numpy()
123
124 # transfer ndarray to MNN.tensor
125 image_mnn_tensor = MNN.Tensor(images.shape, MNN.Halide_Type_Float,
126 images, MNN.Tensor_DimensionType_Caffe)
127
128 input_image.copyFromHostTensor(image_mnn_tensor)
129
130 # run MNN Session
131 interpreter.runSession(session)
132
133 # get MNN session output
134 output_tensor = interpreter.getSessionOutputAll(session)
135
136 # get output shape
137 output_shape = model_output_shape(cfg.model.type, imgs_per_gpu)
138
139 # transfor MNN's tensor to PyTorch's tensor
140 tmp_output = MNN.Tensor(output_shape, MNN.Halide_Type_Float,
141 np.ones(list(output_shape)).astype(np.float32),
142 MNN.Tensor_DimensionType_Caffe)
143 output_name = list(output_tensor.keys())[0]
144 output = output_tensor[output_name]
145 output.copyToHostTensor(tmp_output)
146 output = tmp_output.getData()
147 output = torch.tensor(output).view(output_shape)
148
149 output = postprocess(output, cfg.model.num_classes,
150 cfg.model.test_conf, cfg.model.nms_thre)
151 output = output_postprocess(output, img_meta)
152
153 for k, v in output.items():
154 if k not in results:

Callers

nothing calls this directly

Calls 7

postprocessFunction · 0.90
output_postprocessFunction · 0.90
ValueErrorClass · 0.90
model_output_shapeFunction · 0.85
sizeMethod · 0.45
updateMethod · 0.45
catMethod · 0.45

Tested by

no test coverage detected