Я использую набор данных проверки ImageNet, чтобы проверить, могут ли эти квантованные предварительно обученные квантованные модели мобильных сетей иметь точную точность, указанную в файле readme tenorflow (https://github.com/tensorflow/tensorflow/blob/master/tensorflow/contrib/lite/g3doc/models.md#image-classification-quantized-models). Однако после тестирования в проверке imagenetЯ чувствую, что моя точность val намного ниже, чем точность, показанная в файле readme tenorflow выше. Я предполагаю, что я сделал что-то не так с моими кодами? Кроме того, readme говорит, что они проверяют точность val, используя одиночное кадрирование, поэтомуиспользовал объект opencv и обрезанные изображения и изменил размер изображения до (224, 224, 3). Однако моя точность топ-5 составляет всего 70%, а точность топ-1 примерно 50%, но в файле readme указано фактическое значениеточность топ-5 может составлять 86%, а фактическая точность топ-1 - 66%. (Я тестировал модели Mobilenet_V1_0.75_224_quant и Mobilenet_V1_0.50_224_quant). Вот мои коды:
if __name__ == '__main__':
# Load TFLite model and allocate tensors.
interpreter = tf.contrib.lite.Interpreter(model_path=
"/mnt/ficusspain/cqli/tensorflow_models/Quantized_Models/mobilenet_v1_0.5_224_quant/mobilenet_v1_0.5_224_quant.tflite")
interpreter.allocate_tensors()
print("can we get here?")
# Get input and output tensors.
input_details = interpreter.get_input_details()
output_details = interpreter.get_output_details()
print("can we get here")
# Test model on random input data.
input_shape = input_details[0]['shape']
input_index = input_details[0]['index']
output_index = output_details[0]['index']
print(input_shape)
print(input_index)
print(output_index)
with open("/mnt/ficusspain/cqli/tensorflow_models/Quantized_Models/image_to_labels_224.list", 'r') as f:
content = f.readlines()
contents = [x.strip() for x in content]
total_count = 0
top_1_acc_count = 0
top_5_acc_count = 0
for i in range(len(contents)):
total_count += 1
array = str(contents[i]).split()
image_path = array[0]
image_label = array[1]
color_img = cv2.imread(image_path)
color_img = np.expand_dims(color_img, axis=0)
color_img.astype(np.uint8)
interpreter.set_tensor(input_index, color_img)
interpreter.invoke()
prediction = interpreter.get_tensor(output_index)
top_5 = np.argsort(prediction[0])[::-1][0:5]
for j in range(len(top_5)):
if int(top_5[j]) == int(image_label):
top_5_acc_count += 1
break
if int(top_5[0]) == int(image_label):
top_1_acc_count += 1
if total_count % 100 == 0:
print(total_count)
print("the final top-1 accuracy is : " + str(top_1_acc_count/total_count))
print("the final top-5 accuracy is : " + str(top_5_acc_count/total_count))
, где mobilenet_v1_0.5_224_quant.tflite загружается из тензорного потока, и это предварительно обученная и преобразованная модель tflites.Кроме того, image_to_labels_224.list содержит путь проверочных изображений imagenet и их метки.Я просто следовал этому уроку (https://github.com/tensorflow/tensorflow/blob/master/tensorflow/contrib/lite/tutorials/post_training_quant.ipynb), чтобы написать и протестировать эти модели, но оказалось, что я не смог добиться той же точности, что и документы тензорного потока. Опять же, предварительно обработанные изображения были сделаны с использованием объектов обрезки opencv изизображения и изменение размера этих обрезанных изображений в (224, 224, 3). Я не уверен, что делать, чтобы достичь той же точности, что и файл readme tenorflow. Кто-то может мне помочь? Спасибо большое!