From 206352a48b90b6da04655de1e979ffe3dab06b80 Mon Sep 17 00:00:00 2001 From: fadil Date: Thu, 2 Mar 2023 12:51:56 +0530 Subject: [PATCH] am62a target golden update --- dockers/SOC/PSDKRA/README.md | 25 ++ dockers/SOC/PSDKRA/setup.sh | 117 +++++++++ dockers/SOC/ubuntu_18.04/Dockerfile | 83 +++++++ dockers/SOC/ubuntu_18.04/README.md | 34 +++ dockers/SOC/ubuntu_18.04/container_setup.sh | 228 ++++++++++++++++++ dockers/SOC/ubuntu_18.04/docker_build.sh | 50 ++++ dockers/SOC/ubuntu_18.04/docker_run.sh | 65 +++++ dockers/SOC/ubuntu_18.04/entrypoint.sh | 49 ++++ dockers/SOC/ubuntu_18.04/setup_proxy.sh | 82 +++++++ dockers/SOC/ubuntu_20.04/Dockerfile | 85 +++++++ dockers/SOC/ubuntu_20.04/README.md | 34 +++ dockers/SOC/ubuntu_20.04/container_setup.sh | 200 +++++++++++++++ dockers/SOC/ubuntu_20.04/docker_build.sh | 50 ++++ dockers/SOC/ubuntu_20.04/docker_run.sh | 65 +++++ dockers/SOC/ubuntu_20.04/entrypoint.sh | 49 ++++ dockers/SOC/ubuntu_20.04/setup_proxy.sh | 82 +++++++ examples/CMakeLists.txt | 19 +- .../tvm_dlr/dlr_inference_example.py | 20 +- scripts/gen_test_report.py | 2 +- setup.sh | 2 +- test_data/golden_ref_am62a.csv | 34 +-- ...cpp_out_cl-dlr-onnx_mobilenetv2_device.jpg | 2 +- ...ut_cl-dlr-tflite_inceptionnetv3_device.jpg | 2 +- .../refs-am62a/cpp_out_cl-ort-resnet18-v1.jpg | 2 +- .../cpp_out_cl-tfl-mobilenet_v1_1.0_224.jpg | 2 +- ...pp_out_od-ort-ssd-lite_mobilenetv2_fpn.jpg | 2 +- ..._out_od-tfl-ssd_mobilenet_v2_300_float.jpg | 1 - ...p_out_ss-ort-deeplabv3lite_mobilenetv2.jpg | 2 +- ...out_ss-tfl-deeplabv3_mnv2_ade20k_float.jpg | Bin 65 -> 88803 bytes ...mxnet_mobilenetv3_large_device_airshow.jpg | 2 +- ...t_mobilenetv3_large_device_c7x_airshow.jpg | 2 +- ...cl-dlr-onnx_mobilenetv2_device_airshow.jpg | 2 +- ...r-tflite_inceptionnetv3_device_airshow.jpg | Bin 73 -> 13249 bytes ...t_cl-ort-caffe_squeezenet_v1_1_airshow.jpg | 2 +- .../py_out_cl-ort-resnet18-v1_airshow.jpg | 2 +- ...ut_cl-tfl-mobilenet_v1_1.0_224_airshow.jpg | Bin 65 -> 10737 bytes ...-lite_mobilenetv2_fpn_ADE_val_00001801.jpg | 2 +- ...obilenet_v2_300_float_ADE_val_00001801.jpg | 2 +- ...edet_dsp_320x320_coco_ADE_val_00001801.jpg | 2 +- ...labv3lite_mobilenetv2_ADE_val_00001801.jpg | 2 +- ...bv3_mnv2_ade20k_float_ADE_val_00001801.jpg | Bin 81 -> 49380 bytes 41 files changed, 1356 insertions(+), 50 deletions(-) create mode 100644 dockers/SOC/PSDKRA/README.md create mode 100755 dockers/SOC/PSDKRA/setup.sh create mode 100644 dockers/SOC/ubuntu_18.04/Dockerfile create mode 100644 dockers/SOC/ubuntu_18.04/README.md create mode 100755 dockers/SOC/ubuntu_18.04/container_setup.sh create mode 100755 dockers/SOC/ubuntu_18.04/docker_build.sh create mode 100755 dockers/SOC/ubuntu_18.04/docker_run.sh create mode 100755 dockers/SOC/ubuntu_18.04/entrypoint.sh create mode 100755 dockers/SOC/ubuntu_18.04/setup_proxy.sh create mode 100644 dockers/SOC/ubuntu_20.04/Dockerfile create mode 100644 dockers/SOC/ubuntu_20.04/README.md create mode 100755 dockers/SOC/ubuntu_20.04/container_setup.sh create mode 100755 dockers/SOC/ubuntu_20.04/docker_build.sh create mode 100755 dockers/SOC/ubuntu_20.04/docker_run.sh create mode 100755 dockers/SOC/ubuntu_20.04/entrypoint.sh create mode 100755 dockers/SOC/ubuntu_20.04/setup_proxy.sh delete mode 120000 test_data/refs-am62a/cpp_out_od-tfl-ssd_mobilenet_v2_300_float.jpg mode change 120000 => 100644 test_data/refs-am62a/cpp_out_ss-tfl-deeplabv3_mnv2_ade20k_float.jpg mode change 120000 => 100644 test_data/refs-am62a/py_out_cl-dlr-tflite_inceptionnetv3_device_airshow.jpg mode change 120000 => 100644 test_data/refs-am62a/py_out_cl-tfl-mobilenet_v1_1.0_224_airshow.jpg mode change 120000 => 100644 test_data/refs-am62a/py_out_ss-tfl-deeplabv3_mnv2_ade20k_float_ADE_val_00001801.jpg diff --git a/dockers/SOC/PSDKRA/README.md b/dockers/SOC/PSDKRA/README.md new file mode 100644 index 0000000..3c651cd --- /dev/null +++ b/dockers/SOC/PSDKRA/README.md @@ -0,0 +1,25 @@ +# J721E Setup +- [J721E Setup](#j721e-setups) + - [Introduction](#introduction) + - [Setup](#setup) + - [Copying the libraries](#copying-the-libraries) + + + +## Introduction + + - This folder have instructions on how to setup J721E by downloading and installing required dependencies. + + +## Setup +- On the target run the following. This will download and install required python and system dependencies. + ``` + cd edgeai-tidl-tools/dockers//J721E/PSDKRA + ./setup.sh + ``` +- The script will display a list of shell variables need to be exported in the end. Set these env vars in your shell. + +## Running the examples +- Run the python model compile on PC [Model Compilation on PC](../../../examples/osrt_python/README.md#model-compilation-on-pc) +- Run the python examples on target [Run Inference on Target](../../../examples/osrt_python/README.md#model-inference-on-evm) +- Compile the CPP application by following instruction from [Compile CPP examples](../../../examples/osrt_cpp/README.md#setup) diff --git a/dockers/SOC/PSDKRA/setup.sh b/dockers/SOC/PSDKRA/setup.sh new file mode 100755 index 0000000..99a3c92 --- /dev/null +++ b/dockers/SOC/PSDKRA/setup.sh @@ -0,0 +1,117 @@ +#!/bin/bash + +SCRIPTDIR=`pwd` +cd $HOME +if [ ! -d required_libs ];then + mkdir required_libs +fi +export SOC=j7 +REL=08_06_00_00 + +if [ ! -d arago_j7_pywhl ];then + mkdir arago_j7_pywhl +fi +cd arago_j7_pywhl +STR=`pip3 list | grep dlr` +SUB='dlr' + +if [[ "$STR" != *"$SUB"* ]]; then + wget --quiet --proxy off https://software-dl.ti.com/jacinto7/esd/tidl-tools/$REL/OSRT_TOOLS/ARM_LINUX/ARAGO//dlr-1.10.0-py3-none-any.whl + yes | pip3 install --upgrade --force-reinstall dlr-1.10.0-py3-none-any.whl +fi +STR=`pip3 list | grep onnxruntime-tidl` +SUB='onnxruntime-tidl' +if [[ "$STR" != *"$SUB"* ]]; then + wget --quiet --proxy off https://software-dl.ti.com/jacinto7/esd/tidl-tools/$REL/OSRT_TOOLS/ARM_LINUX/ARAGO//onnxruntime_tidl-1.7.0-cp38-cp38-linux_aarch64.whl + yes | pip3 install onnxruntime_tidl-1.7.0-cp38-cp38-linux_aarch64.whl +fi +STR=`pip3 list | grep tflite-runtime` +SUB='tflite-runtime' +if [[ "$STR" != *"$SUB"* ]]; then + wget --quiet --proxy off https://software-dl.ti.com/jacinto7/esd/tidl-tools/$REL/OSRT_TOOLS/ARM_LINUX/ARAGO//tflite_runtime-2.8.2-cp38-cp38-linux_aarch64.whl + yes | pip3 install --upgrade --force-reinstall tflite_runtime-2.8.2-cp38-cp38-linux_aarch64.whl + # to sync with tensor flow build version + y | pip3 uninstall numpy + yes | pip3 install numpy +fi + +cd $HOME +rm -r arago_j7_pywhl +if [ ! -d /usr/include/tensorflow ];then + wget --quiet --proxy off https://software-dl.ti.com/jacinto7/esd/tidl-tools/$REL/OSRT_TOOLS/ARM_LINUX/ARAGO//tflite_2.8_aragoj7.tar.gz + tar xf tflite_2.8_aragoj7.tar.gz + rm tflite_2.8_aragoj7.tar.gz + mv tflite_2.8_aragoj7/tensorflow /usr/include + mv tflite_2.8_aragoj7/tflite_2.8 /usr/lib/ + cp tflite_2.8_aragoj7/libtensorflow-lite.a $HOME/required_libs/ + rm -r tflite_2.8_aragoj7 + cd $HOME +else + echo "skipping tensorflow setup: found /usr/include/tensorflow" + echo "To redo the setup delete: /usr/include/tensorflow and run this script again" +fi + + +if [ ! -d /usr/include/onnxruntime ];then + wget --quiet --proxy off https://software-dl.ti.com/jacinto7/esd/tidl-tools/$REL/OSRT_TOOLS/ARM_LINUX/ARAGO//onnx_1.7.0_aragoj7.tar.gz + tar xf onnx_1.7.0_aragoj7.tar.gz + rm onnx_1.7.0_aragoj7.tar.gz + cp -r onnx_1.7.0_aragoj7/libonnxruntime.so $HOME/required_libs/ + mv onnx_1.7.0_aragoj7/onnxruntime /usr/include/ + rm -r onnx_1.7.0_aragoj7 + cd $HOME +else + echo "skipping onnxruntime setup: found /usr/include/onnxruntime" + echo "To redo the setup delete: /usr/include/onnxruntime and run this script again" +fi + +if [ ! -d /usr/include/neo-ai-dlr ];then + wget --quiet --proxy off https://software-dl.ti.com/jacinto7/esd/tidl-tools/$REL/OSRT_TOOLS/ARM_LINUX/ARAGO//dlr_1.10.0_aragoj7.tar.gz + tar xf dlr_1.10.0_aragoj7.tar.gz + rm dlr_1.10.0_aragoj7.tar.gz + cd dlr_1.10.0_aragoj7 + unzip dlr-1.10.0-py3-none-any.whl + cp ./dlr/libdlr.so $HOME/required_libs/ + cd - + mv dlr_1.10.0_aragoj7/neo-ai-dlr /usr/include/ + rm -r dlr_1.10.0_aragoj7 + cd $HOME +else + echo "skipping neo-ai-dlr setup: found /usr/include/neo-ai-dlr" + echo "To redo the setup delete: /usr/include/neo-ai-dlr and run this script again" +fi + +if [ ! -f /usr/include/itidl_rt.h ];then + wget --quiet --proxy off https://software-dl.ti.com/jacinto7/esd/tidl-tools/$REL/TIDL_TOOLS/AM68PA/tidl_tools.tar.gz + tar xf tidl_tools.tar.gz + rm tidl_tools.tar.gz + cp tidl_tools/itidl_rt.h /usr/include/ + cp tidl_tools/itvm_rt.h /usr/include/ + cd $HOME +else + echo "skipping itidl_rt.h setup: found /usr/include/itidl_rt.h" + echo "To redo the setup delete: /usr/include/itidl_rt.h and run this script again" +fi + +if [ -d ~/required_libs ];then + cp -r ~/required_libs/* /usr/lib/ +fi + +if [ ! -f /usr/dlr/libdlr.so ];then + mkdir /usr/dlr + cp ~/required_libs/libdlr.so /usr/dlr/ +fi + +if [ ! -f /usr/lib/libonnxruntime.so.1.7.0 ];then + ln -s /usr/lib/libonnxruntime.so /usr/lib/libonnxruntime.so.1.7.0 +fi +#Cleanup +cd $HOME +rm -rf required_libs +rm -rf tidl_tools + +echo "export the following vars" +echo "export SOC=j7" +echo "export TIDL_TOOLS_PATH=" +echo "export LD_LIBRARY_PATH=/usr/lib" +cd $SCRIPTDIR \ No newline at end of file diff --git a/dockers/SOC/ubuntu_18.04/Dockerfile b/dockers/SOC/ubuntu_18.04/Dockerfile new file mode 100644 index 0000000..d4c96d2 --- /dev/null +++ b/dockers/SOC/ubuntu_18.04/Dockerfile @@ -0,0 +1,83 @@ +# Copyright (C) 2021 Texas Instruments Incorporated - http://www.ti.com/ +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# +# Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# +# Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the +# distribution. +# +# Neither the name of Texas Instruments Incorporated nor the names of +# its contributors may be used to endorse or promote products derived +# from this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + +ARG REPO_LOCATION='arm64v8' +FROM ${REPO_LOCATION}ubuntu:18.04 as edgeai_tidl_tools_u18 +ARG DEBIAN_FRONTEND=noninteractive +ARG NPROC=1 +ARG PROJECT_NAME=edgeai_tidl_tools_u18 +ENV USE_PROXY=ti + +# Setup proxy settings +ADD entrypoint.sh setup_proxy.sh /usr/bin/ +RUN /usr/bin/setup_proxy.sh + +RUN apt-get update -y && apt-get dist-upgrade -y && apt-get install -y \ + glib-2.0-dev \ + ncurses-dev + +RUN apt-get install -y \ + build-essential \ + cmake \ + git \ + wget \ + unzip \ + pkg-config + +# Install python and pip +RUN apt-get update -y && apt-get install -y \ + python3 \ + python3-dev \ + python3-pip +# Install miscellaneous packages +RUN apt-get install -y \ + vim \ + net-tools \ + chrony \ + corkscrew \ + libglib2.0-dev \ + libyaml-cpp-dev + +RUN apt-get install -y \ + libjpeg-dev + +RUN pip3 install Cython +RUN pip3 install pillow \ + PyYAML \ + numpy \ + protobuf==3.19 + +RUN apt-get install -y python3-opencv +RUN apt-get install -y libegl1 libgles2-mesa libglu1 libdevil-dev + +#setup entrypoint to run the demo application +ENTRYPOINT ["/usr/bin/entrypoint.sh"] + diff --git a/dockers/SOC/ubuntu_18.04/README.md b/dockers/SOC/ubuntu_18.04/README.md new file mode 100644 index 0000000..2fab321 --- /dev/null +++ b/dockers/SOC/ubuntu_18.04/README.md @@ -0,0 +1,34 @@ +# Ubuntu 18 Docker Setup +- [Ubuntu 18 Docker Setup](#u18-docker-setups) + - [Introduction](#introduction) + - [Setup](#setup) + - [Copying the libraries](#copying-the-libraries) + + + +## Introduction + + - This folder have instructions on how to build and deploy Ubuntu 18.04 docker images on Target(Tested on J7ES) + + +## Setup +- On target run the following. This will create the image and log in to the docker container +- Make sure no existing container is running by ``` docker container ls ``` + ``` + cd edgeai-tidl-tools/dockers/ubuntu_18.04 + ./docker_build.sh + ./docker_run.sh + ``` +- Host filesystem (PSDKRA device file system ) volume is mounted at /host inside container +- Run the commands inside container + + ``` + cd /host//dockers/ubuntu_18.04 + source container_stup.sh # This will take care of additional dependencies (opencv not included) + source container_stup.sh --opencv_install 1 # This will take care of additional dependencies (opencv included) + ``` + +## Running the examples +- Run the python model compile on PC [Model Compilation on PC](../../../examples/osrt_python/README.md#model-compilation-on-pc) +- Run the python examples on target [Run Inference on Target](../../../examples/osrt_python/README.md#model-inference-on-evm) +- Compile the CPP application by following instruction from [Compile CPP examples](../../../examples/osrt_cpp/README.md#setup) diff --git a/dockers/SOC/ubuntu_18.04/container_setup.sh b/dockers/SOC/ubuntu_18.04/container_setup.sh new file mode 100755 index 0000000..179481d --- /dev/null +++ b/dockers/SOC/ubuntu_18.04/container_setup.sh @@ -0,0 +1,228 @@ +#!/bin/bash + +SCRIPTDIR=`pwd` + +SHORT=o:,h +LONG=opencv_install:,compile_glib2_9:,help +OPTS=$(getopt -a -n weather --options $SHORT --longoptions $LONG -- "$@") + +eval set -- "$OPTS" +opencv_install=0 +compile_glib2_9=0 +while : +do + case "$1" in + -o | --opencv_install ) + opencv_install="$2" + shift 2 + ;; + -c | --compile_glib2_9 ) + compile_glib2_9="$2" + shift 2 + ;; + -h | --help) + echo "usage:" + echo "source container_setup.sh" + echo "source container_setup.sh --opencv_install" + echo "source container_setup.sh --compile_glib2_9" + break + ;; + --) + shift; + break + ;; + *) + echo "Unexpected option: $1" + ;; + esac +done + +download_and_compile_glibc(){ + # in case of Ubunut 18.04 the default glibc is not matching with the tidl lib glibc + # we need to compie the glibc2.9 for usage of same + cd $HOME + wget -c https://ftp.gnu.org/gnu/glibc/glibc-2.29.tar.gz + apt install gawk bison + tar -zxvf glibc-2.29.tar.gz + cd glibc-2.29 + mkdir glibc-build + cd glibc-build/ + ../configure --prefix=/home/cyberithub/glibc-2.29/glibc-build + make + make install + export PATH=/$HOME/glibc-2.29/glibc-build/bin/:/usr/bin/:/bin:/sbin + export LD_LIBRARY_PATH=$HOME/glibc-2.29/glibc-build/math:/usr/lib/:/usr/lib/aarch64-linux-gnu/:/lib:/lib/aarch64-linux-gnu://$HOME/glibc-2.29/glibc-build/lib +} +if [ $compile_glib2_9 -eq 1 ];then + download_and_compile_glibc +fi +REL=08_06_00_00 + +cd $HOME +if [ ! -d required_libs ];then + mkdir required_libs +fi + +export SOC=j7 +#For libdlr.so showing error +export LD_PRELOAD=/usr/lib/aarch64-linux-gnu/libgomp.so.1 +export TIDL_TOOLS_PATH= + +if [ ! -d u_18_pywhl ];then + mkdir u_18_pywhl +fi +cd u_18_pywhl +STR=`pip3 list | grep dlr` +SUB='dlr' +if [[ "$STR" != *"$SUB"* ]]; then + wget --quiet https://software-dl.ti.com/jacinto7/esd/tidl-tools/$REL/OSRT_TOOLS/ARM_LINUX/UBUNTU_18_04/dlr-1.10.0-py3-none-any.whl + pip3 install --upgrade --force-reinstall dlr-1.10.0-py3-none-any.whl + cp /usr/local/lib/python3.6/dist-packages/dlr/libdlr.so $HOME/required_libs +fi +pip3 install protobuf==3.19 + +STR=`pip3 list | grep onnxruntime-tidl` +SUB='onnxruntime-tidl' +if [[ "$STR" != *"$SUB"* ]]; then + wget --quiet https://software-dl.ti.com/jacinto7/esd/tidl-tools/$REL/OSRT_TOOLS/ARM_LINUX/UBUNTU_18_04/onnxruntime_tidl-1.7.0-cp36-cp36m-linux_aarch64.whl + pip3 install onnxruntime_tidl-1.7.0-cp36-cp36m-linux_aarch64.whl +fi +STR=`pip3 list | grep tflite-runtime` +SUB='tflite-runtime' +if [[ "$STR" != *"$SUB"* ]]; then + wget --quiet https://software-dl.ti.com/jacinto7/esd/tidl-tools/$REL/OSRT_TOOLS/ARM_LINUX/UBUNTU_18_04/tflite_runtime-2.8.2-cp36-cp36m-linux_aarch64.whl + pip3 install --upgrade --force-reinstall tflite_runtime-2.8.2-cp36-cp36m-linux_aarch64.whl +fi +cd $HOME +rm -r u_18_pywhl +if [ ! -d /usr/include/tensorflow ];then + wget --quiet https://software-dl.ti.com/jacinto7/esd/tidl-tools/$REL/OSRT_TOOLS/ARM_LINUX/UBUNTU_18_04/tflite_2.8_u18.tar.gz + tar xf tflite_2.8_u18.tar.gz + rm tflite_2.8_u18.tar.gz + mv tflite_2.8_u18/tensorflow /usr/include + mv tflite_2.8_u18/tflite_2.8 /usr/lib/ + mv tflite_2.8_u18/build /usr/lib/ + cp tflite_2.8_u18/libtensorflow-lite.a $HOME/required_libs/ + rm -r tflite_2.8_u18 + cd $HOME +else + echo "skipping tensorflow setup: found /usr/include/tensorflow" + echo "To redo the setup delete: /usr/include/tensorflow and run this script again" +fi + +if [ ! -d /usr/include/opencv-4.2.0 ];then + if [ $opencv_install -eq 1 ];then + wget --quiet https://software-dl.ti.com/jacinto7/esd/tidl-tools/$REL/OSRT_TOOLS/ARM_LINUX/UBUNTU_18_04/opencv_4.2.0_u18.tar.gz + tar xf opencv_4.2.0_u18.tar.gz + tar xf opencv_4.2.0_u18.tar.gz + tar xf opencv_4.2.0_u18.tar.gz + rm opencv_4.2.0_u18.tar.gz + cp -r opencv_4.2.0_u18/opencv $HOME/required_libs/ + mv opencv_4.2.0_u18/opencv-4.2.0 /usr/include/ + rm -r opencv_4.2.0_u18 + cd $HOME + fi +else + echo "skipping opencv-4.2.0 setup: found /usr/include/opencv-4.2.0" + echo "To redo the setup delete: /usr/include/opencv-4.2.0 and run this script again" +fi + +cd $HOME +if [ ! -d /usr/include/onnxruntime ];then + wget --quiet https://software-dl.ti.com/jacinto7/esd/tidl-tools/$REL/OSRT_TOOLS/ARM_LINUX/UBUNTU_18_04/onnx_1.7.0_u18.tar.gz + tar xf onnx_1.7.0_u18.tar.gz + rm onnx_1.7.0_u18.tar.gz + cp -r onnx_1.7.0_u18/libonnxruntime.so* $HOME/required_libs/ + mv onnx_1.7.0_u18/onnxruntime /usr/include/ + rm -r onnx_1.7.0_u18 + cd $HOME +else + echo "skipping onnxruntime setup: found /usr/include/onnxruntime" + echo "To redo the setup delete: /usr/include/onnxruntime and run this script again" +fi + +if [ ! -d /usr/include/neo-ai-dlr ];then + wget --quiet https://software-dl.ti.com/jacinto7/esd/tidl-tools/$REL/OSRT_TOOLS/ARM_LINUX/UBUNTU_18_04/dlr_1.10.0_u18.tar.gz + tar xf dlr_1.10.0_u18.tar.gz + rm dlr_1.10.0_u18.tar.gz + cd dlr_1.10.0_u18 + unzip dlr-1.10.0-py3-none-any.whl + cp ./dlr/libdlr.so $HOME/required_libs/ + cd - + mv dlr_1.10.0_u18/neo-ai-dlr /usr/include/ + rm -r dlr_1.10.0_u18 + cd $HOME +else + echo "skipping neo-ai-dlr setup: found /usr/include/neo-ai-dlr" + echo "To redo the setup delete: /usr/include/neo-ai-dlr and run this script again" +fi + +if [ ! -f /usr/include/itidl_rt.h ];then + wget --quiet https://software-dl.ti.com/jacinto7/esd/tidl-tools/$REL/TIDL_TOOLS/AM68PA/tidl_tools.tar.gz + tar xf tidl_tools.tar.gz + rm tidl_tools.tar.gz + cp tidl_tools/itidl_rt.h /usr/include/ + cp tidl_tools/itvm_rt.h /usr/include/ + cd $HOME +else + echo "skipping itidl_rt.h setup: found /usr/include/itidl_rt.h" + echo "To redo the setup delete: /usr/include/itidl_rt.h and run this script again" +fi +#symbolic link creation +cd /usr/lib/aarch64-linux-gnu/ +if [ ! -L libwebp.so ];then + ln -s libwebp.so.6 libwebp.so +fi +if [ ! -L libjpeg.so ];then + ln -s libjpeg.so.8 libjpeg.so +fi +if [ ! -L libpng16.so ];then + ln -s libpng16.so.16 libpng16.so +fi +if [ ! -L libtiff.so ];then + ln -s libtiff.so.5 libtiff.so +fi +cd /usr/lib/ +if [ ! -L libti_rpmsg_char.so.0 ];then + ln -s /host/usr/lib/libti_rpmsg_char.so + ln -s /host/usr/lib/libti_rpmsg_char.so.0 +fi +if [ ! -L libvx_tidl_rt.so ];then + ln -s /host/usr/lib/libvx_tidl_rt.so + ln -s libvx_tidl_rt.so libvx_tidl_rt.so.1.0 +fi +if [ ! -L libtidl_onnxrt_EP.so ];then + ln -s /host/usr/lib/libtidl_onnxrt_EP.so libtidl_onnxrt_EP.so +fi +if [ ! -L libtidl_tfl_delegate.so.1.0 ];then + ln -s /host/usr/lib/libtidl_tfl_delegate.so.1.0 + ln -s /host/usr/lib/libtidl_tfl_delegate.so +fi +if [ ! -L libtivision_apps.so.8.5.0 ];then + ln -s /host/usr/lib/libtivision_apps.so libtivision_apps.so.8.5.0 +fi +if [ ! -L libtivision_apps.so.8.6.0 ];then + ln -s /host/usr/lib/libtivision_apps.so libtivision_apps.so.8.6.0 +fi + +if [ ! -f /usr/dlr/libdlr.so ];then + mkdir /usr/dlr + if [ ! -f ~/required_libs/libdlr.so ];then + cp ~/required_libs/libdlr.so /usr/dlr/ + fi +fi + +if [ -d $HOME/required_libs ];then + cp -r $HOME/required_libs/* /usr/lib/ + ln -s /usr/lib/libonnxruntime.so /usr/lib/libonnxruntime.so.1.7.0 + ln -s /usr/lib/libtidl_tfl_delegate.so.1.0 /usr/lib/libtidl_tfl_delegate.so +fi + +#Cleanup +cd $HOME +rm -rf required_libs +rm -rf tidl_tools + + +cd $SCRIPTDIR + diff --git a/dockers/SOC/ubuntu_18.04/docker_build.sh b/dockers/SOC/ubuntu_18.04/docker_build.sh new file mode 100755 index 0000000..422e4c0 --- /dev/null +++ b/dockers/SOC/ubuntu_18.04/docker_build.sh @@ -0,0 +1,50 @@ +#!/bin/bash + +# Copyright (C) 2021 Texas Instruments Incorporated - http://www.ti.com/ +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# +# Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# +# Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the +# distribution. +# +# Neither the name of Texas Instruments Incorporated nor the names of +# its contributors may be used to endorse or promote products derived +# from this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +# Number of process to build OpenCV application +NPROC=1 + +#Modify the server and proxy URLs as requied +ping bitbucket.itg.ti.com -c 1 > /dev/null 2>&1 +if [ "$?" -eq "0" ]; then + REPO_LOCATION=artifactory.itg.ti.com/docker-public-arm/ + sed -i 's@ENV USE_PROXY=.*@ENV USE_PROXY=ti@' Dockerfile +else + REPO_LOCATION=arm64v8/ +fi + +# Build docker image +docker build \ + -f Dockerfile \ + -t edgeai_tidl_tools_u18 \ + --build-arg REPO_LOCATION=$REPO_LOCATION \ + --build-arg NPROC=$NPROC . diff --git a/dockers/SOC/ubuntu_18.04/docker_run.sh b/dockers/SOC/ubuntu_18.04/docker_run.sh new file mode 100755 index 0000000..af91d36 --- /dev/null +++ b/dockers/SOC/ubuntu_18.04/docker_run.sh @@ -0,0 +1,65 @@ +#!/bin/bash + +# Copyright (C) 2021 Texas Instruments Incorporated - http://www.ti.com/ +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# +# Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# +# Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the +# distribution. +# +# Neither the name of Texas Instruments Incorporated nor the names of +# its contributors may be used to endorse or promote products derived +# from this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +# This script is intented to work with single container. + +# Number container exist +cont_count=`docker ps -aq | wc -l` + +#Modify the server and proxy URLs as requied +ping bitbucket.itg.ti.com -c 1 > /dev/null 2>&1 +if [ "$?" -eq "0" ]; then + USE_PROXY=ti +fi + +#If no container exist, then create the container. +if [ $cont_count -eq 0 ] +then + docker run -it \ + -v /dev:/dev \ + -v /opt:/opt \ + -v /:/host \ + -v /mnt:/mnt \ + --privileged \ + --network host \ + edgeai_tidl_tools_u18 $USE_PROXY +# If one container exist, execute that container. +elif [ $cont_count -eq 1 ] +then + cont_id=`docker ps -q -l` + docker start $cont_id + docker exec -it $cont_id /bin/bash +else + echo -e "\nMultiple containers are present, so exiting" + echo -e "To run existing container, use [docker start] and [docker exec] command" + echo -e "To run the new container, use [docker run] command\n" +fi diff --git a/dockers/SOC/ubuntu_18.04/entrypoint.sh b/dockers/SOC/ubuntu_18.04/entrypoint.sh new file mode 100755 index 0000000..7c42ebc --- /dev/null +++ b/dockers/SOC/ubuntu_18.04/entrypoint.sh @@ -0,0 +1,49 @@ +#!/bin/bash + +# Copyright (C) 2021 Texas Instruments Incorporated - http://www.ti.com/ +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# +# Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# +# Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the +# distribution. +# +# Neither the name of Texas Instruments Incorporated nor the names of +# its contributors may be used to endorse or promote products derived +# from this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +#Get proxy argument passes +export USE_PROXY=$1 + +#setup proxy as required +/usr/bin/setup_proxy.sh + +# Set Current date and Time using NTP +chronyd 2>/dev/null + +# Update bashrc to set the PS1 prompt if already not done +cat ~/.bashrc | grep PS1 | grep docker >/dev/null +if [ "$?" -ne "0" ]; then + echo 'export PS1="\[\e[40;1;35m\][docker] \[\e[40;0;34m\]\u@\h:\[\e[40;0;32m\]\w#\[\e[m\] "' >> ~/.bashrc +fi + +# Spawn a shell +bash diff --git a/dockers/SOC/ubuntu_18.04/setup_proxy.sh b/dockers/SOC/ubuntu_18.04/setup_proxy.sh new file mode 100755 index 0000000..df7506e --- /dev/null +++ b/dockers/SOC/ubuntu_18.04/setup_proxy.sh @@ -0,0 +1,82 @@ +#!/bin/bash + +# Copyright (C) 2021 Texas Instruments Incorporated - http://www.ti.com/ +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# +# Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# +# Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the +# distribution. +# +# Neither the name of Texas Instruments Incorporated nor the names of +# its contributors may be used to endorse or promote products derived +# from this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +if [ "$USE_PROXY" = "ti" ]; then + # apt proxy + if [ ! -f /etc/apt/apt.conf ]; then + echo "Acquire::http::proxy \"http://192.91.66.131:80\";" > /etc/apt/apt.conf + fi + + # wget proxy + if [ ! -f ~/.wgetrc ]; then + cat > ~/.wgetrc << EOF +http_proxy=http://192.91.66.131:80 +https_proxy=http://192.91.66.131:80 +ftp_proxy=http://192.91.66.131:80 +noproxy=ti.com +EOF + fi + + # pip3 proxy + if [ ! -f ~/.config/pip/pip.conf ]; then + mkdir -p ~/.config/pip/ + cat > ~/.config/pip/pip.conf << EOF +[global] +proxy = http://192.91.66.131 +EOF + fi + + #git proxy + cat << END >> ~/.gitconfig +[core] + gitproxy = none for ti.com + gitproxy = /home/$USER/git-proxy.sh +[http] + proxy = http://192.91.66.131:80 +[https] + proxy = http://192.91.66.131:80 +END + + cat << END >> ~/git-proxy.sh +#!/bin/sh +exec /usr/bin/corkscrew 192.91.66.131 80 $* +END + + chmod +x ~/git-proxy.sh + +else + rm -rf /etc/apt/apt.conf + rm -rf ~/.wgetrc + rm -rf ~/.config/pip/pip.conf + rm -rf ~/.gitconfig ~/git-proxy.sh +fi + diff --git a/dockers/SOC/ubuntu_20.04/Dockerfile b/dockers/SOC/ubuntu_20.04/Dockerfile new file mode 100644 index 0000000..205a02d --- /dev/null +++ b/dockers/SOC/ubuntu_20.04/Dockerfile @@ -0,0 +1,85 @@ +# Copyright (C) 2021 Texas Instruments Incorporated - http://www.ti.com/ +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# +# Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# +# Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the +# distribution. +# +# Neither the name of Texas Instruments Incorporated nor the names of +# its contributors may be used to endorse or promote products derived +# from this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + +ARG REPO_LOCATION='arm64v8' +FROM ${REPO_LOCATION}ubuntu:20.04 as edgeai_tidl_tools_u20 +ARG DEBIAN_FRONTEND=noninteractive +ARG NPROC=1 +ARG PROJECT_NAME=edgeai_tidl_tools_u20 +ENV USE_PROXY=ti + +# Setup proxy settings +ADD entrypoint.sh setup_proxy.sh /usr/bin/ +RUN /usr/bin/setup_proxy.sh + +RUN apt-get update -y && apt-get dist-upgrade -y && apt-get install -y \ + glib-2.0-dev \ + ncurses-dev \ + libopencv-core-dev \ + libopencv-imgproc-dev \ + libyaml-cpp-dev + +RUN apt-get install -y \ + build-essential \ + cmake \ + git \ + wget \ + unzip \ + pkg-config \ + openexr + +# Install python and pip +RUN apt-get update -y && apt-get install -y \ + python3 \ + python3-dev \ + python3-opencv \ + python3-pip +# Install miscellaneous packages +RUN apt-get install -y \ + vim \ + gdb \ + net-tools \ + chrony \ + corkscrew \ + libglib2.0-dev + +RUN pip3 install Cython +RUN apt-get install -y libegl1 libgles2-mesa libglu1 libdevil-dev + +RUN pip3 install \ +# jupyterlab \ + PyYAML \ + numpy \ + pillow + +#setup entrypoint to run the demo application +ENTRYPOINT ["/usr/bin/entrypoint.sh"] + diff --git a/dockers/SOC/ubuntu_20.04/README.md b/dockers/SOC/ubuntu_20.04/README.md new file mode 100644 index 0000000..8b1bcd6 --- /dev/null +++ b/dockers/SOC/ubuntu_20.04/README.md @@ -0,0 +1,34 @@ +# Ubuntu 20 Docker Setup +- [Ubuntu 20 Docker Setup](#u20-docker-setups) + - [Introduction](#introduction) + - [Setup](#setup) + - [Copying the libraries](#copying-the-libraries) + + + +## Introduction + + - This folder have instructions on how to build and deploy Ubuntu 20.04 docker images on Target(Tested on J7ES) + + +## Setup +- On target run the following. This will create the image and log in to the docker container +- Make sure no existing container is running by ``` docker container ls ``` + ``` + cd edgeai-tidl-tools/dockers/ubuntu_20.04 + ./docker_build.sh + ./docker_run.sh + ``` +- Host filesystem (PSDKRA device file system ) volume is mounted at /host inside container +- Run the commands inside container + + ``` + cd /host//dockers/ubuntu_20.04 + source container_stup.sh # This will take care of additional dependencies (opencv not included) + source container_stup.sh --opencv_install 1 # This will take care of additional dependencies (opencv included) + ``` + +## Running the examples +- Run the python model compile on PC [Model Compilation on PC](../../../examples/osrt_python/README.md#model-compilation-on-pc) +- Run the python examples on target [Run Inference on Target](../../../examples/osrt_python/README.md#model-inference-on-evm) +- Compile the CPP application by following instruction from [Compile CPP examples](../../../examples/osrt_cpp/README.md#setup) diff --git a/dockers/SOC/ubuntu_20.04/container_setup.sh b/dockers/SOC/ubuntu_20.04/container_setup.sh new file mode 100755 index 0000000..f9a44e3 --- /dev/null +++ b/dockers/SOC/ubuntu_20.04/container_setup.sh @@ -0,0 +1,200 @@ +#!/bin/bash + +SCRIPTDIR=`pwd` + +SHORT=o:,h +LONG=opencv_install:,help +OPTS=$(getopt -a -n weather --options $SHORT --longoptions $LONG -- "$@") + +eval set -- "$OPTS" +opencv_install=0 +while : +do + case "$1" in + -o | --opencv_install ) + opencv_install="$2" + shift 2 + ;; + -h | --help) + "This is a weather script" + exit 2 + ;; + --) + shift; + break + ;; + *) + echo "Unexpected option: $1" + ;; + esac +done + +cd $HOME +if [ ! -d required_libs ];then + mkdir required_libs +fi +export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:~/required_libs +export SOC=j7 +export TIDL_TOOLS_PATH= +#For libdlr.so showing error +export LD_PRELOAD=/usr/lib/aarch64-linux-gnu/libgomp.so.1 +REL=08_06_00_00 +if [ ! -d u_20_pywhl ];then + mkdir u_20_pywhl +fi +cd u_20_pywhl +#remove existing numpy dlt coz outside env +rm -r /usr/lib/python3/dist-packages/numpy* + +STR=`pip3 list | grep dlr` +SUB='dlr' +if [[ "$STR" != *"$SUB"* ]]; then + wget --quiet https://software-dl.ti.com/jacinto7/esd/tidl-tools/$REL/OSRT_TOOLS/ARM_LINUX/UBUNTU_20_04/dlr-1.10.0-py3-none-any.whl + pip3 install --upgrade --force-reinstall dlr-1.10.0-py3-none-any.whl +fi + +STR=`pip3 list | grep onnxruntime-tidl` +SUB='onnxruntime-tidl' +if [[ "$STR" != *"$SUB"* ]]; then + wget --quiet https://software-dl.ti.com/jacinto7/esd/tidl-tools/$REL/OSRT_TOOLS/ARM_LINUX/UBUNTU_20_04/onnxruntime_tidl-1.7.0-cp38-cp38-linux_aarch64.whl + pip3 install onnxruntime_tidl-1.7.0-cp38-cp38-linux_aarch64.whl +fi + +STR=`pip3 list | grep tflite-runtime` +SUB='tflite-runtime' +if [[ "$STR" != *"$SUB"* ]]; then + wget https://software-dl.ti.com/jacinto7/esd/tidl-tools/08_05_00_00/ubuntu20_04/pywhl/tflite_runtime-2.8.2-cp38-cp38-linux_aarch64.whl + wget --quiet https://software-dl.ti.com/jacinto7/esd/tidl-tools/$REL/OSRT_TOOLS/ARM_LINUX/UBUNTU_20_04/tflite_runtime-2.8.2-cp38-cp38-linux_aarch64.whl + pip3 install --upgrade --force-reinstall tflite_runtime-2.8.2-cp38-cp38-linux_aarch64.whl +fi + +cd $HOME +rm -r u_20_pywhl +if [ ! -d /usr/include/tensorflow ];then + wget --quiet https://software-dl.ti.com/jacinto7/esd/tidl-tools/$REL/OSRT_TOOLS/ARM_LINUX/UBUNTU_20_04/tflite_2.8_u20.tar.gz + tar xf tflite_2.8_u20.tar.gz + rm tflite_2.8_u20.tar.gz + mv tflite_2.8_u20/tensorflow /usr/include + mv tflite_2.8_u20/tflite_2.8 /usr/lib/ + cp ~/tflite_2.8_u20/libtensorflow-lite.a $HOME/required_libs/ + rm -r tflite_2.8_u20 + cd $HOME +else + echo "skipping tensorflow setup: found /usr/include/tensorflow" + echo "To redo the setup delete: /usr/include/tensorflow and run this script again" +fi + +if [ ! -d /usr/include/opencv-4.2.0 ];then + if [ $opencv_install -eq 1 ];then + wget --quiet https://software-dl.ti.com/jacinto7/esd/tidl-tools/$REL/OSRT_TOOLS/ARM_LINUX/UBUNTU_20_04/opencv_4.2.0_u20.tar.gz + tar -xf opencv_4.2.0_u20.tar.gz + rm opencv_4.2.0_u20.tar.gz + cp opencv_4.2.0_u20/opencv $HOME/required_libs/ + mv opencv_4.2.0_u20/opencv-4.2.0 /usr/include/ + cd opencv-4.2.0 + export OPENCV_INSTALL_DIR=$(pwd) + cd $HOME + rm -r opencv_4.2.0_u20 + fi +else + echo "skipping opencv-4.2.0 setup: found /usr/include/opencv-4.2.0" + echo "To redo the setup delete: /usr/include/opencv-4.2.0 and run this script again" +fi + + +if [ ! -d /usr/include/onnxruntime ];then + wget --quiet https://software-dl.ti.com/jacinto7/esd/tidl-tools/$REL/OSRT_TOOLS/ARM_LINUX/UBUNTU_20_04/onnx_1.7.0_u20.tar.gz + tar xf onnx_1.7.0_u20.tar.gz + rm onnx_1.7.0_u20.tar.gz + cp -r onnx_1.7.0_u20/libonnxruntime.so* $HOME/required_libs/ + mv onnx_1.7.0_u20/onnxruntime /usr/include/ + rm -r onnx_1.7.0_u20 + cd $HOME +else + echo "skipping onnxruntime setup: found /usr/include/onnxruntime" + echo "To redo the setup delete: /usr/include/onnxruntime and run this script again" +fi + +if [ ! -d /usr/include/neo-ai-dlr ];then + wget --quiet https://software-dl.ti.com/jacinto7/esd/tidl-tools/$REL/OSRT_TOOLS/ARM_LINUX/UBUNTU_20_04/dlr_1.10.0_u20.tar.gz + tar xf dlr_1.10.0_u20.tar.gz + rm dlr_1.10.0_u20.tar.gz + cd dlr_1.10.0_u20 + unzip dlr-1.10.0-py3-none-any.whl + cp ./dlr/libdlr.so $HOME/required_libs/ + cd - + cp -r /usr/local/lib/python3.8/dist-packages/dlr/libdlr.so $HOME/required_libs/ + mv dlr_1.10.0_u20/neo-ai-dlr /usr/include/ + rm -r dlr_1.10.0_u20 + cd $HOME +else + echo "skipping neo-ai-dlr setup: found /usr/include/neo-ai-dlr" + echo "To redo the setup delete: /usr/include/neo-ai-dlr and run this script again" +fi + + +if [ ! -f /usr/include/itidl_rt.h ];then + wget --quiet https://software-dl.ti.com/jacinto7/esd/tidl-tools/$REL/TIDL_TOOLS/AM68PA/tidl_tools.tar.gz + tar xf tidl_tools.tar.gz + rm tidl_tools.tar.gz + cp tidl_tools/itidl_rt.h /usr/include/ + cp tidl_tools/itvm_rt.h /usr/include/ + cd $HOME +else + echo "skipping itidl_rt.h setup: found /usr/include/itidl_rt.h" + echo "To redo the setup delete: /usr/include/itidl_rt.h and run this script again" +fi +#symbolic link creation +cd /usr/lib/aarch64-linux-gnu/ +if [ ! -L libopencv_imgcodecs.so ];then + ln -s libopencv_imgcodecs.so.4.2 libopencv_imgcodecs.so +fi +if [ ! -L libwebp.so ];then + ln -s libwebp.so.6 libwebp.so +fi +if [ ! -L libjpeg.so ];then + ln -s libjpeg.so.8 libjpeg.so +fi +if [ ! -L libpng16.so ];then + ln -s libpng16.so.16 libpng16.so +fi +if [ ! -L libtiff.so ];then + ln -s libtiff.so.5 libtiff.so +fi +cd /usr/lib/ +if [ ! -L libti_rpmsg_char.so.0 ];then + ln -s /host/usr/lib/libti_rpmsg_char.so + ln -s /host/usr/lib/libti_rpmsg_char.so.0 +fi +if [ ! -L libvx_tidl_rt.so ];then + ln -s /host/usr/lib/libvx_tidl_rt.so +fi +if [ ! -f /usr/dlr/libdlr.so ];then + mkdir /usr/dlr + cp ~/required_libs/libdlr.so /usr/dlr/ +fi +if [ ! -L libtivision_apps.so.8.5.0 ];then + ln -s /host/usr/lib/libtivision_apps.so libtivision_apps.so.8.5.0 +fi +if [ ! -L libtivision_apps.so.8.6.0 ];then + ln -s /host/usr/lib/libtivision_apps.so libtivision_apps.so.8.6.0 +fi +if [ ! -L libtidl_onnxrt_EP.so ];then + ln -s /host/usr/lib/libtidl_onnxrt_EP.so +fi +if [ ! -L libtidl_tfl_delegate.so ];then + ln -s /host/usr/lib/libtidl_tfl_delegate.so libtidl_tfl_delegate.so +fi + + +if [ -d $HOME/required_libs ];then + cp -r $HOME/required_libs/* /usr/lib/ + ln -s /usr/lib/libonnxruntime.so /usr/lib/libonnxruntime.so.1.7.0 +fi + +#Cleanup +cd $HOME +rm -rf required_libs +rm -rf tidl_tools + +cd $SCRIPTDIR \ No newline at end of file diff --git a/dockers/SOC/ubuntu_20.04/docker_build.sh b/dockers/SOC/ubuntu_20.04/docker_build.sh new file mode 100755 index 0000000..71e0f88 --- /dev/null +++ b/dockers/SOC/ubuntu_20.04/docker_build.sh @@ -0,0 +1,50 @@ +#!/bin/bash + +# Copyright (C) 2021 Texas Instruments Incorporated - http://www.ti.com/ +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# +# Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# +# Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the +# distribution. +# +# Neither the name of Texas Instruments Incorporated nor the names of +# its contributors may be used to endorse or promote products derived +# from this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +# Number of process to build OpenCV application +NPROC=1 + +#Modify the server and proxy URLs as requied +ping bitbucket.itg.ti.com -c 1 > /dev/null 2>&1 +if [ "$?" -eq "0" ]; then + REPO_LOCATION=artifactory.itg.ti.com/docker-public-arm/ + sed -i 's@ENV USE_PROXY=.*@ENV USE_PROXY=ti@' Dockerfile +else + REPO_LOCATION=arm64v8/ +fi + +# Build docker image +docker build \ + -f Dockerfile \ + -t edgeai_tidl_tools_u20 \ + --build-arg REPO_LOCATION=$REPO_LOCATION \ + --build-arg NPROC=$NPROC . diff --git a/dockers/SOC/ubuntu_20.04/docker_run.sh b/dockers/SOC/ubuntu_20.04/docker_run.sh new file mode 100755 index 0000000..6411445 --- /dev/null +++ b/dockers/SOC/ubuntu_20.04/docker_run.sh @@ -0,0 +1,65 @@ +#!/bin/bash + +# Copyright (C) 2021 Texas Instruments Incorporated - http://www.ti.com/ +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# +# Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# +# Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the +# distribution. +# +# Neither the name of Texas Instruments Incorporated nor the names of +# its contributors may be used to endorse or promote products derived +# from this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +# This script is intented to work with single container. + +# Number container exist +cont_count=`docker ps -aq | wc -l` + +#Modify the server and proxy URLs as requied +ping bitbucket.itg.ti.com -c 1 > /dev/null 2>&1 +if [ "$?" -eq "0" ]; then + USE_PROXY=ti +fi + +#If no container exist, then create the container. +if [ $cont_count -eq 0 ] +then + docker run -it \ + -v /dev:/dev \ + -v /opt:/opt \ + -v /:/host \ + -v /mnt:/mnt \ + --privileged \ + --network host \ + edgeai_tidl_tools_u20 $USE_PROXY +# If one container exist, execute that container. +elif [ $cont_count -eq 1 ] +then + cont_id=`docker ps -q -l` + docker start $cont_id + docker exec -it $cont_id /bin/bash +else + echo -e "\nMultiple containers are present, so exiting" + echo -e "To run existing container, use [docker start] and [docker exec] command" + echo -e "To run the new container, use [docker run] command\n" +fi diff --git a/dockers/SOC/ubuntu_20.04/entrypoint.sh b/dockers/SOC/ubuntu_20.04/entrypoint.sh new file mode 100755 index 0000000..7c42ebc --- /dev/null +++ b/dockers/SOC/ubuntu_20.04/entrypoint.sh @@ -0,0 +1,49 @@ +#!/bin/bash + +# Copyright (C) 2021 Texas Instruments Incorporated - http://www.ti.com/ +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# +# Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# +# Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the +# distribution. +# +# Neither the name of Texas Instruments Incorporated nor the names of +# its contributors may be used to endorse or promote products derived +# from this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +#Get proxy argument passes +export USE_PROXY=$1 + +#setup proxy as required +/usr/bin/setup_proxy.sh + +# Set Current date and Time using NTP +chronyd 2>/dev/null + +# Update bashrc to set the PS1 prompt if already not done +cat ~/.bashrc | grep PS1 | grep docker >/dev/null +if [ "$?" -ne "0" ]; then + echo 'export PS1="\[\e[40;1;35m\][docker] \[\e[40;0;34m\]\u@\h:\[\e[40;0;32m\]\w#\[\e[m\] "' >> ~/.bashrc +fi + +# Spawn a shell +bash diff --git a/dockers/SOC/ubuntu_20.04/setup_proxy.sh b/dockers/SOC/ubuntu_20.04/setup_proxy.sh new file mode 100755 index 0000000..df7506e --- /dev/null +++ b/dockers/SOC/ubuntu_20.04/setup_proxy.sh @@ -0,0 +1,82 @@ +#!/bin/bash + +# Copyright (C) 2021 Texas Instruments Incorporated - http://www.ti.com/ +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# +# Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# +# Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the +# distribution. +# +# Neither the name of Texas Instruments Incorporated nor the names of +# its contributors may be used to endorse or promote products derived +# from this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +if [ "$USE_PROXY" = "ti" ]; then + # apt proxy + if [ ! -f /etc/apt/apt.conf ]; then + echo "Acquire::http::proxy \"http://192.91.66.131:80\";" > /etc/apt/apt.conf + fi + + # wget proxy + if [ ! -f ~/.wgetrc ]; then + cat > ~/.wgetrc << EOF +http_proxy=http://192.91.66.131:80 +https_proxy=http://192.91.66.131:80 +ftp_proxy=http://192.91.66.131:80 +noproxy=ti.com +EOF + fi + + # pip3 proxy + if [ ! -f ~/.config/pip/pip.conf ]; then + mkdir -p ~/.config/pip/ + cat > ~/.config/pip/pip.conf << EOF +[global] +proxy = http://192.91.66.131 +EOF + fi + + #git proxy + cat << END >> ~/.gitconfig +[core] + gitproxy = none for ti.com + gitproxy = /home/$USER/git-proxy.sh +[http] + proxy = http://192.91.66.131:80 +[https] + proxy = http://192.91.66.131:80 +END + + cat << END >> ~/git-proxy.sh +#!/bin/sh +exec /usr/bin/corkscrew 192.91.66.131 80 $* +END + + chmod +x ~/git-proxy.sh + +else + rm -rf /etc/apt/apt.conf + rm -rf ~/.wgetrc + rm -rf ~/.config/pip/pip.conf + rm -rf ~/.gitconfig ~/git-proxy.sh +fi + diff --git a/examples/CMakeLists.txt b/examples/CMakeLists.txt index 951392a..4ef803c 100644 --- a/examples/CMakeLists.txt +++ b/examples/CMakeLists.txt @@ -12,10 +12,14 @@ endif() message(STATUS "Detected processor: ${CMAKE_SYSTEM_PROCESSOR}") if(CMAKE_SYSTEM_PROCESSOR MATCHES "amd64.*|x86_64.*|AMD64.*") set(HOST_CPU x86) - #defualt consider am68pa config on x86 + if(NOT DEFINED ENV{SOC} OR ENV{SOC} STREQUAL "" ) + message(FATAL_ERROR "SOC not specicfied, please export SOC variable") + else() + set(TARGET_DEVICE $ENV{SOC}) + message(STATUS "TARGET_DEVICE setting to: ${TARGET_DEVICE}") + endif() if(NOT DEFINED TARGET_DEVICE) - set(TARGET_DEVICE am68pa) - message(STATUS "TARGET_DEVICE not specicfied using default: ${TARGET_DEVICE}") + message(FATAL_ERROR "SOC not specicfied, please export SOC variable") endif() if(NOT DEFINED TARGET_CPU) set(TARGET_CPU x86) @@ -23,9 +27,14 @@ if(CMAKE_SYSTEM_PROCESSOR MATCHES "amd64.*|x86_64.*|AMD64.*") endif() elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "^(aarch64.*|AARCH64.*|arm64.*|ARM64.*)") set(HOST_CPU arm) + if(NOT DEFINED ENV{SOC} OR ENV{SOC} STREQUAL "" ) + message(FATAL_ERROR "SOC not specicfied, please export SOC variable") + else() + set(TARGET_DEVICE $ENV{SOC}) + message(STATUS "TARGET_DEVICE setting to: ${TARGET_DEVICE}") + endif() if(NOT DEFINED TARGET_DEVICE) - set(TARGET_DEVICE am68pa) - message(STATUS "TARGET_DEVICE not specicfied using default: ${TARGET_DEVICE}") + message(FATAL_ERROR "SOC not specicfied, please export SOC variable") endif() if(NOT DEFINED TARGET_CPU) set(TARGET_CPU arm) diff --git a/examples/osrt_python/tvm_dlr/dlr_inference_example.py b/examples/osrt_python/tvm_dlr/dlr_inference_example.py index 2005aa2..6c2e7ee 100644 --- a/examples/osrt_python/tvm_dlr/dlr_inference_example.py +++ b/examples/osrt_python/tvm_dlr/dlr_inference_example.py @@ -210,13 +210,13 @@ def model_create_and_run(model_dir, preprocess_for_onnx_mobilenetv2, postprocess_for_onnx_mobilenetv2, 1) -if platform.machine() == 'aarch64': - model_output_directory = '../../../model-artifacts/cl-dlr-mxnet_mobilenetv3_large_device' - model_create_and_run(model_output_directory, 'data', - preprocess_for_mxnet_mobilenetv3, - postprocess_for_onnx_mobilenetv2, 1) - - model_output_directory = '../../../model-artifacts/cl-dlr-mxnet_mobilenetv3_large_device_c7x' - model_create_and_run(model_output_directory, 'data', - preprocess_for_mxnet_mobilenetv3, - postprocess_for_onnx_mobilenetv2, 1) +# if platform.machine() == 'aarch64': +# model_output_directory = '../../../model-artifacts/cl-dlr-mxnet_mobilenetv3_large_device' +# model_create_and_run(model_output_directory, 'data', +# preprocess_for_mxnet_mobilenetv3, +# postprocess_for_onnx_mobilenetv2, 1) + +# model_output_directory = '../../../model-artifacts/cl-dlr-mxnet_mobilenetv3_large_device_c7x' +# model_create_and_run(model_output_directory, 'data', +# preprocess_for_mxnet_mobilenetv3, +# postprocess_for_onnx_mobilenetv2, 1) diff --git a/scripts/gen_test_report.py b/scripts/gen_test_report.py index 4c9624f..38e593b 100644 --- a/scripts/gen_test_report.py +++ b/scripts/gen_test_report.py @@ -244,8 +244,8 @@ def run_cmd(cmd, dir): print(final_report) if(len(final_report) > 0): + keys =final_report[0].keys() if device == 'pc': - keys =final_report[0].keys() for i in range(len(final_report)): final_report[i].pop('Total time',None) final_report[i].pop('Offload Time',None) diff --git a/setup.sh b/setup.sh index 82d774c..65edaf3 100755 --- a/setup.sh +++ b/setup.sh @@ -279,7 +279,6 @@ if [[ $arch == x86_64 && $skip_x86_python_install -eq 0 ]]; then echo 'Installing python packages...' pip3 install -r ./requirements_pc.txt fi -sudo apt-get install libyaml-cpp-dev if [[ $arch == x86_64 ]]; then if [[ $use_local == 1 ]];then echo 'Installing python osrt packages from local...' @@ -361,6 +360,7 @@ if [[ $arch == x86_64 && $skip_arm_gcc_download -eq 0 ]]; then export ARM64_GCC_PATH=$(pwd)/gcc-arm-9.2-2019.12-x86_64-aarch64-none-linux-gnu else echo "skipping gcc-arm-9.2-2019.12-x86_64-aarch64-none-linux-gnu download: found $(pwd)/gcc-arm-9.2-2019.12-x86_64-aarch64-none-linux-gnu" + export ARM64_GCC_PATH=$(pwd)/gcc-arm-9.2-2019.12-x86_64-aarch64-none-linux-gnu fi fi diff --git a/test_data/golden_ref_am62a.csv b/test_data/golden_ref_am62a.csv index 8d3949a..a39dd2e 100644 --- a/test_data/golden_ref_am62a.csv +++ b/test_data/golden_ref_am62a.csv @@ -1,20 +1,20 @@ Name,Total time,Offload Time,DDR RW MBs,rt type -cl-tfl-mobilenet_v1_1.0_224,1.61,1.6,0,tfl-py -ss-tfl-deeplabv3_mnv2_ade20k_float,10.72,10.7,0,tfl-py -od-tfl-ssd_mobilenet_v2_300_float,5.62,5.6,0,tfl-py -cl-ort-resnet18-v1,2.47,2.38,0,ort-py -ss-ort-deeplabv3lite_mobilenetv2,11.01,10.86,0,ort-py -od-ort-ssd-lite_mobilenetv2_fpn,9.38,9.11,0,ort-py -cl-dlr-onnx_mobilenetv2_device,3,3,0,dlr-py -cl-dlr-tflite_inceptionnetv3_device,10.27,10.27,0,dlr-py +cl-tfl-mobilenet_v1_1.0_224,3.06,3.04,0,tfl-py +ss-tfl-deeplabv3_mnv2_ade20k_float,39.67,39.64,0,tfl-py +od-tfl-ssd_mobilenet_v2_300_float,15.70, 15.67,0,tfl-py +cl-ort-caffe_squeezenet_v1_1,2.61,2.42,0,ort-py +cl-ort-resnet18-v1,5.15,4.98,0,ort-py +ss-ort-deeplabv3lite_mobilenetv2,33.14,32.91,0,ort-py +od-ort-ssd-lite_mobilenetv2_fpn,25.64,25.14,0,ort-py +cl-dlr-onnx_mobilenetv2_device,5.55,5.55,0,dlr-py +cl-dlr-tflite_inceptionnetv3_device,24.21,24.21,0,dlr-py cl-dlr-mxnet_mobilenetv3_large_device,13.24,13.24,0,dlr-py cl-dlr-mxnet_mobilenetv3_large_device_c7x,9.46,9.46,0,dlr-py -ss-tfl-deeplabv3_mnv2_ade20k_float,10.42,0,0,tfl-cpp -cl-tfl-mobilenet_v1_1.0_224,1.5,0,0,tfl-cpp -od-tfl-ssd_mobilenet_v2_300_float,5.43,0,0,tfl-cpp -ss-ort-deeplabv3lite_mobilenetv2,10.63,0,0,ort-cpp -cl-ort-resnet18-v1,2.31,0,0,ort-cpp -od-ort-ssd-lite_mobilenetv2_fpn,9.03,0,0,ort-cpp -cl-dlr-onnx_mobilenetv2_device,2.11,0,0,dlr-cpp -cl-dlr-tflite_inceptionnetv3_device,8.95,0,0,dlr-cpp -cl-ort-caffe_squeezenet_v1_1,1.25,1.15,0,ort-py +ss-tfl-deeplabv3_mnv2_ade20k_float,39.7,0,0,tfl-cpp +cl-tfl-mobilenet_v1_1.0_224,2.9,0,0,tfl-cpp +od-tfl-ssd_mobilenet_v2_300_float,15.6,0,0,tfl-cpp +ss-ort-deeplabv3lite_mobilenetv2,33.01,0,0,ort-cpp +cl-ort-resnet18-v1,4.95,0,0,ort-cpp +od-ort-ssd-lite_mobilenetv2_fpn,25.80,0,0,ort-cpp +cl-dlr-onnx_mobilenetv2_device,3.9,0,0,dlr-cpp +cl-dlr-tflite_inceptionnetv3_device,22.1,0,0,dlr-cpp diff --git a/test_data/refs-am62a/cpp_out_cl-dlr-onnx_mobilenetv2_device.jpg b/test_data/refs-am62a/cpp_out_cl-dlr-onnx_mobilenetv2_device.jpg index 692656f..b20f4e3 120000 --- a/test_data/refs-am62a/cpp_out_cl-dlr-onnx_mobilenetv2_device.jpg +++ b/test_data/refs-am62a/cpp_out_cl-dlr-onnx_mobilenetv2_device.jpg @@ -1 +1 @@ -../refs_evm_common/cpp_out_cl-dlr-onnx_mobilenetv2_device.jpg \ No newline at end of file +../refs-evm-common/cpp_out_cl-dlr-onnx_mobilenetv2_device.jpg \ No newline at end of file diff --git a/test_data/refs-am62a/cpp_out_cl-dlr-tflite_inceptionnetv3_device.jpg b/test_data/refs-am62a/cpp_out_cl-dlr-tflite_inceptionnetv3_device.jpg index ea13e49..83bb40c 120000 --- a/test_data/refs-am62a/cpp_out_cl-dlr-tflite_inceptionnetv3_device.jpg +++ b/test_data/refs-am62a/cpp_out_cl-dlr-tflite_inceptionnetv3_device.jpg @@ -1 +1 @@ -../refs_evm_common/cpp_out_cl-dlr-tflite_inceptionnetv3_device.jpg \ No newline at end of file +../refs-evm-common/cpp_out_cl-dlr-tflite_inceptionnetv3_device.jpg \ No newline at end of file diff --git a/test_data/refs-am62a/cpp_out_cl-ort-resnet18-v1.jpg b/test_data/refs-am62a/cpp_out_cl-ort-resnet18-v1.jpg index 3650d5c..d788301 120000 --- a/test_data/refs-am62a/cpp_out_cl-ort-resnet18-v1.jpg +++ b/test_data/refs-am62a/cpp_out_cl-ort-resnet18-v1.jpg @@ -1 +1 @@ -../refs_evm_common/cpp_out_cl-ort-resnet18-v1.jpg \ No newline at end of file +../refs-evm-common/cpp_out_cl-ort-resnet18-v1.jpg \ No newline at end of file diff --git a/test_data/refs-am62a/cpp_out_cl-tfl-mobilenet_v1_1.0_224.jpg b/test_data/refs-am62a/cpp_out_cl-tfl-mobilenet_v1_1.0_224.jpg index 5fd75c5..d8ab9d2 120000 --- a/test_data/refs-am62a/cpp_out_cl-tfl-mobilenet_v1_1.0_224.jpg +++ b/test_data/refs-am62a/cpp_out_cl-tfl-mobilenet_v1_1.0_224.jpg @@ -1 +1 @@ -../refs_evm_common/cpp_out_cl-tfl-mobilenet_v1_1.0_224.jpg \ No newline at end of file +../refs-evm-common/cpp_out_cl-tfl-mobilenet_v1_1.0_224.jpg \ No newline at end of file diff --git a/test_data/refs-am62a/cpp_out_od-ort-ssd-lite_mobilenetv2_fpn.jpg b/test_data/refs-am62a/cpp_out_od-ort-ssd-lite_mobilenetv2_fpn.jpg index eb3b723..1a495a8 120000 --- a/test_data/refs-am62a/cpp_out_od-ort-ssd-lite_mobilenetv2_fpn.jpg +++ b/test_data/refs-am62a/cpp_out_od-ort-ssd-lite_mobilenetv2_fpn.jpg @@ -1 +1 @@ -../refs_evm_common/cpp_out_od-ort-ssd-lite_mobilenetv2_fpn.jpg \ No newline at end of file +../refs-evm-common/cpp_out_od-ort-ssd-lite_mobilenetv2_fpn.jpg \ No newline at end of file diff --git a/test_data/refs-am62a/cpp_out_od-tfl-ssd_mobilenet_v2_300_float.jpg b/test_data/refs-am62a/cpp_out_od-tfl-ssd_mobilenet_v2_300_float.jpg deleted file mode 120000 index 106e180..0000000 --- a/test_data/refs-am62a/cpp_out_od-tfl-ssd_mobilenet_v2_300_float.jpg +++ /dev/null @@ -1 +0,0 @@ -../refs_evm_common/cpp_out_od-tfl-ssd_mobilenet_v2_300_float.jpg \ No newline at end of file diff --git a/test_data/refs-am62a/cpp_out_ss-ort-deeplabv3lite_mobilenetv2.jpg b/test_data/refs-am62a/cpp_out_ss-ort-deeplabv3lite_mobilenetv2.jpg index 2873e31..7c79b42 120000 --- a/test_data/refs-am62a/cpp_out_ss-ort-deeplabv3lite_mobilenetv2.jpg +++ b/test_data/refs-am62a/cpp_out_ss-ort-deeplabv3lite_mobilenetv2.jpg @@ -1 +1 @@ -../refs_evm_common/cpp_out_ss-ort-deeplabv3lite_mobilenetv2.jpg \ No newline at end of file +../refs-evm-common/cpp_out_ss-ort-deeplabv3lite_mobilenetv2.jpg \ No newline at end of file diff --git a/test_data/refs-am62a/cpp_out_ss-tfl-deeplabv3_mnv2_ade20k_float.jpg b/test_data/refs-am62a/cpp_out_ss-tfl-deeplabv3_mnv2_ade20k_float.jpg deleted file mode 120000 index 30cab78..0000000 --- a/test_data/refs-am62a/cpp_out_ss-tfl-deeplabv3_mnv2_ade20k_float.jpg +++ /dev/null @@ -1 +0,0 @@ -../refs_evm_common/cpp_out_ss-tfl-deeplabv3_mnv2_ade20k_float.jpg \ No newline at end of file diff --git a/test_data/refs-am62a/cpp_out_ss-tfl-deeplabv3_mnv2_ade20k_float.jpg b/test_data/refs-am62a/cpp_out_ss-tfl-deeplabv3_mnv2_ade20k_float.jpg new file mode 100644 index 0000000000000000000000000000000000000000..a5deebe8e25eae0b5ad45feece7261f0a2a67dcb GIT binary patch literal 88803 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