変換したモデルの推論を、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の中での絶対パスを設定してください。
シミュレータの実行
InfSim.sh を、cvtool の /home/cvtool 以下の任意の場所に置いてください。
InfSim.sh を実行します。
(cvtool で実行する場合の例)
cd (InfSim.sh を置いたディレクトリ)
./InfSim.sh
(ホストPCから実行する場合の例)
実行結果
SIM_OUTPUT_DIR の下に、(出力レイヤ)_(6桁の数字).bin の形式で出力されます。
出力結果はfloat32となります。
(例:出力レイヤが output1,output2 の2つ、入力データが3つある場合)
6桁の数字に対応する入力ファイル名は filelist.txt に記載されています。