Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .gitmodules
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
[submodule "darknet"]
path = darknet
url = https://github.com/leggedrobotics/darknet
url = https://github.com/AlexeyAB/darknet.git
2 changes: 1 addition & 1 deletion darknet
Submodule darknet updated 1267 files
195 changes: 141 additions & 54 deletions darknet_ros/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -6,35 +6,89 @@ set(CMAKE_CXX_STANDARD 11)
set(CMAKE_C_FLAGS "-Wall -Wno-unused-result -Wno-unknown-pragmas -Wno-unused-variable -Wfatal-errors -fPIC ${CMAKE_C_FLAGS}")
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)

enable_language(C)
enable_language(CXX)

# Define path of darknet folder here.
find_path(DARKNET_PATH
NAMES "README.md"
HINTS "${CMAKE_CURRENT_SOURCE_DIR}/../darknet/")
message(STATUS "Darknet path dir = ${DARKNET_PATH}")
add_definitions(-DDARKNET_FILE_PATH="${DARKNET_PATH}")

#Darknet extra modules
set(CMAKE_MODULE_PATH "${DARKNET_PATH}/cmake/Modules/" ${CMAKE_MODULE_PATH})

# 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_30,code=sm_30
-gencode arch=compute_35,code=sm_35
-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
-gencode arch=compute_62,code=sm_62
)
add_definitions(-DGPU)
# Get CUDA Compute capability with modified script from internet
set(CUDAFILE ${CMAKE_CURRENT_SOURCE_DIR}/scripts/check_cuda.cu)
set(OUTPUTFILE ${CMAKE_CURRENT_SOURCE_DIR}/scripts/cuda_check)
# Compile cuda arch check script
execute_process(COMMAND nvcc -lcuda ${CUDAFILE} -o ${OUTPUTFILE})
execute_process(COMMAND ${OUTPUTFILE}
RESULT_VARIABLE CUDA_RETURN_CODE
OUTPUT_VARIABLE GENCODE)
#Check correct architectures and capabilities
if(${CUDA_RETURN_CODE} EQUAL 0)
set(CUDA_SUCCESS "TRUE")
else()
message(Warning"${GENCODE}. Forcing darknet_ros without CUDA")
set(CUDA_SUCCESS "FALSE")
endif()
#remove cuda_check binary
execute_process(COMMAND rm -f ${OUTPUTFILE})
#Config CUDA
if (${CUDA_SUCCESS})
set(
CUDA_NVCC_FLAGS
${CUDA_NVCC_FLAGS};
-O3
#-gencode arch=compute_30,code=sm_30 deprecated for CUDA9+
#-gencode arch=compute_35,code=sm_35 deprecated for CUDA9+
# -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
# -gencode arch=compute_62,code=sm_62
${GENCODE} # Force to compile to installed GPUs Architectures
)
message(STATUS "CUDA Architecture: ${GENCODE}")
message(STATUS "CUDA Version: ${CUDA_VERSION_STRING}")
message(STATUS "CUDA Version: ${CUDA_VERSION_STRINGS}")
message(STATUS "CUDA Libararies: ${CUDA_LIBRARIES}")
add_definitions(-DGPU)
else()
list(APPEND LIBRARIES "m")
endif()
else()
list(APPEND LIBRARIES "m")
endif()

# Find CUDNN
if(CUDA_SUCCESS)
find_package(CUDNN)
if (CUDNN_FOUND)
message(STATUS "CUDNN Version: ${CUDNN_VERSION_STRINGS}")
message(STATUS "CUDNN Libararies: ${CUDNN_LIBRARIES}")
set(ADDITIONAL_CXX_FLAGS "${ADDITIONAL_CXX_FLAGS} -DCUDNN")
# ENABLE CUDNN_HALF
if ( "-gencode arch=compute_70,code=sm_70" IN_LIST CUDA_NVCC_FLAGS OR
"-gencode arch=compute_72,code=sm_72" IN_LIST CUDA_NVCC_FLAGS OR
"-gencode arch=compute_75,code=sm_75" IN_LIST CUDA_NVCC_FLAGS OR
"-gencode arch=compute_80,code=sm_80" IN_LIST CUDA_NVCC_FLAGS OR
"-gencode arch=compute_86,code=sm_86" IN_LIST CUDA_NVCC_FLAGS)
set(ENABLE_CUDNN_HALF "TRUE" CACHE BOOL "Enable CUDNN Half precision" FORCE)
message(STATUS "Your setup supports half precision (CUDA_ARCHITECTURES >= 70)")
else()
set(ENABLE_CUDNN_HALF "FALSE" CACHE BOOL "Enable CUDNN Half precision" FORCE)
message(STATUS "Your setup does not support half precision (it requires CUDA_ARCHITECTURES >= 70)")
endif()
endif()
endif()


