Implementación de YOLOv5 en C++ para Windows (usando LibTorch)
prefacio
Debido a las necesidades del proyecto, queremos implementar YOLOv5 en programas C++ en Windows. Este artículo usa LibTorch para implementar YOLOv5 en Visual Studios 2019.
contenido de preparación
Primero, descargamos y preparamos el contenido requerido:
- Estudios Visuales 2019
- LibTorch (para corresponder a su versión de Pytorch, se pueden usar las versiones Debug y Release, y se puede unificar con la versión posterior de C++)
- OpenCV
- Libtorch-Yolov5
- Hacer
- CUDA y cuDNN
Entorno de configuración
Configure el entorno OpenCV y LibTorch, el contenido de configuración de los dos es aproximadamente el mismo (la siguiente dirección de ruta se ajusta de acuerdo con la ruta de instalación personal).
-
Configure las variables de entorno del sistema:
agregue las rutas de OpenCV y LibTorch respectivamente en las variables de entorno del sistema
Opencv:
D:\opencv\build\x64\vc15\bin
Libtorch:
D:\libtorch\lib -
VS2019 crea un nuevo proyecto vacío de C++;
-
Propiedades del proyecto -> Directorios VC++ -> Incluir directorios:
Opencv:
D:\opencv\build\include
D:\opencv\build\include\opencv2
Libtorch:
D:\libtorch\include
D:\libtorch\include\torch\csrc\ api\incluye -
Propiedades del proyecto -> Directorios de VC++ -> Directorios de biblioteca:
Opencv:
D:\opencv\build\x64\vc15\lib
Libtorch:
D:\libtorch\lib -
Propiedades del proyecto -> Enlazador -> Entrada -> Dependencias adicionales:
Opencv: Coloque el archivo .lib
en el archivo D:\opencv\build\x64\vc15\lib en las dependencias adicionales, dos versiones y la versión de su proyecto Consistente: opencv_world452d. lib( Debug ) opencv_world452.lib( Release ) Libtorch: Coloque todos los archivos .lib en D:\libtorch\lib en las dependencias adicionales. -
Propiedades del proyecto -> C/C++ -> Directorios de inclusión adicionales:
D:\opencv\build\include
D:\libtorch\include
D:\libtorch\include\torch\csrc\api\include -
Propiedades del proyecto -> C/C++ -> Comprobación general de SDL a No
-
Propiedades del proyecto -> C/C++ -> Idioma -> Conforme al modo Conforme al modo Cambiar a No
-
Propiedades del proyecto -> Depurar -> Entorno:
Opencv:
D:\opencv\build\x64\vc15\lib;
Libtorch:
D:\libtorch\lib; -
Pruebe OpenCV:
ejecute el siguiente código para verificar si OpenCV está configurado correctamente:#include <opencv2/opencv.hpp> int main() { cv::Mat img = cv::imread("图片路径"); cv::imshow("", img); cv::waitKey(0); return 0; }
-
Pruebe LibTorch:
ejecute el siguiente código para verificar que LibTorch esté configurado correctamente:#include <torch/torch.h> #include <iostream> int main() { std::cout << "cuda::is_available():" << torch::cuda::is_available() << std::endl; torch::Tensor tensor = torch::rand({ 3, 4 }); std::cout << tensor << std::endl; }
compilar
- Abra CMakeLists.txt en Libtorch-Yolov5, indique la ruta de OpenCV y LibTorch en las siguientes dos líneas:
set(OpenCV_DIR D:/opencv/build)
set(Torch_DIR D:/libtorch/share/cmake/Torch/) - abrir cmd
mkdir build # 建立build文件夹 cd build # 进入build文件夹 cmake .. # 编译
Detección YOLOv5
- Cambie el nombre de categoría en coco.names en D:/libtorch-yolov5/weights a su propio nombre de categoría de conjunto de datos, y el archivo de peso entrenado se puede colocar en esta carpeta (el archivo de peso .pt primero usa export.py de yolov5 en un .torchscript archivo .pt);
- Los archivos en D:/libtorch-yolov5/src son la función de detección detector.cpp y la función principal main.cpp, y el contenido específico se puede cambiar según las necesidades individuales.
Posibles problemas
- No se puede abrir el archivo fuente opencv2/opencv.hpp o torch/torch.h: el entorno no está bien configurado.
- Los archivos OpenCV o LibTorch no se pueden encontrar durante la compilación: compruebe si la dirección de la ruta en CMakeLists.txt se completó correctamente, preste atención a la dirección de la barra inclinada, si hay símbolos de comentario y si se agrega a la variable de entorno del sistema.
- No se encontró CUDA al compilar: CUDA no se instaló correctamente o no se agregó a las variables de entorno del sistema.
- Velocidad de inferencia lenta o carga de modelo lenta: compruebe si la versión de pytorch y la versión de CUDA son correctas.