目标检测(crowd counting)

一、SJTU-VideoAnalysis-master

上海交通大学智能视频分析2020春:视频目标检测,视频人群计数

GitHub 地址
在这里插入图片描述

1.1 说明

  • 上海交通大学2020春智能视频分析课程作业

1.1.1 Project1

  • 使用了帧差法中值滤波法高斯混合模型实现了视频前景检测
  • 使用了Faster R-CNN实现了视频目标检测

1.1.2 Project2

  • 使用了YOLO v3MCNNLSC-CNN12-in-1
  • 4种模型实现了视频人群计数
    在这里插入图片描述

1.2 Project2

1.2.1 说明

  • 使用了YOLO v3、MCNN、LSC-CNN、12-in-1,4种模型
  • 实现了高密度人群低密度人群视频人群计数

1.2.2 YOLO v3

  1. YOLO v3是一种One-Stage的目标检测算法
  2. 这类检测算法不需要Region Proposal阶段
  3. 可以通过一个Stage直接产生物体的类别概率和位置坐标值。
  • YOLO v3使用了darknet-53作为特征提取的backbone
  • 精度上与Resnet相当,在计算速度上却得到了很大的提升

为了加强算法对小目标检测的精确度:

  1. YOLO v3中采用了类似FPN的upsample和融合做法
  2. 多个scale的feature map上做检测

此外,在loss function中:

  1. 作者替换了原有的用softmax获取类别得分并用最大得分的标签来表示包含在边界框内的目标
  2. 而对图像中检测到的对象执行多标签分类,就是对每种类别使用二分类的logistic回归

从效果来看,YOLO v3可以取得和SSD同样的精度速度却提升了3倍,是精度与速度兼顾的模型。


使用了leviome的代码,paper


1.2.2.1 Coding
  1. 首先下载预训练好的model
  2. 并将模型转为Keras model
  3. 参考link
wget https://pjreddie.com/media/files/yolov3.weights
python convert.py yolov3.cfg yolov3.weights model_data/yolo.h5

 
使用YOLO v3对视频进行人群计数

  • 运行flow.py文件
python flow.py [需要计数的视频路径] [计数后的视频输出路径]
  • 示例:
    python flow.py F:/SJTU_VideoAnalysis/input_video/demo.avi F:/SJTU_VideoAnalysis/YOLOv3/output/demo_output.avi
1.2.2.2 效果
  • 低密度人群
    在这里插入图片描述
  • 高密度人群
    在这里插入图片描述

1.2.3 MCNN

  • MCNN是一种简单有效的多列卷积神经网络结构
  • 可以将图像映射到对应的人群密度图
  • 允许输入任意尺寸或分辨率的图像
     
  • 每列CNN学习得到的特征可以自适应由于透视或图像分辨率引起的人头大小的变化.
  • 并能在不需要输入图的透视先验情况下,通过几何自适应的核来精确计算人群密度图

1.2.4 LSC-CNN

  • LSC-CNN是一个利用检测的方法进行人群计数的模型
  • 它设计了一个新颖的CNN框架,可以在高分辨率图像上精确定位人头

此外,作者还设计了一个与从上到下反馈结构相融合的方案

  • 使得网络可以联合处理多尺度信息,方便网络更好地定位人头。
  • 在仅有点标注信息的情况下,可以预测每个人头的bounding box
  • 并且在GWTA模块使用了新设计的winner-take-all的loss,有利于在高分辨率的图像上进行训练。

1.2.5 12-in-1

  • 12-in-1模型是通过多任务训练学习视觉语言联合表示的一种跨模态模型
  • 该模型涉及了四类任务
    1. 视觉问题回答 (Visual Question Answering)
    2. 基于图像描述的图像检索 (Caption-based Image Retrieval)
    3. 看图识物 (Grounding Referring Expressions)
    4. 多模态验证 (Multi-modal Verification)
  • 并在12 个不同的数据集上进行联合训练。

通过多任务的学习可以获得更广泛的视觉语言联合表示,并用于不同的下游任务

在本次人群计数的实验中:

  1. 将12-in-1模型应用到VQA这个下游任务
  2. 输入视频的帧图像,以及问题“How many people are there in the picture?”
  3. 从而获得画面中人物的数量

 

二、unbox_yolov5_deepsort_counting

GitHub地址

2.1 介绍

yolov5 deepsort 行人 车辆 跟踪 检测 计数

  • 实现了 出/入 分别计数
  • 默认是 南/北 方向检测
    若要检测不同位置和方向,可在 main.py 文件第13行和21行,修改2个polygon的点
 list_pts_blue = [[204, 305], [227, 431], [605, 522], [1101, 464], [1900, 601], [1902, 495], [1125, 379], [604, 437], [299, 375], [267, 289]]

 list_pts_yellow = [[181, 305], [207, 442], [603, 544], [1107, 485], [1898, 625], [1893, 701], [1101, 568], [594, 637], [118, 483], [109, 303]]                 
 # 初始化2个撞线polygon
    list_pts_blue = [[204, 305], [227, 431], [605, 522], [1101, 464], [1900, 601], [1902, 495], [1125, 379], [604, 437],
                     [299, 375], [267, 289]]
    ndarray_pts_blue = np.array(list_pts_blue, np.int32)
    polygon_blue_value_1 = cv2.fillPoly(mask_image_temp, [ndarray_pts_blue], color=1)
    polygon_blue_value_1 = polygon_blue_value_1[:, :, np.newaxis]

    # 填充第二个polygon
    mask_image_temp = np.zeros((1080, 1920), dtype=np.uint8)
    list_pts_yellow = [[181, 305], [207, 442], [603, 544], [1107, 485], [1898, 625], [1893, 701], [1101, 568],
                       [594, 637], [118, 483], [109, 303]]
    ndarray_pts_yellow = np.array(list_pts_yellow, np.int32)
    polygon_yellow_value_2 = cv2.fillPoly(mask_image_temp, [ndarray_pts_yellow], color=2)
    polygon_yellow_value_2 = polygon_yellow_value_2[:, :, np.newaxis]
  • 默认检测类别行人、自行车、小汽车、摩托车、公交车、卡车
  • 检测类别可在 detector.py 文件第60行修改。
                for *x, conf, cls_id in det:
                    lbl = self.names[int(cls_id)]
                    if lbl not in ['person', 'bicycle', 'car', 'motorcycle', 'bus', 'truck']:
                        continue
                    pass
                    x1, y1 = int(x[0]), int(x[1])
                    x2, y2 = int(x[2]), int(x[3])
                    boxes.append(
                        (x1, y1, x2, y2, lbl, conf))

2.2 bilibili_video

yolov5 deepsort 行人车辆 双向计数 跟踪检测

2.3 Coding & Run

  • 安装pytorch
$ pip install torch==1.7.1+cu110 torchvision==0.8.2+cu110 torchaudio===0.7.2 -f https://download.pytorch.org/whl/torch_stable.html

根据你的操作系统、安装工具以及CUDA版本,在 pytorch官网 找到对应的安装命令。
这里的环境是 ubuntu 18.04.5pipCUDA 11.0


  • 安装软件包
$ pip install -r requirements.txt

  • 设置要检测的视频文件路径
capture = cv2.VideoCapture('./video/test.mp4')

main.py 文件中第66行,设置要检测的视频文件路径,默认为 ‘./video/test.mp4’

140MB的测试视频可以在这里下载 (提取码: 8ufq)


  • 运行程序
python main.py
  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

HHHTTY-

你的鼓励将是我创作的最大动力~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值