itlab-vision / dl-benchmark

Deep Learning Inference benchmark. Supports OpenVINO™ toolkit, TensorFlow, TensorFlow Lite, ONNX Runtime, OpenCV DNN, MXNet, PyTorch, Apache TVM, ncnn, PaddlePaddle, etc.
http://hpc-education.unn.ru/dli
Apache License 2.0
27 stars 37 forks source link

[TVM] Accuracy Checker results for TVM #469

Closed FenixFly closed 10 months ago

valentina-kustikova commented 11 months ago

Посмотрела результаты точности. Только для googlenet-v1 и googlenet-v4-tf точности top-1 и top-5 почти совпадают с OpenVINO, для resnet-50-pytorch есть отличие в несколько процентов. Остальные модели (densenet-121-tf, efficientnet-b0, squeezenet1.1) по качеству отстают значительно. Надо внимательно посмотреть параметры запуска.

@Rodimkov, посмотрите, пожалуйста, конфигурации с @FenixFly.

valentina-kustikova commented 10 months ago

@FenixFly, если все правильно посмотрела, то теперь результаты качества работы шести классификационных моделей соответствуют тем, что мы получали средствами OpenVINO. Так ведь? Две работали правильно, с efficientnet-b0 разобрались, что была проблема в слое предобработки, а остальными моделями в чем была проблема?

Еще ты писал, что надо проапдейтить результаты для efficientnet-b0 в табличке валидации. Это будет сделано здесь? Надо финализировать этот PR и выложить на вики ссылки с результатами.

FenixFly commented 10 months ago

@FenixFly, если все правильно посмотрела, то теперь результаты качества работы шести классификационных моделей соответствуют тем, что мы получали средствами OpenVINO. Так ведь? Две работали правильно, с efficientnet-b0 разобрались, что была проблема в слое предобработки, а остальными моделями в чем была проблема?

Еще ты писал, что надо проапдейтить результаты для efficientnet-b0 в табличке валидации. Это будет сделано здесь? Надо финализировать этот PR и выложить на вики ссылки с результатами.

Да, результаты теперь соответствуют. Я взял параметры нормализации от оригинальных моделей в Accuracy Checker и поэтому проценты совпали. Так, например в resnet-50-pytorch в инференс фреймворке добавилась нормализация std 255, в googlenet-v1 нормализацию mean [104.0,117.0,123.0] а не [0.408,0.459,0.482]. В densenet std: 58.8235294117647 а не [58.395,57.12,57.375], в squeezenet mean [104.0,117.0,123.0] а не [0.408,0.459,0.482]. Я начал делать коррекцию строк с efficientnet-b0 в отдельном пул-реквесте, но пока до конца далеко и еще я отдал свою личипай Юрию, поэтому последний столбец таблицы обновить не могу. Если остались строки запуска инференса для всех моделей, это сильно ускорило бы обновление таблицы (например чтобы знать где использовался параметр софтмакса на конце или нет).

valentina-kustikova commented 10 months ago

@FenixFly, если все правильно посмотрела, то теперь результаты качества работы шести классификационных моделей соответствуют тем, что мы получали средствами OpenVINO. Так ведь? Две работали правильно, с efficientnet-b0 разобрались, что была проблема в слое предобработки, а остальными моделями в чем была проблема? Еще ты писал, что надо проапдейтить результаты для efficientnet-b0 в табличке валидации. Это будет сделано здесь? Надо финализировать этот PR и выложить на вики ссылки с результатами.

Да, результаты теперь соответствуют. Я взял параметры нормализации от оригинальных моделей в Accuracy Checker и поэтому проценты совпали. Так, например в resnet-50-pytorch в инференс фреймворке добавилась нормализация std 255, в googlenet-v1 нормализацию mean [104.0,117.0,123.0] а не [0.408,0.459,0.482]. В densenet std: 58.8235294117647 а не [58.395,57.12,57.375], в squeezenet mean [104.0,117.0,123.0] а не [0.408,0.459,0.482]. Я начал делать коррекцию строк с efficientnet-b0 в отдельном пул-реквесте, но пока до конца далеко и еще я отдал свою личипай Юрию, поэтому последний столбец таблицы обновить не могу. Если остались строки запуска инференса для всех моделей, это сильно ускорило бы обновление таблицы (например чтобы знать где использовался параметр софтмакса на конце или нет).

Подозреваю, что результаты с mean и std сильно не изменятся, потому что в реализации tvm есть ключ --norm, по факту это масштабирование на 255. Строки пришлю попозже, когда доберусь до ноутбука.

