mirror of
https://github.com/pjreddie/darknet.git
synced 2023-08-10 21:13:14 +03:00
Detection and Tracking work well
This commit is contained in:
@ -64,6 +64,7 @@ typedef struct network{
|
|||||||
#ifdef GPU
|
#ifdef GPU
|
||||||
float **input_gpu;
|
float **input_gpu;
|
||||||
float **truth_gpu;
|
float **truth_gpu;
|
||||||
|
int wait_stream;
|
||||||
#endif
|
#endif
|
||||||
} network;
|
} network;
|
||||||
|
|
||||||
|
@ -51,7 +51,8 @@ void forward_network_gpu(network net, network_state state)
|
|||||||
fill_ongpu(l.outputs * l.batch, 0, l.delta_gpu, 1);
|
fill_ongpu(l.outputs * l.batch, 0, l.delta_gpu, 1);
|
||||||
}
|
}
|
||||||
l.forward_gpu(l, state);
|
l.forward_gpu(l, state);
|
||||||
cudaStreamSynchronize(get_cuda_stream());
|
if(net.wait_stream)
|
||||||
|
cudaStreamSynchronize(get_cuda_stream());
|
||||||
state.input = l.output_gpu;
|
state.input = l.output_gpu;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -11,10 +11,10 @@
|
|||||||
|
|
||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
#define OPENCV
|
#define OPENCV
|
||||||
#include "windows.h"
|
//#include "windows.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#define TRACK_OPTFLOW
|
//#define TRACK_OPTFLOW
|
||||||
|
|
||||||
#include "yolo_v2_class.hpp" // imported functions from DLL
|
#include "yolo_v2_class.hpp" // imported functions from DLL
|
||||||
|
|
||||||
@ -102,6 +102,7 @@ int main(int argc, char *argv[])
|
|||||||
bool const save_output_videofile = false;
|
bool const save_output_videofile = false;
|
||||||
#ifdef TRACK_OPTFLOW
|
#ifdef TRACK_OPTFLOW
|
||||||
Tracker_optflow tracker_flow;
|
Tracker_optflow tracker_flow;
|
||||||
|
detector.wait_stream = true;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
while (true)
|
while (true)
|
||||||
@ -185,17 +186,15 @@ int main(int argc, char *argv[])
|
|||||||
auto current_image = det_image;
|
auto current_image = det_image;
|
||||||
consumed = true;
|
consumed = true;
|
||||||
while (current_image.use_count() > 0) {
|
while (current_image.use_count() > 0) {
|
||||||
//std::vector<bbox_t> result;
|
|
||||||
auto result = detector.detect_resized(*current_image, frame_size, 0.24, false); // true
|
auto result = detector.detect_resized(*current_image, frame_size, 0.24, false); // true
|
||||||
//Sleep(200);
|
|
||||||
//Sleep(50);
|
|
||||||
++fps_det_counter;
|
++fps_det_counter;
|
||||||
std::unique_lock<std::mutex> lock(mtx);
|
std::unique_lock<std::mutex> lock(mtx);
|
||||||
thread_result_vec = result;
|
thread_result_vec = result;
|
||||||
current_image = det_image;
|
current_image = det_image;
|
||||||
consumed = true;
|
consumed = true;
|
||||||
cv_detected.notify_all();
|
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 @@ int main(int argc, char *argv[])
|
|||||||
result_vec = tracker_flow.tracking_flow(cur_frame, result_vec); // track optical flow
|
result_vec = tracker_flow.tracking_flow(cur_frame, result_vec); // track optical flow
|
||||||
#endif
|
#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);
|
//show_console_result(result_vec, obj_names);
|
||||||
|
|
||||||
if (output_video.isOpened() && videowrite_ready) {
|
if (output_video.isOpened() && videowrite_ready) {
|
||||||
|
@ -36,6 +36,7 @@ struct detector_gpu_t{
|
|||||||
|
|
||||||
YOLODLL_API Detector::Detector(std::string cfg_filename, std::string weight_filename, int gpu_id) : cur_gpu_id(gpu_id)
|
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;
|
int old_gpu_index;
|
||||||
#ifdef GPU
|
#ifdef GPU
|
||||||
cudaGetDevice(&old_gpu_index);
|
cudaGetDevice(&old_gpu_index);
|
||||||
@ -172,7 +173,6 @@ YOLODLL_API void Detector::free_image(image_t m)
|
|||||||
|
|
||||||
YOLODLL_API std::vector<bbox_t> Detector::detect(image_t img, float thresh, bool use_mean)
|
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());
|
detector_gpu_t &detector_gpu = *reinterpret_cast<detector_gpu_t *>(detector_gpu_ptr.get());
|
||||||
network &net = detector_gpu.net;
|
network &net = detector_gpu.net;
|
||||||
int old_gpu_index;
|
int old_gpu_index;
|
||||||
@ -184,6 +184,7 @@ YOLODLL_API std::vector<bbox_t> Detector::detect(image_t img, float thresh, bool
|
|||||||
//std::cout << "net.gpu_index = " << net.gpu_index << std::endl;
|
//std::cout << "net.gpu_index = " << net.gpu_index << std::endl;
|
||||||
|
|
||||||
//float nms = .4;
|
//float nms = .4;
|
||||||
|
net.wait_stream = wait_stream; // 1 - wait CUDA-stream, 0 - not to wait
|
||||||
|
|
||||||
image im;
|
image im;
|
||||||
im.c = img.c;
|
im.c = img.c;
|
||||||
|
@ -50,6 +50,7 @@ class Detector {
|
|||||||
const int cur_gpu_id;
|
const int cur_gpu_id;
|
||||||
public:
|
public:
|
||||||
float nms = .4;
|
float nms = .4;
|
||||||
|
bool wait_stream;
|
||||||
|
|
||||||
YOLODLL_API Detector(std::string cfg_filename, std::string weight_filename, int gpu_id = 0);
|
YOLODLL_API Detector(std::string cfg_filename, std::string weight_filename, int gpu_id = 0);
|
||||||
YOLODLL_API ~Detector();
|
YOLODLL_API ~Detector();
|
||||||
@ -172,7 +173,7 @@ public:
|
|||||||
sync_PyrLKOpticalFlow_gpu = cv::cuda::SparsePyrLKOpticalFlow::create();
|
sync_PyrLKOpticalFlow_gpu = cv::cuda::SparsePyrLKOpticalFlow::create();
|
||||||
sync_PyrLKOpticalFlow_gpu->setWinSize(cv::Size(21, 21)); // 15, 21, 31
|
sync_PyrLKOpticalFlow_gpu->setWinSize(cv::Size(21, 21)); // 15, 21, 31
|
||||||
sync_PyrLKOpticalFlow_gpu->setMaxLevel(3); // +- 5 ptx
|
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);
|
cv::cuda::setDevice(old_gpu_id);
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user