From aeb15b3cb9157f5d0b2a9962e17de22560b8a1b2 Mon Sep 17 00:00:00 2001
From: AlexeyAB <alexeyab84@gmail.com>
Date: Sun, 07 Jan 2018 22:47:50 +0000
Subject: [PATCH] Detection and Tracking work well
---
src/network.h | 1 +
src/yolo_v2_class.cpp | 3 ++-
src/network_kernels.cu | 3 ++-
src/yolo_console_dll.cpp | 13 ++++++-------
src/yolo_v2_class.hpp | 3 ++-
5 files changed, 13 insertions(+), 10 deletions(-)
diff --git a/src/network.h b/src/network.h
index 49a2af2..6f4123a 100644
--- a/src/network.h
+++ b/src/network.h
@@ -64,6 +64,7 @@
#ifdef GPU
float **input_gpu;
float **truth_gpu;
+ int wait_stream;
#endif
} network;
diff --git a/src/network_kernels.cu b/src/network_kernels.cu
index 341c7f8..9ecabdf 100644
--- a/src/network_kernels.cu
+++ b/src/network_kernels.cu
@@ -51,7 +51,8 @@
fill_ongpu(l.outputs * l.batch, 0, l.delta_gpu, 1);
}
l.forward_gpu(l, state);
- cudaStreamSynchronize(get_cuda_stream());
+ if(net.wait_stream)
+ cudaStreamSynchronize(get_cuda_stream());
state.input = l.output_gpu;
}
}
diff --git a/src/yolo_console_dll.cpp b/src/yolo_console_dll.cpp
index abf4bdc..3f22eb5 100644
--- a/src/yolo_console_dll.cpp
+++ b/src/yolo_console_dll.cpp
@@ -11,10 +11,10 @@
#ifdef _WIN32
#define OPENCV
-#include "windows.h"
+//#include "windows.h"
#endif
-#define TRACK_OPTFLOW
+//#define TRACK_OPTFLOW
#include "yolo_v2_class.hpp" // imported functions from DLL
@@ -102,6 +102,7 @@
bool const save_output_videofile = false;
#ifdef TRACK_OPTFLOW
Tracker_optflow tracker_flow;
+ detector.wait_stream = true;
#endif
while (true)
@@ -185,17 +186,15 @@
auto current_image = det_image;
consumed = true;
while (current_image.use_count() > 0) {
- //std::vector<bbox_t> result;
auto result = detector.detect_resized(*current_image, frame_size, 0.24, false); // true
- //Sleep(200);
- //Sleep(50);
++fps_det_counter;
std::unique_lock<std::mutex> lock(mtx);
thread_result_vec = result;
current_image = det_image;
consumed = true;
cv_detected.notify_all();
- while (consumed) cv_pre_tracked.wait(lock);
+ if(detector.wait_stream)
+ while (consumed) cv_pre_tracked.wait(lock);
}
});
}
@@ -216,7 +215,7 @@
result_vec = tracker_flow.tracking_flow(cur_frame, result_vec); // track optical flow
#endif
- draw_boxes(cur_frame, result_vec, obj_names, 3, current_det_fps, current_cap_fps);
+ draw_boxes(cur_frame, result_vec, obj_names, 3, current_det_fps, current_cap_fps); // 3 or 16ms
//show_console_result(result_vec, obj_names);
if (output_video.isOpened() && videowrite_ready) {
diff --git a/src/yolo_v2_class.cpp b/src/yolo_v2_class.cpp
index 88d2bc1..f509d21 100644
--- a/src/yolo_v2_class.cpp
+++ b/src/yolo_v2_class.cpp
@@ -36,6 +36,7 @@
YOLODLL_API Detector::Detector(std::string cfg_filename, std::string weight_filename, int gpu_id) : cur_gpu_id(gpu_id)
{
+ wait_stream = 0;
int old_gpu_index;
#ifdef GPU
cudaGetDevice(&old_gpu_index);
@@ -172,7 +173,6 @@
YOLODLL_API std::vector<bbox_t> Detector::detect(image_t img, float thresh, bool use_mean)
{
-
detector_gpu_t &detector_gpu = *reinterpret_cast<detector_gpu_t *>(detector_gpu_ptr.get());
network &net = detector_gpu.net;
int old_gpu_index;
@@ -184,6 +184,7 @@
//std::cout << "net.gpu_index = " << net.gpu_index << std::endl;
//float nms = .4;
+ net.wait_stream = wait_stream; // 1 - wait CUDA-stream, 0 - not to wait
image im;
im.c = img.c;
diff --git a/src/yolo_v2_class.hpp b/src/yolo_v2_class.hpp
index 392b71a..5afb22f 100644
--- a/src/yolo_v2_class.hpp
+++ b/src/yolo_v2_class.hpp
@@ -50,6 +50,7 @@
const int cur_gpu_id;
public:
float nms = .4;
+ bool wait_stream;
YOLODLL_API Detector(std::string cfg_filename, std::string weight_filename, int gpu_id = 0);
YOLODLL_API ~Detector();
@@ -172,7 +173,7 @@
sync_PyrLKOpticalFlow_gpu = cv::cuda::SparsePyrLKOpticalFlow::create();
sync_PyrLKOpticalFlow_gpu->setWinSize(cv::Size(21, 21)); // 15, 21, 31
sync_PyrLKOpticalFlow_gpu->setMaxLevel(3); // +- 5 ptx
- sync_PyrLKOpticalFlow_gpu->setNumIters(1000); // def: 30
+ sync_PyrLKOpticalFlow_gpu->setNumIters(2000); // def: 30
cv::cuda::setDevice(old_gpu_id);
}
--
Gitblit v1.10.0