Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

Code Block
LIBS+=-lOpenVX -lOpenVXU -lCLC -lVSC -lGAL -ljpeg -lovxlib

...

3. Example flow of the program build and run

Unzipped

View file
namevnn_post_process.zip
and
View file
nameMakefile.zip
then placed them in ~/c3v/Models/yolov8s-detection/wksp/yolov8s-detection_uint8_nbg_unify Folder. And set the relevant VIVIANTE_ SDK_ DIR and TOOLCHAIN can complete the compilation of the appThe brief folder of the project is like this:

...

3.1. build in c3v

If you want to build the project in c3v directly, please modify these contents of Makefile:

Code Block
BIN=yolov8s_sample 
-detection-uint8
# 2.build in c3v
NN_SDK_DIR=Path to NN SDK directory
TOOLCHAIN=Path to toolchain directory

NN_SDK_INC=$(NN_SDK_DIR)/include
NN_SDK_LIB=$(NN_SDK_DIR)/lib

# 1.cross compile
#CROSS_COMPILE=$(TOOLCHAIN)/aarch64-none-linux-gnu-
#CC=$(CROSS_COMPILE)gcc
#CXX=$(CROSS_COMPILE)g++

# 2.build in c3v
#CC=gcc
#CXX=g++

CFLAGS=-Wall -O3

INCLUDE += -I$(NN_SDK_INC) -I$(NN_SDK_INC)/HAL -I$(NN_SDK_INC)/ovxlib -I$(NN_SDK_INC)/jpeg
LIBS += -L$(NN_SDK_LIB) -L./ -L$(STD_LOG_INC)
LIBS += -lOpenVX -lOpenVXU -lOpenVX -lCLC -lVSC -lGAL -ljpeg -lovxlib -lm
LIBS += -lNNArchPerf -lArchModelSw
LIBS += -lstdc++ -ldl -lpthread -lgcc_s

CFLAGS += $(INCLUDE) -fPIC
CFLAGS += -Wno-unused-variable -Wno-unused-function -Wno-unused-but-set-variable

SRCS=${wildcard *.c}
SRCS+=${wildcard *.cpp}

OBJS=$(addsuffix .o, $(basename $(SRCS)))

.SUFFIXES: .hpp .cpp .c 

.cpp.o:
	$(CXX) $(CFLAGS) -std=c++11 -c $<

.c.o:
	$(CC) $(CFLAGS) -c $<

all: $(BIN)

$(BIN): $(OBJS)
	$(CC) $(CFLAGS) $(LFLAGS) $(OBJS) -o $@ $(LIBS) 
	rm -rf *.o

clean:
	rm -rf *.o
	rm -rf $(BIN) $(LIB)
	rm -rf *~

3. Running on the C3V Linux

Insmod to kernel

Code Block
insmod ./galcore.ko
[14358.019373] galcore f8140000.galcore: NPU get power success
[14358.019458] galcore f8140000.galcore: galcore irq number is 44
[14358.020542] galcore f8140000.galcore: NPU clock: 900000000
[14358.026015] Galcore version 6.4.15.9.700103

Copy the application and related libraries into C3V Linux and run:

Code Block
./yolov8s_sample/usr
CC=gcc
CXX=g++

then copy the whole folder yolov8s-detection_uint8_nbg_unify to the c3v Linux system. Then using make to compile the project.

Code Block
cd /sample/yolov8s-detection_uint8_nbg_unify
make -j

After compilation, you can see the corresponding application program:yolov8s-detection-uint8.

You can run the application directly on c3v:

The param1 is the network_binary.nb file that converts from the acuity toolkit.

The param2 is the image that is for detection. Please prepare the image file which format is jpg and the pixel size is 640 * 640.

Code Block
./yolov8s-detection-uint8 ./network_binary.nb ./input.jpg

The result is like this:

Code Block
/mnt/yolov8s-detection_uint8_nbg_unify # ./yolov8s-detection-uint8 ./network_binary.nb
./input.jpg
Create Neural Network: 28ms or 28375us
Verify...
Verify Graph: 21ms or 21116us
Start run graph [1] times...
Run the 1 time: 57.55ms or 57548.24us
vxProcessGraph execution time:
Total   58.05ms or 58053.36us
Average 58.05ms or 58053.36us
obj: L: 0 P:0.93, [(0, 42) - (200, 599)]
obj: L: 0 P:0.91, [(309, 279) - (180, 361)]
obj: L: 0 P:0.58, [(344, 171) - (170, 301)]

3.2. cross-compile in Linux

If you want to build the project in host Linux, please modify these contents of Makefile:

Code Block
BIN=yolov8s-detection-uint8
# 1.cross compile
NN_SDK_DIR=Path to NN SDK directory
TOOLCHAIN=Path to toolchain directory
CROSS_COMPILE=$(TOOLCHAIN)/aarch64-none-linux-gnu-
CC=$(CROSS_COMPILE)gcc
CXX=$(CROSS_COMPILE)g++

you need to set the right path of NN_SDK_DIR and TOOLCHAIN

NN_SDK_DIR: The path to NPU SDK

TOOLCHAIN: The cross-compile toolchain path. which format may be like this:

Code Block
TOOLCHAIN=/pub/toolchain/crossgcc/gcc-arm-9.2-2019.12-x86_64-aarch64-none-linux-gnu/bin

then using make to compile the project.

Code Block
make

Copy the application, network_binary.nb file and related libraries into C3V Linux and run:

The param1 is the nb file that converts from the acuity toolkit.

The param2 is the image that is for detection. Please prepare the image file which format is jpg and the pixel size is 640 * 640.

Code Block
./yolov8s-detection-uint8 ./network_binary.nb ./input.jpg

The result is like this:

Code Block
/mnt/yolov8s-detection_uint8_nbg_unify # ./yolov8s_sample-detection-uint8 ./network_binary.nb
../input.jpg
Create Neural Network: 28ms or 28375us
Verify...
Verify Graph: 21ms or 21116us
Start run graph [1] times...
Run the 1 time: 57.55ms or 57548.24us
vxProcessGraph execution time:
Total   58.05ms or 58053.36us
Average 58.05ms or 58053.36us
obj: L: 0 P:0.93, [(0, 42) - (200, 599)]
obj: L: 0 P:0.91, [(309, 279) - (180, 361)]
obj: L: 0 P:0.58, [(344, 171) - (170, 301)]