Yolov3-tiny model conversion and detection

I used the following steps which are not seccessful:
Model Conversion

  1. configuration and weights
    cfg: models-zoo/yolov3-tiny.cfg at master · yan-wyb/models-zoo · GitHub
    weights: https://pjreddie.com/media/files/yolov3-tiny.weights

  2. 0_import_model_416A_tiny.sh


sajjad@teco:~/hussain/npusdk2_basis/aml_npu_sdk/acuity-toolkit/demo$ cat 0_import_model_416A_tiny.sh
#!/bin/bash

NAME=yolotiny
ACUITY_PATH=../bin/

pegasus=${ACUITY_PATH}pegasus
if [ ! -e "$pegasus" ]; then
    pegasus=${ACUITY_PATH}pegasus.py
fi

#--model  /home/sajjad/sajjad/models-zoo/darknet/yolov3/yolov3/yolov3-tiny.cfg \
#--weights  /home/sajjad/sajjad/yolov3.weights \
$pegasus import darknet\
    --model  /home/sajjad/sajjad/darknet/cfg/yolov3-tiny.cfg \
    --weights /home/sajjad/sajjad/darknet/yolov3-tiny.weights \
    --output-model ${NAME}.json \
    --output-data ${NAME}.data \

#generate inpumeta  --source-file dataset.txt
$pegasus generate inputmeta \
        --model ${NAME}.json \
        --input-meta-output ${NAME}_inputmeta.yml \
        --channel-mean-value "0 0 0 0.003906"  \
        --source-file data/validation_tf_416.txt
  1. 1_quantize_model_416_tiny.sh

sajjad@teco:~/hussain/npusdk2_basis/aml_npu_sdk/acuity-toolkit/demo$ cat 1_quantize_model_416_tiny.sh
#!/bin/bash

NAME=yolotiny
ACUITY_PATH=../bin/

pegasus=${ACUITY_PATH}pegasus
if [ ! -e "$pegasus" ]; then
    pegasus=${ACUITY_PATH}pegasus.py
fi

$pegasus  quantize \
        --quantizer dynamic_fixed_point \
        --qtype int8 \
        --rebuild \
        --with-input-meta  ${NAME}_inputmeta.yml \
        --model  ${NAME}.json \
        --model-data  ${NAME}.data
  1. 2_export_case_code_416_tiny.sh

sajjad@teco:~/hussain/npusdk2_basis/aml_npu_sdk/acuity-toolkit/demo$ cat 2_export_case_code_416_tiny.sh
#!/bin/bash

NAME=yolotiny
ACUITY_PATH=../bin/

pegasus=$ACUITY_PATH/pegasus
if [ ! -e "$pegasus" ]; then
    pegasus=$ACUITY_PATH/pegasus.py
fi

$pegasus export ovxlib\
    --model ${NAME}.json \
    --model-data ${NAME}.data \
    --model-quantize ${NAME}.quantize \
    --with-input-meta ${NAME}_inputmeta.yml \
    --dtype quantized \
    --optimize VIPNANOQI_PID0X88  \
    --viv-sdk ${ACUITY_PATH}vcmdtools \
    --pack-nbg-unify

rm -rf ${NAME}_nbg_unify

mv ../*_nbg_unify ${NAME}_nbg_unify

cd ${NAME}_nbg_unify

mv network_binary.nb ${NAME}_88.nb

cd ..

#save normal case demo export.data
mkdir -p ${NAME}_normal_case_demo
mv  *.h *.c .project .cproject *.vcxproj BUILD *.linux *.export.data ${NAME}_normal_case_demo

# delete normal_case demo source
#rm  *.h *.c .project .cproject *.vcxproj  BUILD *.linux *.export.data

#rm *.data *.quantize *.json *_inputmeta.yml
rm *.data *.json *_inputmeta.yml
  1. validation_tf_416.txt
sajjad@teco:~/hussain/npusdk2_basis/aml_npu_sdk/acuity-toolkit/demo$ cat data/validation_tf_416.txt
./1080p-416x416.jpg
sajjad@teco:~/hussain/npusdk2_basis/aml_npu_sdk/acuity-toolkit/demo$

Test yolov3_tiny

  1. Produce libnn_yolo_tiny.so using detect_yolo_v3_tiny
    I copied the generated files from SDK i.e., vnn_post_process.h, vnn_pre_process.h, and vnn_yolotiny.h to aml_npu_app/detect_library/model_code/detect_yolo_v3_tiny/include and vnn_yolotiny.c to aml_npu_app/detect_library/model_code/detect_yolo_v3_tiny/include. libnn_yolo_tiny.so is produced using ./build_vx.sh

  2. Copy libnn_yolo_tiny.so and yolotiny_88.nb to detect_demo_picture
    I copied libnn_yolo_tiny.so to aml_npu_demo_binaries/detect_demo_picture/lib and yolotiny_88.nb to aml_npu_demo_binaries/detect_demo_picture/nn_data
    yolotiny_88.nb

  3. Run ./UNINSTALL and ./INSTALL

sudo ./UNINSTALL 
khadas@Khadas:~/hussain/aml_npu_demo_binaries/detect_demo_picture$ sudo cp -arf lib/libnn_detect.so /usr/lib/.
khadas@Khadas:~/hussain/aml_npu_demo_binaries/detect_demo_picture$ sudo cp -arf lib/libnn_yolo_tiny.so /usr/lib/.
  1. Test the yolo-v3-tiny using ./detect_demo_x11 -m 3
    It gives the following error.
khadas@Khadas:~/hussain/aml_npu_demo_binaries/detect_demo_picture$ ./detect_demo_x11 -m 3 -w 416 -h 416 -p ~/hussain/img/1920x1056/dog_1920x1056.jpg 
W Detect_api:[det_set_log_level:19]Set log level=1
W Detect_api:[det_set_log_level:21]output_format not support Imperfect, default to DET_LOG_TERMINAL
W Detect_api:[det_set_log_level:26]Not exist VSI_NN_LOG_LEVEL, Setenv set_vsi_log_error_level
det_set_log_config Debug
Segmentation fault
khadas@Khadas:~/hussain/aml_npu_demo_binaries/detect_demo_picture$ ./detect_demo_x11 -m 3 -p ~/hussain/img/1920x1056/dog_1920x1056.jpg 
W Detect_api:[det_set_log_level:19]Set log level=1
W Detect_api:[det_set_log_level:21]output_format not support Imperfect, default to DET_LOG_TERMINAL
W Detect_api:[det_set_log_level:26]Not exist VSI_NN_LOG_LEVEL, Setenv set_vsi_log_error_level
det_set_log_config Debug
Segmentation fault
khadas@Khadas:~/hussain/aml_npu_demo_binaries/detect_demo_picture$ ./detect_demo_x11 -m 3 -p ~/hussain/img/416/dog_416.jpg 
W Detect_api:[det_set_log_level:19]Set log level=1
W Detect_api:[det_set_log_level:21]output_format not support Imperfect, default to DET_LOG_TERMINAL
W Detect_api:[det_set_log_level:26]Not exist VSI_NN_LOG_LEVEL, Setenv set_vsi_log_error_level
det_set_log_config Debug
Segmentation fault
khadas@Khadas:~/hussain/aml_npu_demo_binaries/detect_demo_picture$ 

while with original libnn_yolo_tiny.so and yolotiny_88.nb it gives the correct results. Can you please guide me how to fix it?
Thanks
@Frank @numbqq

@enggsajjad I suggest finding the code that reports the segfault by breaking points. All code is open source, I can’t help you with every problem.

1 Like

Yes, That is what I am doing at the moment. Thanks for the help!