/// /// Copyright (c) 2017-2019 Arm Limited. /// /// SPDX-License-Identifier: MIT /// /// Permission is hereby granted, free of charge, to any person obtaining a copy /// of this software and associated documentation files (the "Software"), to /// deal in the Software without restriction, including without limitation the /// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or /// sell copies of the Software, and to permit persons to whom the Software is /// furnished to do so, subject to the following conditions: /// /// The above copyright notice and this permission notice shall be included in all /// copies or substantial portions of the Software. /// /// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR /// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, /// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE /// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER /// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, /// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE /// SOFTWARE. /// namespace arm_compute { /** @page data_import Importing data from existing models @tableofcontents @section caffe_data_extractor Extract data from pre-trained caffe model One can find caffe pre-trained models on caffe's official github repository. The caffe_data_extractor.py provided in the scripts folder is an example script that shows how to extract the parameter values from a trained model. @note complex networks might require altering the script to properly work. @subsection caffe_how_to How to use the script Install caffe following caffe's document. Make sure the pycaffe has been added into the PYTHONPATH. Download the pre-trained caffe model. Run the caffe_data_extractor.py script by python caffe_data_extractor.py -m -n For example, to extract the data from pre-trained caffe Alex model to binary file: python caffe_data_extractor.py -m /path/to/bvlc_alexnet.caffemodel -n /path/to/caffe/models/bvlc_alexnet/deploy.prototxt The script has been tested under Python2.7. @subsection caffe_result What is the expected output from the script If the script runs successfully, it prints the names and shapes of each layer onto the standard output and generates *.npy files containing the weights and biases of each layer. The arm_compute::utils::load_trained_data shows how one could load the weights and biases into tensor from the .npy file by the help of Accessor. @section tensorflow_data_extractor Extract data from pre-trained tensorflow model The script tensorflow_data_extractor.py extracts trainable parameters (e.g. values of weights and biases) from a trained tensorflow model. A tensorflow model consists of the following two files: {model_name}.data-{step}-{global_step}: A binary file containing values of each variable. {model_name}.meta: A binary file containing a MetaGraph struct which defines the graph structure of the neural network. @note Since Tensorflow version 0.11 the binary checkpoint file which contains the values for each parameter has the format of: {model_name}.data-{step}-of-{max_step} instead of: {model_name}.ckpt When dealing with binary files with version >= 0.11, only pass {model_name} to -m option; when dealing with binary files with version < 0.11, pass the whole file name {model_name}.ckpt to -m option. @note This script relies on the parameters to be extracted being in the 'trainable_variables' tensor collection. By default all variables are automatically added to this collection unless specified otherwise by the user. Thus should a user alter this default behavior and/or want to extract parameters from other collections, tf.GraphKeys.TRAINABLE_VARIABLES should be replaced accordingly. @subsection tensorflow_how_to How to use the script Install tensorflow and numpy. Download the pre-trained tensorflow model. Run tensorflow_data_extractor.py with python tensorflow_data_extractor -m -n For example, to extract the data from pre-trained tensorflow Alex model to binary files: python tensorflow_data_extractor -m /path/to/bvlc_alexnet -n /path/to/bvlc_alexnet.meta Or for binary checkpoint files before Tensorflow 0.11: python tensorflow_data_extractor -m /path/to/bvlc_alexnet.ckpt -n /path/to/bvlc_alexnet.meta @note with versions >= Tensorflow 0.11 only model name is passed to the -m option The script has been tested with Tensorflow 1.2, 1.3 on Python 2.7.6 and Python 3.4.3. @subsection tensorflow_result What is the expected output from the script If the script runs successfully, it prints the names and shapes of each parameter onto the standard output and generates *.npy files containing the weights and biases of each layer. The arm_compute::utils::load_trained_data shows how one could load the weights and biases into tensor from the .npy file by the help of Accessor. @section tf_frozen_model_extractor Extract data from pre-trained frozen tensorflow model The script tf_frozen_model_extractor.py extracts trainable parameters (e.g. values of weights and biases) from a frozen trained Tensorflow model. @subsection tensorflow_frozen_how_to How to use the script Install Tensorflow and NumPy. Download the pre-trained Tensorflow model and freeze the model using the architecture and the checkpoint file. Run tf_frozen_model_extractor.py with python tf_frozen_model_extractor -m -d For example, to extract the data from pre-trained Tensorflow model to binary files: python tf_frozen_model_extractor -m /path/to/inceptionv3.pb -d ./data @subsection tensorflow_frozen_result What is the expected output from the script If the script runs successfully, it prints the names and shapes of each parameter onto the standard output and generates *.npy files containing the weights and biases of each layer. The arm_compute::utils::load_trained_data shows how one could load the weights and biases into tensor from the .npy file by the help of Accessor. @section validate_examples Validating examples Compute Library provides a list of graph examples that are used in the context of integration and performance testing. The provenance of each model is part of its documentation and no structural or data alterations have been applied to any of them unless explicitly specified otherwise in the documentation. Using one of the provided scripts will generate files containing the trainable parameters. You can validate a given graph example on a list of inputs by running: LD_LIBRARY_PATH=lib ./ --validation-range='' --validation-file='' --validation-path='/path/to/test/images/' --data='/path/to/weights/' e.g: LD_LIBRARY_PATH=lib ./bin/graph_alexnet --target=CL --layout=NHWC --type=F32 --threads=4 --validation-range='16666,24998' --validation-file='val.txt' --validation-path='images/' --data='data/' where: validation file is a plain document containing a list of images along with their expected label value. e.g: val_00000001.JPEG 65 val_00000002.JPEG 970 val_00000003.JPEG 230 val_00000004.JPEG 809 val_00000005.JPEG 516 --validation-range is the index range of the images within the validation file you want to check: e.g: --validation-range='100,200' will validate 100 images starting from 100th one in the validation file. This can be useful when parallelizing the validation process is needed. */ }