valentina-kustikova commented 10 months ago

@FenixFly, командные строки ниже.

python inference_tvm.py -mn efficientnet-b0 \
                        -m /home/itmm/Documents/kustikova_v/public/efficientnet-b0/efficientnet-b0/tvm_bs4/efficientnet-b0.json \
                        -w /home/itmm/Documents/kustikova_v/public/efficientnet-b0/efficientnet-b0/tvm_bs4/efficientnet-b0.params \
                        -i /home/itmm/Documents/kustikova_v/data/ -b 4 -l labels/image_net_synset.txt -is 4 224 224 3 --not_softmax \
                        --input_name sub -t classification --channel_swap 0 1 2 \
                        --layout NHWC --mean 0.485 0.456 0.406 --std 0.229 0.224 0.225

python inference_tvm.py -mn densenet-121-tf \
                        -m /home/itmm/Documents/kustikova_v/public/densenet-121-tf/tvm_bs4/densenet-121-tf.json \
                        -w  /home/itmm/Documents/kustikova_v/public/densenet-121-tf/tvm_bs4/densenet-121-tf.params \
                        -i /home/itmm/Documents/kustikova_v/data/ \
                        -b 4 -l labels/image_net_synset.txt -is 4 224 224 3 \
                        --not_softmax -t classification --channel_swap 0 1 2 \
                        --layout NHWC --mean 123.68 116.78 103.94 \
                        --std 58.395 57.12 57.375 --input_name input_1

python inference_tvm.py -mn googlenetv1 \
                        -m /home/itmm/Documents/kustikova_v/public/googlenet-v1/tvm_bs4/googlenetv1.json \
                        -w /home/itmm/Documents/kustikova_v/public/googlenet-v1/tvm_bs4/googlenetv1.params \
                        -i /home/itmm/Documents/kustikova_v/data/ -b 4 -l labels/image_net_synset.txt \
                        -is 4 3 224 224 --not_softmax -t classification \
                        --channel_swap 2 1 0 --layout NCHW --input_name data \
                        --mean 0.408 0.459 0.482

python inference_tvm.py -mn googlenet-v4-tf \
                        -m /home/itmm/Documents/kustikova_v/public/googlenet-v4-tf/tvm_bs4/googlenet-v4-tf.json \
                        -w /home/itmm/Documents/kustikova_v/public/googlenet-v4-tf/tvm_bs4/googlenet-v4-tf.params \
                        -i /home/itmm/Documents/kustikova_v/data/ \
                        -b 4 -l labels/image_net_synset_first_class_base.txt \
                        --task classification --layout NHWC --not_softmax \
                        --channel_swap 0 1 2 --mean 127.5 127.5 127.5 \
                        --std 127.5 127.5 127.5 --input_shape 4 299 299 3 \
                        --input_name "input:0"

python inference_tvm.py -mn resnet50 \
                        -m /home/itmm/Documents/kustikova_v/public/resnet-50-pytorch/tvm_bs4/resnet50.json \
                        -w /home/itmm/Documents/kustikova_v/public/resnet-50-pytorch/tvm_bs4/resnet50.params \
                        -i /home/itmm/Documents/kustikova_v/data/ -b 4 \
                        --labels labels/image_net_synset.txt \
                        --input_shape 4 3 224 224 -ni 1 --task classification \
                        --norm --mean 0.485 0.456 0.406 --std 0.229 0.224 0.225 \
                        --input_name data --channel_swap 0 1 2 --layout NCHW

python inference_tvm.py -mn squeezenet1.1 \
                        -m /home/itmm/Documents/kustikova_v/public/squeezenet1.1/tvm_bs4/squeezenet1.1.json \
                        -w /home/itmm/Documents/kustikova_v/public/squeezenet1.1/tvm_bs4/squeezenet1.1.params \
                        -i /home/itmm/Documents/kustikova_v/data/ -b 4 \
                        -t classification -is 4 3 227 227 -l labels/image_net_synset.txt \
                        --layout NCHW --not_softmax --channel_swap 0 1 2 \
                        --input_name data --mean 0.408 0.459 0.482
FenixFly commented 10 months ago

@FenixFly, командные строки ниже.

python inference_tvm.py -mn efficientnet-b0 \
                        -m /home/itmm/Documents/kustikova_v/public/efficientnet-b0/efficientnet-b0/tvm_bs4/efficientnet-b0.json \
                        -w /home/itmm/Documents/kustikova_v/public/efficientnet-b0/efficientnet-b0/tvm_bs4/efficientnet-b0.params \
                        -i /home/itmm/Documents/kustikova_v/data/ -b 4 -l labels/image_net_synset.txt -is 4 224 224 3 --not_softmax \
                        --input_name sub -t classification --channel_swap 0 1 2 \
                        --layout NHWC --mean 0.485 0.456 0.406 --std 0.229 0.224 0.225

