对比原项目
-
更改了网络结构,完善了yolo输入的类别
-
更改了reid的输入
-
增加
--count实现人流统计的功能 -
实现reid多baseline的选择,
-
修改了一下bug,
-
并且注释上加上了自己的理解
实现多目标追踪,能够使用--count简单实现人流的计数功能
使用yolov3作为目标检测网络,mobilenet作为特征提取网络
默认权重存放位置
./weights/yolov3-spp.pt
./deep_sort/deep/checkpoint/mobilenetv2_x1_0/mobilenetv2_x1_0_best.pt
提取码: zdfn
deep_sort.py [--yolo_cfg][--yolo_weights][--deepsort_checkpoint]
[--ignore_display][--count][--save_path]
[--data_cfg][--img_size] 'VIDEO_PATH' 参数解释:
- 'VIDEO_PATH' 处理的视频文件目录,必选参数
- --yolo_cfg 组成yolo框架的cfg地址,默认使用
yolov3-spp.cfg - --yolo_weights yolo权重地址,默认使用
yolov3-spp.pt - --deepsort_checkpoint deepsort中Reid的权重文件目录,默认
mobilenetv2_x1_0_best.pt - --ignore_display 是否实时显示,默认显示
- --count 是否计数人流量, 默认不显示
- --save_path 输出结果存放地址
- --data_cfg yolo用,对应数据集的标签名 默认
coco.data - --img_size yolo用,输入yolo图片Size,默认416 x 416
- 其他args参数使用默认即可,或者自行修改
会生成目标轨迹文件在./data/videosample/predicts.txt
在训练之前:
先利用 deep_sort_yolov3_pytorch/deep_sort/deep/prepare.py 处理Market1501数据集,转换成类似mot16的格式
./deep_sort/deep/train_wo_center.pytrain.py能实现在训练集market1501上的Reid网络的训练
train_wo_center.pytrain.py
train_wo_center.pytrain.py [--data-dir][--interval][--model][--pretrained]-
--data-dir 处理后的Market1501训练集的存放位置
-
--interval 训练每隔多少轮显示一次loss和acc
-
--model 使用的baseline的模型类型,可使用模型见deep_sort_yolov3_pytorch/deep_sort/deep/models/_init_.py,默认为mobilenetv2_x1_0
注意:
如果要使用mobilenet以外的模型的模型,需要到deep_sort_yolov3_pytorch/deep_sort/deep/models/中对应网络结构中做如下修改:
1.在模型的类的
def __init__()中增加reid变量,默认为False2.在
def forward()中最后一层全连接层之前,加入reid变量提取:if self.reid: x = v x = x.div(x.norm(p=2, dim=1, keepdim=True)) return x以下以mobilenet为例:
... class MobileNetV2(nn.Module): def __init__(..., reid = False, **kwargs): ... ... self.reid = reid ... ... def forward(self, x): ... if self.fc is not None: v = self.fc(v) if self.reid: x = v x = x.div(x.norm(p=2, dim=1, keepdim=True)) return x y = self.classifier(v) ...
-
--pretrained 是否使用预训练集
deep_sort_yolov3_pytorch/predict.py 用来测试yolo网络用
Reference: