変換したモデルの推論を、CVツールで行う


CVツールには、変換後のモデルの推論を行うシミュレータが含まれており、カメラを使わずに変換後のモデルの精度評価を行うことが可能です。

推論時間の計測はできません。

 

変換前に準備すること


シミュレータでは、AIモデルを変換する際に出力される中間データを使用します。中間データは以下のディレクトリに出力されます。

(変換を行うディレクトリ)/${WORK_DIR}/${NET_NAME}_out/${PARSER_OPTION}/(AIモデルのファイル名)

ただし変換スクリプト(onnx_conversin.sh など)の中で、デフォルトでは ${WORK_DIR} を削除しています。

# remove work directory rm -rf ${WORK_DIR}

シミュレータを使う際は、“rm -rf ${WORK_DIR}” を実行しないようにスクリプトを修正してから、変換を実行してください。

 

シミュレータ用スクリプト


以下のスクリプトを作成してください。スクリプトのファイル名は任意です。(説明のため、以降では InfSim.sh と記載します)

#!/bin/bash # # file/directory path (set absolute path as cvtool) # TARGET_SOC="ipro-ambaCV2X" SIM_INPUT_DIR="/home/cvtool/cv_share/sim_input" SIM_INPUT_IS_IMAGE="yes" SIM_OUTPUT_DIR="/home/cvtool/cv_share/sim_output" CONV_SETTING="/home/cvtool/conversion/onnx/yolov5/setting.conf" CONV_WORK_DIR="/home/cvtool/conversion/onnx/yolov5/work/yolov5_out/MIX/yolov5_opt.onnx" # check current user if [ $(whoami) != "cvtool" ]; then echo "Please execute this script as cvtool." exit 1 fi # setting cwd=$(echo ${PWD}) cd ${HOME}; . setup_env.sh ${TARGET_SOC}; cd ${cwd} . ${CONV_SETTING} if [ x${IN_NODE} != "x" ]; then IN_LAYER=${IN_NODE} fi # generate binary files for INPUT_DIR SIM_WORK_DIR="/tmp/pcInf_work" BIN_IMG_DIR=${SIM_WORK_DIR}/bin_image BIN_LIST=${SIM_WORK_DIR}/bin_list.txt mkdir -p ${BIN_IMG_DIR} if [ ${SIM_INPUT_IS_IMAGE} = "yes" ]; then if [ ${PREPRO} = "NONE" ]; then im2bin.sh ${SIM_INPUT_DIR} ${BIN_IMG_DIR} ${IN_DATA_WIDTH} ${IN_DATA_HEIGHT} ${IN_DATA_CHANNEL} 0 ${IS_BGR} else cwd=$(echo ${PWD}); cd $(dirname ${CONV_SETTING}) python3 ${PREPRO} --inimgpath ${INPUT_DIR} --outbinpath ${BIN_IMG_DIR} ${PREPRO_ARG} cd ${cwd} fi else cp ${SIM_INPUT_DIR}/* ${BIN_IMG_DIR} fi gen_image_list.py -f ${BIN_IMG_DIR} -o ${BIN_LIST} -ns # run simulation cwd=$(echo ${PWD}); cd ${SIM_WORK_DIR} ABSPATH_BIN_LIST=$(cd ${SIM_WORK_DIR}; pwd)/bin_list.txt run_cnngen_forward.py \ -n ${NET_NAME} \ -v ${CONV_WORK_DIR}/cnngen_out \ -isrc "i:${IN_LAYER}=${ABSPATH_BIN_LIST}" \ -of ${SIM_WORK_DIR}/sim_output # simulation output (inference result) cd ${cwd} rm -rf ${SIM_OUTPUT_DIR} mv ${SIM_WORK_DIR}/sim_output/inf_results ${SIM_OUTPUT_DIR} # simulation output (file list) ((cnt = 0)) while read i; do echo -e $(printf '%06d' "${cnt}")"\t"$(basename $i .bin) >> ${SIM_OUTPUT_DIR}/filelist.txt ((cnt++)) done < ${BIN_LIST} # remove work directory rm -rf ${SIM_WORK_DIR}

InfSim.sh の 4 - 9行目が、設定が必要なパラメータです。

  • TARGET_SOC
    AIモデル変換時に指定したカメラのSoC (ipro-ambaCV2X または ipro-ambaCV5X)

  • SIM_INPUT_DIR
    入力データを格納したディレクトリのパス

  • SIM_INPUT_IS_IMAGE
    入力データが画像ファイルの場合に、"yes" を指定します
    画像フォーマットはJPEGやPNGなど、OpenCVで対応しているものです

  • SIM_OUTPUT_DIR
    シミュレーション結果を出力するディレクトリのパス

  • CONV_SETTING
    AIモデル変換時に使用した setting.conf へのパス

  • CONV_WORK_DIR
    AIモデル変換時の中間データのディレクトリへのパス

ディレクトリおよびファイルへのパスは、cvtoolの中での絶対パスを設定してください。

 

シミュレータの実行


  1. InfSim.sh を、cvtool の /home/cvtool 以下の任意の場所に置いてください。

  2. InfSim.sh を実行します。

(cvtool で実行する場合の例)

cd (InfSim.sh を置いたディレクトリ) ./InfSim.sh

(ホストPCから実行する場合の例)

 

実行結果


SIM_OUTPUT_DIR の下に、(出力レイヤ)_(6桁の数字).bin の形式で出力されます。

出力結果はfloat32となります。

(例:出力レイヤが output1,output2 の2つ、入力データが3つある場合)

6桁の数字に対応する入力ファイル名は filelist.txt に記載されています。