python inference_tvm.py -mn densenet-121-tf \
                        -m /home/itmm/Documents/kustikova_v/public/densenet-121-tf/tvm_bs4/densenet-121-tf.json \
                        -w  /home/itmm/Documents/kustikova_v/public/densenet-121-tf/tvm_bs4/densenet-121-tf.params \
                        -i /home/itmm/Documents/kustikova_v/data/ \
                        -b 4 -l labels/image_net_synset.txt -is 4 224 224 3 \
                        --not_softmax -t classification --channel_swap 0 1 2 \
                        --layout NHWC --mean 123.68 116.78 103.94 \
                        --std 58.395 57.12 57.375 --input_name input_1

python inference_tvm.py -mn googlenetv1 \
                        -m /home/itmm/Documents/kustikova_v/public/googlenet-v1/tvm_bs4/googlenetv1.json \
                        -w /home/itmm/Documents/kustikova_v/public/googlenet-v1/tvm_bs4/googlenetv1.params \
                        -i /home/itmm/Documents/kustikova_v/data/ -b 4 -l labels/image_net_synset.txt \
                        -is 4 3 224 224 --not_softmax -t classification \
                        --channel_swap 2 1 0 --layout NCHW --input_name data \
                        --mean 0.408 0.459 0.482

python inference_tvm.py -mn googlenet-v4-tf \
                        -m /home/itmm/Documents/kustikova_v/public/googlenet-v4-tf/tvm_bs4/googlenet-v4-tf.json \
                        -w /home/itmm/Documents/kustikova_v/public/googlenet-v4-tf/tvm_bs4/googlenet-v4-tf.params \
                        -i /home/itmm/Documents/kustikova_v/data/ \
                        -b 4 -l labels/image_net_synset_first_class_base.txt \
                        --task classification --layout NHWC --not_softmax \
                        --channel_swap 0 1 2 --mean 127.5 127.5 127.5 \
                        --std 127.5 127.5 127.5 --input_shape 4 299 299 3 \
                        --input_name "input:0"

python inference_tvm.py -mn resnet50 \
                        -m /home/itmm/Documents/kustikova_v/public/resnet-50-pytorch/tvm_bs4/resnet50.json \
                        -w /home/itmm/Documents/kustikova_v/public/resnet-50-pytorch/tvm_bs4/resnet50.params \
                        -i /home/itmm/Documents/kustikova_v/data/ -b 4 \
                        --labels labels/image_net_synset.txt \
                        --input_shape 4 3 224 224 -ni 1 --task classification \
                        --norm --mean 0.485 0.456 0.406 --std 0.229 0.224 0.225 \
                        --input_name data --channel_swap 0 1 2 --layout NCHW

python inference_tvm.py -mn squeezenet1.1 \
                        -m /home/itmm/Documents/kustikova_v/public/squeezenet1.1/tvm_bs4/squeezenet1.1.json \
                        -w /home/itmm/Documents/kustikova_v/public/squeezenet1.1/tvm_bs4/squeezenet1.1.params \
                        -i /home/itmm/Documents/kustikova_v/data/ -b 4 \
                        -t classification -is 4 3 227 227 -l labels/image_net_synset.txt \
                        --layout NCHW --not_softmax --channel_swap 0 1 2 \
                        --input_name data --mean 0.408 0.459 0.482

@valentina-kustikova модель efficientnet-b0 - это фреймворк TensorFlow. Для сбора в таблице в столбце оригинальный фреймворк запускался inference_tensorflow.py или inference_onnx.py? Потому что в следующем столбце по запуску оригинальной модели в TVM скорее всего запускался inference_tvm_onnx.py а вот информации по запуску оригинальной модели в оригинальном фреймворке я не нашел

valentina-kustikova commented 10 months ago

@FenixFly, командные строки ниже.

python inference_tvm.py -mn efficientnet-b0 \
                        -m /home/itmm/Documents/kustikova_v/public/efficientnet-b0/efficientnet-b0/tvm_bs4/efficientnet-b0.json \
                        -w /home/itmm/Documents/kustikova_v/public/efficientnet-b0/efficientnet-b0/tvm_bs4/efficientnet-b0.params \
                        -i /home/itmm/Documents/kustikova_v/data/ -b 4 -l labels/image_net_synset.txt -is 4 224 224 3 --not_softmax \
                        --input_name sub -t classification --channel_swap 0 1 2 \
                        --layout NHWC --mean 0.485 0.456 0.406 --std 0.229 0.224 0.225

