如何将Kalman过滤器添加到Yolo V2



我想通过将卡尔曼过滤器添加到yolo。

在我注意到的另一篇文章中*(请参见下面的image.c文件中的代码(如何获取yolo中边界框的坐标。

if(bot > im.h-1) bot = im.h-1;
// Print bounding box values 
printf("Bounding Box: Left=%d, Top=%d, Right=%d, Bottom=%dn", left, top, right, bot); 
draw_box_width(im, left, top, right, bot, width, red, green, blue);

使用kalman滤波器的目的是用于对象跟踪(不确定平滑(。如果C 实现还可以,您可能想使用此流行的GitHub存储库https://github.com/alexeyab/darknet

如果您读取文档,则它具有C API,您可以将其使用DarkNet用作库(因此可以使用Yolo模型(并将其加载到C 程序。查看使用DarkNet库的C 程序示例。此处https://github.com/alexeyab/darknet/blob/master/master/src/yolo_console_dll.cpp。

在该C 代码中,作者给出了3个选项来进行对象跟踪,其中1个使用Kalman filter:

  1. 跟踪光流算法,但它仅适用于实时检测,而不适用于视频。您可以通过不按要求使用该行//#define TRACK_OPTFLOW使用该算法。看看第508〜522行
#ifdef TRACK_OPTFLOW
                        if (detection_data.new_detection) {
                            tracker_flow.update_tracking_flow(detection_data.cap_frame, detection_data.result_vec);
                            while (track_optflow_queue.size() > 0) {
                                draw_frame = track_optflow_queue.back();
                                result_vec = tracker_flow.tracking_flow(track_optflow_queue.front(), false);
                                track_optflow_queue.pop();
                            }
                        }
                        else {
                            track_optflow_queue.push(cap_frame);
                            result_vec = tracker_flow.tracking_flow(cap_frame, false);
                        }
                        detection_data.new_detection = true;    // to correct kalman filter
#endif //TRACK_OPTFLOW
  1. Kalman Filter ,并没有真正推荐它,因为它不是真正准确的,但可能适用于CCTV或固定相机。要使用Kalman过滤器将此值更改为True bool const use_kalman_filter = false;。看看第524〜532行
// track ID by using kalman filter
                        if (use_kalman_filter) {
                            if (detection_data.new_detection) {
                                result_vec = track_kalman.correct(result_vec);
                            }
                            else {
                                result_vec = track_kalman.predict();
                            }
                        }
  1. 自定义对象跟踪器,我使用了此自定义功能,并且在我的情况下,它比Kalman过滤器更好,它将为您提供每个对象的跟踪ID。
// track ID by using custom function
                        else {
                            int frame_story = std::max(5, current_fps_cap.load());
                            result_vec = detector.tracking_id(result_vec, true, frame_story, 40);
                        }

相关内容

  • 没有找到相关文章

最新更新