# Find X11
message ( STATUS "Searching for X11..." )
find_package ( X11 REQUIRED )
Expand Down Expand Up @@ -65,6 +119,15 @@ find_package(catkin REQUIRED
add_definitions(-DOPENCV)
add_definitions(-O4 -g)

# Enable CUDNN in darknet
if(CUDNN_FOUND)
add_definitions(-DCUDNN)
# Enable in darknet
if(ENABLE_CUDNN_HALF)
add_definitions(-DCUDNN)
endif()
endif()

catkin_package(
INCLUDE_DIRS
include
Expand All @@ -86,60 +149,66 @@ catkin_package(
include_directories(
${DARKNET_PATH}/src
${DARKNET_PATH}/include
${DARKNET_PATH}/3rdparty/stb/include
include
${Boost_INCLUDE_DIRS}
${catkin_INCLUDE_DIRS}
)

set(PROJECT_LIB_FILES
src/YoloObjectDetector.cpp src/image_interface.cpp
src/yolo_object_detector_node.cpp
)

set(DARKNET_CORE_FILES
${DARKNET_PATH}/src/activation_layer.c ${DARKNET_PATH}/src/im2col.c
${DARKNET_PATH}/src/activations.c ${DARKNET_PATH}/src/image.c
${DARKNET_PATH}/src/avgpool_layer.c ${DARKNET_PATH}/src/layer.c
${DARKNET_PATH}/src/batchnorm_layer.c ${DARKNET_PATH}/src/list.c
${DARKNET_PATH}/src/blas.c ${DARKNET_PATH}/src/local_layer.c
${DARKNET_PATH}/src/box.c ${DARKNET_PATH}/src/lstm_layer.c
${DARKNET_PATH}/src/col2im.c ${DARKNET_PATH}/src/matrix.c
${DARKNET_PATH}/src/connected_layer.c ${DARKNET_PATH}/src/maxpool_layer.c
${DARKNET_PATH}/src/convolutional_layer.c ${DARKNET_PATH}/src/network.c
${DARKNET_PATH}/src/cost_layer.c ${DARKNET_PATH}/src/normalization_layer.c
${DARKNET_PATH}/src/crnn_layer.c ${DARKNET_PATH}/src/option_list.c
${DARKNET_PATH}/src/crop_layer.c ${DARKNET_PATH}/src/parser.c
${DARKNET_PATH}/src/cuda.c ${DARKNET_PATH}/src/region_layer.c
${DARKNET_PATH}/src/data.c ${DARKNET_PATH}/src/reorg_layer.c
${DARKNET_PATH}/src/deconvolutional_layer.c ${DARKNET_PATH}/src/rnn_layer.c
${DARKNET_PATH}/src/demo.c ${DARKNET_PATH}/src/route_layer.c
${DARKNET_PATH}/src/detection_layer.c ${DARKNET_PATH}/src/shortcut_layer.c
${DARKNET_PATH}/src/dropout_layer.c ${DARKNET_PATH}/src/softmax_layer.c
${DARKNET_PATH}/src/gemm.c ${DARKNET_PATH}/src/tree.c
${DARKNET_PATH}/src/gru_layer.c ${DARKNET_PATH}/src/utils.c
${DARKNET_PATH}/src/upsample_layer.c ${DARKNET_PATH}/src/logistic_layer.c
${DARKNET_PATH}/src/l2norm_layer.c ${DARKNET_PATH}/src/yolo_layer.c
${DARKNET_PATH}/src/iseg_layer.c ${DARKNET_PATH}/src/image_opencv.cpp

${DARKNET_PATH}/examples/art.c ${DARKNET_PATH}/examples/lsd.c
${DARKNET_PATH}/examples/nightmare.c ${DARKNET_PATH}/examples/instance-segmenter.c
${DARKNET_PATH}/examples/captcha.c ${DARKNET_PATH}/examples/regressor.c
${DARKNET_PATH}/examples/cifar.c ${DARKNET_PATH}/examples/rnn.c
${DARKNET_PATH}/examples/classifier.c ${DARKNET_PATH}/examples/segmenter.c
${DARKNET_PATH}/examples/coco.c ${DARKNET_PATH}/examples/super.c
${DARKNET_PATH}/examples/darknet.c ${DARKNET_PATH}/examples/tag.c
${DARKNET_PATH}/examples/detector.c ${DARKNET_PATH}/examples/yolo.c
${DARKNET_PATH}/examples/go.c
${DARKNET_PATH}/src/activation_layer.c ${DARKNET_PATH}/src/activations.c
${DARKNET_PATH}/src/art.c ${DARKNET_PATH}/src/avgpool_layer.c
${DARKNET_PATH}/src/batchnorm_layer.c ${DARKNET_PATH}/src/blas.c
${DARKNET_PATH}/src/box.c ${DARKNET_PATH}/src/captcha.c
${DARKNET_PATH}/src/cifar.c ${DARKNET_PATH}/src/classifier.c
${DARKNET_PATH}/src/coco.c ${DARKNET_PATH}/src/col2im.c
${DARKNET_PATH}/src/compare.c ${DARKNET_PATH}/src/connected_layer.c
${DARKNET_PATH}/src/conv_lstm_layer.c ${DARKNET_PATH}/src/convolutional_layer.c
${DARKNET_PATH}/src/cost_layer.c ${DARKNET_PATH}/src/cpu_gemm.c
${DARKNET_PATH}/src/crnn_layer.c ${DARKNET_PATH}/src/crop_layer.c
${DARKNET_PATH}/src/dark_cuda.c ${DARKNET_PATH}/src/data.c
${DARKNET_PATH}/src/deconvolutional_layer.c ${DARKNET_PATH}/src/detection_layer.c
${DARKNET_PATH}/src/demo.c
${DARKNET_PATH}/src/detector.c ${DARKNET_PATH}/src/dice.c
${DARKNET_PATH}/src/dropout_layer.c ${DARKNET_PATH}/src/gaussian_yolo_layer.c
${DARKNET_PATH}/src/gemm.c ${DARKNET_PATH}/src/getopt.c
${DARKNET_PATH}/src/gettimeofday.c ${DARKNET_PATH}/src/go.c
${DARKNET_PATH}/src/gru_layer.c ${DARKNET_PATH}/src/http_stream.cpp
${DARKNET_PATH}/src/im2col.c ${DARKNET_PATH}/src/image.c
${DARKNET_PATH}/src/image_opencv.cpp ${DARKNET_PATH}/src/layer.c
${DARKNET_PATH}/src/list.c ${DARKNET_PATH}/src/local_layer.c
${DARKNET_PATH}/src/lstm_layer.c ${DARKNET_PATH}/src/matrix.c
${DARKNET_PATH}/src/maxpool_layer.c ${DARKNET_PATH}/src/network.c
${DARKNET_PATH}/src/nightmare.c ${DARKNET_PATH}/src/normalization_layer.c
${DARKNET_PATH}/src/option_list.c ${DARKNET_PATH}/src/parser.c
${DARKNET_PATH}/src/region_layer.c ${DARKNET_PATH}/src/reorg_layer.c
${DARKNET_PATH}/src/reorg_old_layer.c ${DARKNET_PATH}/src/rnn.c
${DARKNET_PATH}/src/rnn_layer.c ${DARKNET_PATH}/src/rnn_vid.c
${DARKNET_PATH}/src/route_layer.c ${DARKNET_PATH}/src/representation_layer.c
${DARKNET_PATH}/src/sam_layer.c ${DARKNET_PATH}/src/scale_channels_layer.c
${DARKNET_PATH}/src/shortcut_layer.c ${DARKNET_PATH}/src/softmax_layer.c
${DARKNET_PATH}/src/super.c ${DARKNET_PATH}/src/swag.c
${DARKNET_PATH}/src/tag.c ${DARKNET_PATH}/src/tree.c
${DARKNET_PATH}/src/upsample_layer.c ${DARKNET_PATH}/src/utils.c
${DARKNET_PATH}/src/voxel.c ${DARKNET_PATH}/src/writing.c
${DARKNET_PATH}/src/yolo.c ${DARKNET_PATH}/src/yolo_layer.c
)

set(DARKNET_CUDA_FILES
${DARKNET_PATH}/src/activation_kernels.cu ${DARKNET_PATH}/src/crop_layer_kernels.cu
${DARKNET_PATH}/src/avgpool_layer_kernels.cu ${DARKNET_PATH}/src/deconvolutional_kernels.cu
${DARKNET_PATH}/src/blas_kernels.cu ${DARKNET_PATH}/src/dropout_layer_kernels.cu
${DARKNET_PATH}/src/col2im_kernels.cu ${DARKNET_PATH}/src/im2col_kernels.cu
${DARKNET_PATH}/src/convolutional_kernels.cu ${DARKNET_PATH}/src/maxpool_layer_kernels.cu
${DARKNET_PATH}/src/activation_kernels.cu ${DARKNET_PATH}/src/avgpool_layer_kernels.cu
${DARKNET_PATH}/src/blas_kernels.cu ${DARKNET_PATH}/src/col2im_kernels.cu
${DARKNET_PATH}/src/convolutional_kernels.cu ${DARKNET_PATH}/src/crop_layer_kernels.cu
${DARKNET_PATH}/src/deconvolutional_kernels.cu ${DARKNET_PATH}/src/dropout_layer_kernels.cu
${DARKNET_PATH}/src/im2col_kernels.cu ${DARKNET_PATH}/src/maxpool_layer_kernels.cu
${DARKNET_PATH}/src/network_kernels.cu
)

if (CUDA_FOUND)
if (CUDA_SUCCESS)

link_directories(
${CUDA_TOOLKIT_ROOT_DIR}/lib64
Expand All @@ -157,6 +226,14 @@ if (CUDA_FOUND)
curand
)

if(CUDNN_FOUND)
target_link_libraries(${PROJECT_NAME}_lib CuDNN::CuDNN)
target_compile_definitions(${PROJECT_NAME}_lib PUBLIC -DCUDNN)
if(ENABLE_CUDNN_HALF)
target_compile_definitions(${PROJECT_NAME}_lib PUBLIC -DCUDNN_HALF)
endif()
endif()

cuda_add_executable(${PROJECT_NAME}
src/yolo_object_detector_node.cpp
)
Expand Down Expand Up @@ -240,6 +317,15 @@ if (NOT EXISTS "${FILE}")
execute_process(COMMAND wget -q https://github.com/leggedrobotics/darknet_ros/releases/download/1.1.4/yolov3.weights -P ${PATH})
endif()

#Download yolov4.weights

set(FILE "${PATH}/yolov4.weights")
message(STATUS "Checking and downloading yolov4.weights if needed ...")
if (NOT EXISTS "${FILE}")
message(STATUS "... file does not exist. Downloading now ...")
execute_process(COMMAND wget -q https://github.com/AlexeyAB/darknet/releases/download/darknet_yolo_v3_optimal/yolov4.weights -P ${PATH})
endif()

#############
## Testing ##
#############
Expand Down Expand Up @@ -280,3 +366,4 @@ if (cmake_clang_tools_FOUND)
CF_WERROR
)
endif (cmake_clang_tools_FOUND)

2 changes: 1 addition & 1 deletion darknet_ros/config/ros.yaml
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
subscribers:

camera_reading:
topic: /camera/rgb/image_raw
topic: /cv_camera/image_raw
queue_size: 1

actions:
Expand Down
90 changes: 90 additions & 0 deletions darknet_ros/config/yolov4-tiny.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,90 @@
yolo_model:

config_file:
name: yolov4-tiny.cfg
weight_file:
name: yolov4-tiny.weights
threshold:
value: 0.3
detection_classes:
names:
- person
- bicycle
- car
- motorbike
- aeroplane
- bus
- train
- truck
- boat
- traffic light
- fire hydrant
- stop sign
- parking meter
- bench
- bird
- cat
- dog
- horse
- sheep
- cow
- elephant
- bear
- zebra
- giraffe
- backpack
- umbrella
- handbag
- tie
- suitcase
- frisbee
- skis
- snowboard
- sports ball
- kite
- baseball bat
- baseball glove
- skateboard
- surfboard
- tennis racket
- bottle
- wine glass
- cup
- fork
- knife
- spoon
- bowl
- banana
- apple
- sandwich
- orange
- broccoli
- carrot
- hot dog
- pizza
- donut
- cake
- chair
- sofa
- pottedplant
- bed
- diningtable
- toilet
- tvmonitor
- laptop
- mouse
- remote
- keyboard
- cell phone
- microwave
- oven
- toaster
- sink
- refrigerator
- book
- clock
- vase
- scissors
- teddy bear
- hair drier
- toothbrush
Loading