Моя модель Tensorflow Quantized Mobilenet. Проверенная точность val не отражает фактический результат точности файла readme tenorflow. - PullRequest
0 голосов
/ 30 сентября 2018

Я использую набор данных проверки 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. Кто-то может мне помочь? Спасибо большое!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...