AlexeyAB
2018-01-07 aeb15b3cb9157f5d0b2a9962e17de22560b8a1b2
Detection and Tracking work well
5 files modified
19 ■■■■■ changed files
src/network.h 1 ●●●● patch | view | raw | blame | history
src/network_kernels.cu 1 ●●●● patch | view | raw | blame | history
src/yolo_console_dll.cpp 11 ●●●● patch | view | raw | blame | history
src/yolo_v2_class.cpp 3 ●●●● patch | view | raw | blame | history
src/yolo_v2_class.hpp 3 ●●●● patch | view | raw | blame | history
src/network.h
@@ -64,6 +64,7 @@
    #ifdef GPU
    float **input_gpu;
    float **truth_gpu;
    int wait_stream;
    #endif
} network;
src/network_kernels.cu
@@ -51,6 +51,7 @@
            fill_ongpu(l.outputs * l.batch, 0, l.delta_gpu, 1);
        }
        l.forward_gpu(l, state);
        if(net.wait_stream)
        cudaStreamSynchronize(get_cuda_stream());
        state.input = l.output_gpu;
    }
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,16 +186,14 @@
                            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();
                                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) {
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;
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);
    }