环境:
openCv:4.8.0
torch: 2.0.0
cuda:cuda_11.7.r11.7
遇到问题1:
(tools) rog@i7:~/my_file/obj/ultralytics/examples/YOLOv8-CPP-Inference/build$ ./Yolov8CPPInference
Running on CUDA
[ WARN:0@0.039] global net_impl.cpp:178 setUpNet DNN module was not built with CUDA backend; switching to CPU
[ERROR:0@0.039] global net_impl.cpp:1162 getLayerShapesRecursively OPENCV/DNN: [Reshape]:(onnx_node!/model.22/dfl/Reshape): getMemoryShapes() throws exception. inputs=1 outputs=1/1 blobs=0
[ERROR:0@0.039] global net_impl.cpp:1168 getLayerShapesRecursively input[0] = [ 1 64 6300 ]
[ERROR:0@0.039] global net_impl.cpp:1172 getLayerShapesRecursively output[0] = [ ]
[ERROR:0@0.039] global net_impl.cpp:1178 getLayerShapesRecursively Exception message: OpenCV(4.9.0-dev) /home/rog/my_file/other_LIB/my_opencv/4.8.0/opencv/modules/dnn/src/layers/reshape_layer.cpp:109: error: (-215:Assertion failed) total(srcShape, srcRange.start, srcRange.end) == maskTotal in function 'computeShapeByReshapeMask'
terminate called after throwing an instance of 'cv::Exception'
what(): OpenCV(4.9.0-dev) /home/rog/my_file/other_LIB/my_opencv/4.8.0/opencv/modules/dnn/src/layers/reshape_layer.cpp:109: error: (-215:Assertion failed) total(srcShape, srcRange.start, srcRange.end) == maskTotal in function 'computeShapeByReshapeMask'
Aborted (core dumped)
cmake:
cmake_minimum_required(VERSION 3.5)
project(Yolov8CPPInference VERSION 0.1)
set(CMAKE_INCLUDE_CURRENT_DIR ON)
# CUDA
set(CUDA_TOOLKIT_ROOT_DIR "/usr/local/cuda")
find_package(CUDA 11 REQUIRED)
set(CMAKE_CUDA_STANDARD 11)
set(CMAKE_CUDA_STANDARD_REQUIRED ON)
# !CUDA
#添加OpenCV的目录 opencv目录去你编译安装的文件夹下找OpenCVConfig.cmake把该文件所在目录加进来就行了
set(CMAKE_PREFIX_PATH /home/rog/my_file/other_LIB/my_opencv/4.8.0/opencv/my_lib_x86/lib/cmake/opencv4) #×××××××××××
#寻找OpenCV库
FIND_PACKAGE(OpenCV 4.8.0 REQUIRED)
INCLUDE_DIRECTORIES(${OpenCV_INCLUDE_DIRS})
#打印调试信息
MESSAGE(STATUS "Project: ${PROJECT_NAME}")
MESSAGE(STATUS "OpenCV library status:")
MESSAGE(STATUS "version: ${OpenCV_VERSION}")
MESSAGE(STATUS "libraries: ${OpenCV_LIBS}")
MESSAGE(STATUS "include path: ${OpenCV_INCLUDE_DIRS}")
message(STATUS "version:${OpenCV_VERSION}")
# !OpenCV
set(PROJECT_SOURCES
main.cpp
inference.h
inference.cpp
)
add_executable(Yolov8CPPInference ${PROJECT_SOURCES})
target_link_libraries(Yolov8CPPInference ${OpenCV_LIBS})
问题1解决:
问题很简单,就是onnx模型导出的imgsz参数不对。修改后的参数如下
from ultralytics import YOLO
# Load a YOLOv8 model
model = YOLO("yolov8s.pt")
# Export the model
model.export(format="onnx", opset=12,dynamic=False,imgsz=[480,640])
遇到问题2:
(demoenv) rog@i7:~/my_file/obj/my_yolo_v8/examples/YOLOv8-CPP-Inference/build$ ./Yolov8CPPInference
[ERROR:0] global ./modules/dnn/src/onnx/onnx_importer.cpp (718) handleNode DNN/ONNX: ERROR during processing node with 2 inputs and 1 outputs: [Add]:(/model.22/Add_output_0)
terminate called after throwing an instance of 'cv::Exception'
what(): OpenCV(4.5.4) ./modules/dnn/src/onnx/onnx_importer.cpp:739: error: (-2:Unspecified error) in function 'handleNode'
> Node [Add]:(/model.22/Add_output_0) parse error: OpenCV(4.5.4) ./modules/dnn/src/onnx/onnx_importer.cpp:1067: error: (-215:Assertion failed) blob_0.size == blob_1.size in function 'parseBias'
>
Aborted (core dumped)
问题2解决:
原来的openCV版本是4.5.4 更新到4.8.0就可以