跨摄像头行人跟踪

跨摄像头行人跟踪:在安防领域里,跨摄像头行人跟踪技术可以作为人脸识别技术的重要补充,对无法获取清晰拍摄人脸的行人进行跨摄像头连续跟踪,增强数据的时空连续性。此技术可以用于嫌疑犯追踪、失踪人口追查等。本算法的开发使用包含室外与室内场景,采用6个有顺序的摄像头对行人进行拍摄,前后两个摄像头的视野有部分重叠。本算法可以实现对行人的连续跟踪,应用于智慧安防与智慧零售领域。

算法报警的业务逻辑:对行人进行跟踪,一组6段视频播放结束后,输出最后跟踪成功的行人与ID。通过ID的查找确认被跟踪的人是否连续并正确。

环境要求:包括白天、晚上以及各种天气条件等,需要保证光照,尤其室内要注意背光的问题。

任务:检测;识别;跟踪。

数据特点:检测目标远近大小不同、检测目标多样、检测目标角度不同、检测目标遮挡、聚集等。

评价指标

在测试日志最后会打印出每个摄像头里的MOTA(Multiple Object Tracking Accuracy)和IDF1,最后取MOTA和IDF1的平均值作为精度分。其中,MOTA表示多目标跟踪准确度,IDF1是指每个行人框中行人ID识别的F值。

算法流程及实现

在backbone的选择中,最终决定使用YOLOv5。

YOLOv5 模型是2020年公开发布的。是基于YOLOv3模型基础上改进而来的,有YOLOv5s、YOLOv5m、YOLOv5l、YOLOv5x四个模型。YOLOv5 模型由骨干网络、颈部和头部组成。

YOLOv5 特点:

  1. 使用Pytorch框架,上手简单,方便训练自己的数据集;

  2. 配置环境简单,模型训练快速,批处理推理产生实时结果;

  3. Pytorch权重文件方便转化为ONXX、TensorRT;

  4. YOLOv5s帧率很高,同时兼顾精度。

YOLOv5的亮点包括:

  1. 自适应锚框计算:网络在初始锚框的基础上输出预测框,自适应的计算不同训练集中的最佳锚框值。进而和真实框groundtruth进行比对,计算两者差距,再反向更新,迭代网络参数;

  2. CSP结构:将原输入分成两个分支,分别进行卷积操作使得通道数减半,再经过操作将输入与输出是一样的大小,让模型学习到更多的特征;

  3. Focus结构:采用切片操作把高分辨率的图片(特征图)拆分成多个低分辨率的图片/特征图,即隔列采样+拼接;

  4. 自适应图片缩放:在Yolov5的代码中datasets.py的letterbox函数中进行了修改,对原始图像自适应的添加最少的黑边,等等。

针对赛题数据,进行了数据增广的操作,包括左右翻转;随机裁剪;图像放缩;亮度调整;饱和度调整;对比度调整;添加噪声;添加随机遮挡等,部分示意图如下图所示。

模型正式训练前,我们首先针对权重初始化进行了操作,通常使用的是权重随机初始化,它面对广泛的任务可以满足一定的要求。但针对不同任务不能定制化满足收敛效果和性能的最大化。因此我们使用官方提供的预训练权重,初始化主干网络参数。这之前我们使用模型预热的方法,使用较小的学习率先对模型进行训练,通过几轮epoches后使模型优化趋于稳定,再重新设置学习率开始训练。

之后增加了CBAM注意力机制。CBAM,是双通道注意力机制,分为空间注意力和通道注意力两部分。从下图中可以看出,红色方框中的部分为通道注意力,蓝色方框内的部分为空间注意力。通道注意力在前,空间注意力在后。特征图输入后,先进入通道注意力,基于特征图的宽、高进行 GAP、GMP,然后经过 MLP得到通道的注意力权重,然后通过 Sigmoid 函数获得归一化注意力权重,最后通过加权到原始输入特征图上,完成通道注意力对原始特征的重新标定。

我们还将模型的损失函数替换,原有的CIOU loss 同时考虑到回归框宽高比例以及真实框与预测框中心距离,但是存在一个问题,他仅仅将宽高比例作为影响因子,如果两个框中心点与原始图保持一致,宽高比例相同但是宽高的值不同,按照CIOUloss损失可能一致与回归目标不相符,就如下图所示。因此我们改用SIOU,它增加了角度损失:设置夹角alpha,目标框与回归框夹角小于alpha时,向最小alpha收敛,反之beta收敛。    whaosoft aiot http://143ai.com 

最后我们将模型进行转化,将pytorch模型转化为TensorRT。并将模型量化为半浮点,更大限度地提高吞吐量。 

在测试阶段,首先使用ByteTrack进行目标跟踪。由于实际跟踪场景的复杂性,检测器往往无法得到完美的检测结果。为了权衡真假正例,目前大部分MOT方法会选择一个阈值,只保留高于这个阈值的检测结果来做关联得到跟踪结果,低于这个阈值的检测框就直接丢弃。ByteTrack认为这种策略是不合理的,低分检测框往往预示着物体的存在(例如遮挡严重的物体)。简单地把这些物体丢弃会给MOT带来不可逆转的错误,包括大量的漏检和轨迹中断,降低整体跟踪性能。因此,ByteTrack是一种新的数据关联方法,将高分框和低分框分开处理,利用低分检测框和跟踪轨迹之间的相似性,从低分框中挖掘出真正的物体,过滤掉背景。简单来说,是一个二次匹配的过程。 

之后对跟踪上的目标进行二次判断(基于比对得分),由于前后帧已经跟踪上,我们结合该目标上一次比对得分进行判断,如果比对得分高于0.5,则沿用跟踪结果,反之重新提特征比对。

最后,对于每帧图像,我们只需要对没有通过跟踪关联上的目标进行特征提取,在这一步中,我们没有使用for循环来完成,而是使用batch的操作,将没有关联的目标一次性批量处理。这样进一步减少了算法的耗时。

总结
  1. 我们选择使用了基于Pytorch的YoloV5s,模型训练快速、性能好,并提供了TensorRT部署方案,减少推理时间;

  2. 结合数据增广、预训练模型、模型预热等方案,为竞赛模型提供针对的性初始化权重,激发网络性能潜力;

  3. 使用CBAM注意力机制同时改变损失函数为SIOU优化网络模型,进一步提升模型的检测精度和鲁棒性;

  4. 使用余弦退火学习率和MultiStepLR接力的方式进行学习率调整,并使用遗忘数据增强的方法激发模型性能;

  5. 结合跟踪算法与比对得分两个因素进行判断,增加前后帧目标的关联同时规避掉过多冗余的计算,加快算法速度;

  6. 使用batch的操作,将上一步没有关联的目标一次性批量处理,这样进一步减少了算法的耗时。

猜你喜欢

转载自blog.csdn.net/qq_29788741/article/details/131733435
今日推荐