# 2024-10-17 组会汇报

## 一、科研项目
- 无新进展
## 二、工程项目
### 2.1 目标跟踪流程跑通
- 结合yolov8，行人重识别开源项目[fast-reid](https://github.com/JDAI-CV/fast-reid)以及目标跟踪算法deepsort，初步跑通以下3步流程：
   - 行人检测：通过Yolo这类目标模型提取当前帧的行人图像。
   - 特征提取：基于特征提取模型，如通过fast-reid基于度量学习训练得到的模型提取行人区域图片的特征向量。
   - 目标跟踪：结合行人区域特征，通过deepsort进行目标跟踪
### 2.2 遇到的问题
- 问题描述：跟踪精度低，存在严重的 id switch 问题
- 问题原因：
   1. 通过打印cv::Mat的值，发现由于cv::Mat没有调用clone方法，导致截取到的图片在使用前就被析构了，导致fast-reid输出的特征向量完全无效
   2. 通过理解原项目deepsort的跟踪逻辑，发现原项目传入的坐标点(x,y)为目标检测框的中心点，而我设置的是左上角坐标，导致框没有截全，最终导致跟踪精度低
- 解决方案：
   1. 修改cv::Mat的调用方法为clone方法
   2. 修改坐标点的设置方法，改为左上角坐标
---
- 问题描述：行人重识别模型推理速度慢，占推理总流程时间的90%以上，需要再优化一下，导致视频流严重卡顿![alt text](image/image.png)
- 问题原因：通过打印fast-reid推理用时，当batch_size为4时，用时约为6ms，由于yolo一次性会检测8张图片，同一张图片里面有非常多的框，所以fast-reid推理总用时较长
- 解决方案：
  1. 增大fast-reid模型的batch_size为8时，视频流卡顿现象明显缓解 
### 2.3 待办事项
#### 重识别逻辑
1. 检测到人之后
   1. 首先在数据库里检索是否有相似度比较高的人
      1. 这一步需要用向量数据库来做，若出现，则给出对应的id，否则id为无效值
   2. 之后给系统后端发送一个http消息，http消息的json格式如下：
      ```json
      {
         "PersonId": 1 // 行人id
         "Picture": "xxx"// base64编码后的行人图片
         "CameraIP": "192.169.0.0" //摄像头地址
         "TimeStamp": "xxx"//时间戳
      }
      ```
   3. 判定这段视频里后面几秒内是否重复出现该行人，注意以下事项：
      1. 视频可见范围内，只发一次http消息
      2. 相似度高的人不管在摄像头中消失多少次，都是一个相同的ID 

[项目链接](https://github.com/dancing-ui/uestc_vhm)