python inference_tvm.py -mn densenet-121-tf \
                        -m /home/itmm/Documents/kustikova_v/public/densenet-121-tf/tvm_bs4/densenet-121-tf.json \
                        -w  /home/itmm/Documents/kustikova_v/public/densenet-121-tf/tvm_bs4/densenet-121-tf.params \
                        -i /home/itmm/Documents/kustikova_v/data/ \
                        -b 4 -l labels/image_net_synset.txt -is 4 224 224 3 \
                        --not_softmax -t classification --channel_swap 0 1 2 \
                        --layout NHWC --mean 123.68 116.78 103.94 \
                        --std 58.395 57.12 57.375 --input_name input_1

python inference_tvm.py -mn googlenetv1 \
                        -m /home/itmm/Documents/kustikova_v/public/googlenet-v1/tvm_bs4/googlenetv1.json \
                        -w /home/itmm/Documents/kustikova_v/public/googlenet-v1/tvm_bs4/googlenetv1.params \
                        -i /home/itmm/Documents/kustikova_v/data/ -b 4 -l labels/image_net_synset.txt \
                        -is 4 3 224 224 --not_softmax -t classification \
                        --channel_swap 2 1 0 --layout NCHW --input_name data \
                        --mean 0.408 0.459 0.482

python inference_tvm.py -mn googlenet-v4-tf \
                        -m /home/itmm/Documents/kustikova_v/public/googlenet-v4-tf/tvm_bs4/googlenet-v4-tf.json \
                        -w /home/itmm/Documents/kustikova_v/public/googlenet-v4-tf/tvm_bs4/googlenet-v4-tf.params \
                        -i /home/itmm/Documents/kustikova_v/data/ \
                        -b 4 -l labels/image_net_synset_first_class_base.txt \
                        --task classification --layout NHWC --not_softmax \
                        --channel_swap 0 1 2 --mean 127.5 127.5 127.5 \
                        --std 127.5 127.5 127.5 --input_shape 4 299 299 3 \
                        --input_name "input:0"

python inference_tvm.py -mn resnet50 \
                        -m /home/itmm/Documents/kustikova_v/public/resnet-50-pytorch/tvm_bs4/resnet50.json \
                        -w /home/itmm/Documents/kustikova_v/public/resnet-50-pytorch/tvm_bs4/resnet50.params \
                        -i /home/itmm/Documents/kustikova_v/data/ -b 4 \
                        --labels labels/image_net_synset.txt \
                        --input_shape 4 3 224 224 -ni 1 --task classification \
                        --norm --mean 0.485 0.456 0.406 --std 0.229 0.224 0.225 \
                        --input_name data --channel_swap 0 1 2 --layout NCHW

python inference_tvm.py -mn squeezenet1.1 \
                        -m /home/itmm/Documents/kustikova_v/public/squeezenet1.1/tvm_bs4/squeezenet1.1.json \
                        -w /home/itmm/Documents/kustikova_v/public/squeezenet1.1/tvm_bs4/squeezenet1.1.params \
                        -i /home/itmm/Documents/kustikova_v/data/ -b 4 \
                        -t classification -is 4 3 227 227 -l labels/image_net_synset.txt \
                        --layout NCHW --not_softmax --channel_swap 0 1 2 \
                        --input_name data --mean 0.408 0.459 0.482

@valentina-kustikova модель efficientnet-b0 - это фреймворк TensorFlow. Для сбора в таблице в столбце оригинальный фреймворк запускался inference_tensorflow.py или inference_onnx.py? Потому что в следующем столбце по запуску оригинальной модели в TVM скорее всего запускался inference_tvm_onnx.py а вот информации по запуску оригинальной модели в оригинальном фреймворке я не нашел

Запускала inference_tensorflow.py в результатах с исходным фреймворком, для tvm модели TensorFlow всегда конвертируются в onnx-формат через tf2onnx.

FenixFly commented 10 months ago

@valentina-kustikova обновил результаты валидации efficientnet-b0 в пул-реквесте: https://github.com/itlab-vision/dl-benchmark/pull/484

valentina-kustikova commented 10 months ago

@valentina-kustikova обновил результаты валидации efficientnet-b0 в пул-реквесте: #484

Замержила. Текущий пулл-реквест мержим?