赞
踩
本机已经安装GPU显卡,并下载了Cuda、Cudnn。GPU配置为1660Ti
1.darknet编译
下载darknet:
git clone https://github.com/AlexeyAB/darknet.git
修改相应的makefile文件
主要的修改部分:
GPU=1 CUDNN=1 CUDNN_HALF=0 OPENCV=1 AVX=0 OPENMP=0 LIBSO=0 ZED_CAMERA=0 ZED_CAMERA_v2_8=0 # set GPU=1 and CUDNN=1 to speedup on GPU # set CUDNN_HALF=1 to further speedup 3 x times (Mixed-precision on Tensor Cores) GPU: Volta, Xavier, Turing, Ampere, Ada and higher # set AVX=1 and OPENMP=1 to speedup on CPU (if error occurs then set AVX=0) # set ZED_CAMERA=1 to enable ZED SDK 3.0 and above # set ZED_CAMERA_v2_8=1 to enable ZED SDK 2.X USE_CPP=0 DEBUG=0 #ARCH= -gencode arch=compute_50,code=[sm_50,compute_50] \ # -gencode arch=compute_52,code=[sm_52,compute_52] \ # -gencode arch=compute_61,code=[sm_61,compute_61] OS := $(shell uname) # Naming confusion with recent RTX cards. # "NVIDIA Quadro RTX x000" and T1000/Tx00 are Turing Architecture Family with Compute Capability of 7.5 # "NVIDIA RTX Ax000" are Ampere Architecture Family with Compute Capability of 8.6 # NVIDIA "RTX x000 Ada" are Ada Lovelace Architecture Family with Compute Capability of 8.9 # Source https://developer.nvidia.com/cuda-gpus # KEPLER, GeForce GTX 770, GTX 760, GT 740 # ARCH= -gencode arch=compute_30,code=sm_30 # MAXWELL, GeForce GTX 950, 960, 970, 980, 980 Ti, "GTX" Titan X # ARCH= -gencode arch=compute_52,code=sm_52 # Jetson TX1, Tegra X1, DRIVE CX, DRIVE PX, Jetson Nano (2GB, 4GB) # ARCH= -gencode arch=compute_53,code=[sm_53,compute_53] # GP100/Tesla P100 - DGX-1 # ARCH= -gencode arch=compute_60,code=sm_60 # PASCAL, GTX 10x0, GTX 10x0 Ti, Titan Xp, Tesla P40, Tesla P4 ARCH= -gencode arch=compute_61,code=[sm_61,compute_61] # For Jetson TX2, Jetson Nano TX2 or Drive-PX2 uncomment: # ARCH= -gencode arch=compute_62,code=[sm_62,compute_62] # Tesla V100 # ARCH= -gencode arch=compute_70,code=[sm_70,compute_70] # Jetson XAVIER, XAVIER NX # ARCH= -gencode arch=compute_72,code=[sm_72,compute_72] # GeForce Titan RTX, RTX 20x0, RTX 20x0 Ti, Quadro RTX x000, Tesla T4, XNOR Tensor Cores # ARCH= -gencode arch=compute_75,code=[sm_75,compute_75] # Tesla A100 (GA100), DGX-A100, A30, A100, RTX 3080 # ARCH= -gencode arch=compute_80,code=[sm_80,compute_80] # GeForce RTX 30x0, 30x0 Ti, Tesla GA10x, RTX Axxxx, A2, A10, A16, A40 # ARCH= -gencode arch=compute_86,code=[sm_86,compute_86] # NOT TESTED, THEORETICAL # Jetson ORIN, ORIN NX, ORIN NANO # ARCH= -gencode arch=compute_87,code=[sm_87,compute_87] # NOT TESTED, THEORETICAL # GeForce RTX 4070 Ti, 4080, 4090, L4, L40 # ARCH= -gencode arch=compute_89,code=[sm_89,compute_89] # NOT TESTED, THEORETICAL # Nvidia H100 # ARCH= -gencode arch=compute_90,code=[sm_90,compute_90] VPATH=./src/ EXEC=darknet OBJDIR=./obj/
cd darknet
make
测试:
./darknet detect cfg/yolov3.cfg yolov3.weights data/dog.jpg
2.darknet_ros 编译
下载darknet_ros包和darknet包
darknet_ros:包
cd src
git clone https://github.com/leggedrobotics/darknet_ros
darknet包,这里darknet_ros包里有三个文件夹,直接替换其中的darknet或者删除这个文件夹:
git clone https://github.com/AlexeyAB/darknet
问题一:darknet_ros 会开始下载yolov2-tiny.weights、yolov3.weights和yolov2.weights,但国内下载太慢,可以直接去CMakelists.txt里注释掉。
解决如下:
# Download yolov2-tiny.weights set(PATH "${CMAKE_CURRENT_SOURCE_DIR}/yolo_network_config/weights") set(FILE "${PATH}/yolov2-tiny.weights") message(STATUS "Checking and downloading yolov2-tiny.weights if needed ...") if (NOT EXISTS "${FILE}") message(STATUS "... file does not exist. Downloading now ...") # execute_process(COMMAND wget -q https://github.com/leggedrobotics/darknet_ros/releases/download/1.1.4/yolov2-tiny.weights -P ${PATH}) endif() # Download yolov3.weights set(FILE "${PATH}/yolov3.weights") message(STATUS "Checking and downloading yolov3.weights if needed ...") if (NOT EXISTS "${FILE}") message(STATUS "... file does not exist. Downloading now ...") # execute_process(COMMAND wget -q https://github.com/leggedrobotics/darknet_ros/releases/download/1.1.4/yolov3.weights -P ${PATH}) endif() ############# ## Testing ## ############# if(CATKIN_ENABLE_TESTING) # Download yolov2.weights set(PATH "${CMAKE_CURRENT_SOURCE_DIR}/yolo_network_config/weights") set(FILE "${PATH}/yolov2.weights") message(STATUS "Checking and downloading yolov2.weights if needed ...") if (NOT EXISTS "${FILE}") message(STATUS "... file does not exist. Downloading now ...") # execute_process(COMMAND wget -q https://github.com/leggedrobotics/darknet_ros/releases/download/1.1.4/yolov2.weights -P ${PATH}) endif() find_package(rostest REQUIRED)
问题二:需要更改相应的gencode,具体可以参考darknet中各种显卡对应。我这里是1660Ti.
#ARCH= -gencode arch=compute_50,code=[sm_50,compute_50] \ # -gencode arch=compute_52,code=[sm_52,compute_52] \ # -gencode arch=compute_61,code=[sm_61,compute_61] OS := $(shell uname) # Naming confusion with recent RTX cards. # "NVIDIA Quadro RTX x000" and T1000/Tx00 are Turing Architecture Family with Compute Capability of 7.5 # "NVIDIA RTX Ax000" are Ampere Architecture Family with Compute Capability of 8.6 # NVIDIA "RTX x000 Ada" are Ada Lovelace Architecture Family with Compute Capability of 8.9 # Source https://developer.nvidia.com/cuda-gpus # KEPLER, GeForce GTX 770, GTX 760, GT 740 # ARCH= -gencode arch=compute_30,code=sm_30 # MAXWELL, GeForce GTX 950, 960, 970, 980, 980 Ti, "GTX" Titan X # ARCH= -gencode arch=compute_52,code=sm_52 # Jetson TX1, Tegra X1, DRIVE CX, DRIVE PX, Jetson Nano (2GB, 4GB) # ARCH= -gencode arch=compute_53,code=[sm_53,compute_53] # GP100/Tesla P100 - DGX-1 # ARCH= -gencode arch=compute_60,code=sm_60 # PASCAL, GTX 10x0, GTX 10x0 Ti, Titan Xp, Tesla P40, Tesla P4 ARCH= -gencode arch=compute_61,code=[sm_61,compute_61] # For Jetson TX2, Jetson Nano TX2 or Drive-PX2 uncomment: # ARCH= -gencode arch=compute_62,code=[sm_62,compute_62] # Tesla V100 # ARCH= -gencode arch=compute_70,code=[sm_70,compute_70] # Jetson XAVIER, XAVIER NX # ARCH= -gencode arch=compute_72,code=[sm_72,compute_72] # GeForce Titan RTX, RTX 20x0, RTX 20x0 Ti, Quadro RTX x000, Tesla T4, XNOR Tensor Cores # ARCH= -gencode arch=compute_75,code=[sm_75,compute_75] # Tesla A100 (GA100), DGX-A100, A30, A100, RTX 3080 # ARCH= -gencode arch=compute_80,code=[sm_80,compute_80] # GeForce RTX 30x0, 30x0 Ti, Tesla GA10x, RTX Axxxx, A2, A10, A16, A40 # ARCH= -gencode arch=compute_86,code=[sm_86,compute_86] # NOT TESTED, THEORETICAL # Jetson ORIN, ORIN NX, ORIN NANO # ARCH= -gencode arch=compute_87,code=[sm_87,compute_87] # NOT TESTED, THEORETICAL # GeForce RTX 4070 Ti, 4080, 4090, L4, L40 # ARCH= -gencode arch=compute_89,code=[sm_89,compute_89] # NOT TESTED, THEORETICAL # Nvidia H100 # ARCH= -gencode arch=compute_90,code=[sm_90,compute_90]
# Find CUDA find_package(CUDA QUIET) if (CUDA_FOUND) find_package(CUDA REQUIRED) message(STATUS "CUDA Version: ${CUDA_VERSION_STRINGS}") message(STATUS "CUDA Libararies: ${CUDA_LIBRARIES}") set( CUDA_NVCC_FLAGS ${CUDA_NVCC_FLAGS}; -O3 -gencode arch=compute_61,code=[sm_61,compute_61] ) add_definitions(-DGPU) else() list(APPEND LIBRARIES "m") endif()
这里使用kitti数据集:
<?xml version="1.0" encoding="utf-8"?> <launch> <!-- Console launch prefix --> <arg name="launch_prefix" default=""/> <arg name="image" default="/kitti/camera_color_left/image_raw" /> <!-- Config and weights folder. --> <arg name="yolo_weights_path" default="$(find darknet_ros)/yolo_network_config/weights"/> <arg name="yolo_config_path" default="$(find darknet_ros)/yolo_network_config/cfg"/> <!-- ROS and network parameter files --> <arg name="ros_param_file" default="$(find darknet_ros)/config/ros.yaml"/> <arg name="network_param_file" default="$(find darknet_ros)/config/yolov3.yaml"/> <!-- Load parameters --> <rosparam command="load" ns="darknet_ros" file="$(arg ros_param_file)"/> <rosparam command="load" ns="darknet_ros" file="$(arg network_param_file)"/> <!-- Start darknet and ros wrapper --> <node pkg="darknet_ros" type="darknet_ros" name="darknet_ros" output="screen" launch-prefix="$(arg launch_prefix)"> <param name="weights_path" value="$(arg yolo_weights_path)" /> <param name="config_path" value="$(arg yolo_config_path)" /> <remap from="camera/rgb/image_raw" to="$(arg image)" /> </node> <!--<node name="republish" type="republish" pkg="image_transport" output="screen" args="compressed in:=/front_camera/image_raw raw out:=/camera/image_raw" /> --> </launch>
另外需要说明一点的是从如下链接下载文件放入/darknet_ros/darknet_ros/yolo_network_config/weights文件中
https://pjreddie.com/media/files/yolov2.weights
https://pjreddie.com/media/files/yolov2-tiny.weights
https://pjreddie.com/media/files/yolov3.weights
https://pjreddie.com/media/files/yolov3-tiny.weights
下一节会学习数据集的标注。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。