发布时间:2022-08-19 11:29
前些日子跑了一下github上提供的yolov5 deepsort,然后现在想着自己去实现yolov4 的deepsort。【这里不讲原理】代码见文末。
yolov4的代码我是采用的b站up主Bubbliiiing开源的pytorch版代码。deepsort部分还是用的原yolov5版的,只是这里我将这两部分代码进行了合并整理【代码中对部分功能进行了删减修改】。
检测效果不是那么好,因为我用的是coco数据集的80类,每个类的准确率不是那么高,可以根据自己的数据集训练自己的类,这样效果会更好。
目录
代码使用
代码
第一步:
下载yolov4权重【权重链接见文末百度云盘】
将下载好的权重yolo4_weights.pth放在yolov4/model_data/文件夹下
修改输入图像大小可以在yolov4/yolo.py中 input_shape进行修改
$ tree model_data
model_data
|-- coco_classes.txt
|-- simhei.ttf
|-- voc_classes.txt
|-- yolo4_weights.pth
`-- yolo_anchors.txt
第二步:
在终端运行命令:python track.py --source demo.mp4 --classes 0 --show-vid --save-vid
命令说明:--source 后面的参数是打开摄像头还是本地视频,如果是本地视频输入路径即可
--classes 是需要检测的类,因为我这里yolo用的是coco数据集,有80个类,如果不加任何参数,默认是检测80个类,如果想只检测某个类,可以单独指定【0指的是指检测人这个类】
--show-vid则显示图像
--save-vid是保存跟踪后的视频,保存路径runs/track/exp【每次检测都会生成一个新的exp文件】
只跟踪行人
跟踪所有的类
------------------------------------------------------------------------------------------------------------------------------
在跟踪部分,支持网络如下:【该文件路径在deep_sort/deep/reid/torchreid/models/_init_.py】,代码默认采用的网络为 :osnet_x0_25。如果换其他网络,输入命令:
python track.py --deep_sort_model resnet50 --source demo.mp4 --classes 0 --show-vid --save-vid
'resnet18': resnet18,
'resnet34': resnet34,
'resnet50': resnet50,
'resnet101': resnet101,
'resnet152': resnet152,
'resnext50_32x4d': resnext50_32x4d,
'resnext101_32x8d': resnext101_32x8d,
'resnet50_fc512': resnet50_fc512,
'se_resnet50': se_resnet50,
'se_resnet50_fc512': se_resnet50_fc512,
'se_resnet101': se_resnet101,
'se_resnext50_32x4d': se_resnext50_32x4d,
'se_resnext101_32x4d': se_resnext101_32x4d,
'densenet121': densenet121,
'densenet169': densenet169,
'densenet201': densenet201,
'densenet161': densenet161,
'densenet121_fc512': densenet121_fc512,
'inceptionresnetv2': inceptionresnetv2,
'inceptionv4': inceptionv4,
'xception': xception,
'resnet50_ibn_a': resnet50_ibn_a,
'resnet50_ibn_b': resnet50_ibn_b,
# lightweight models
'nasnsetmobile': nasnetamobile,
'mobilenetv2_x1_0': mobilenetv2_x1_0,
'mobilenetv2_x1_4': mobilenetv2_x1_4,
'shufflenet': shufflenet,
'squeezenet1_0': squeezenet1_0,
'squeezenet1_0_fc512': squeezenet1_0_fc512,
'squeezenet1_1': squeezenet1_1,
'shufflenet_v2_x0_5': shufflenet_v2_x0_5,
'shufflenet_v2_x1_0': shufflenet_v2_x1_0,
'shufflenet_v2_x1_5': shufflenet_v2_x1_5,
'shufflenet_v2_x2_0': shufflenet_v2_x2_0,
# reid-specific models
'mudeep': MuDeep,
'resnet50mid': resnet50mid,
'hacnn': HACNN,
'pcb_p6': pcb_p6,
'pcb_p4': pcb_p4,
'mlfn': mlfn,
'osnet_x1_0': osnet_x1_0,
'osnet_x0_75': osnet_x0_75,
'osnet_x0_5': osnet_x0_5,
'osnet_x0_25': osnet_x0_25,
'osnet_ibn_x1_0': osnet_ibn_x1_0,
'osnet_ain_x1_0': osnet_ain_x1_0,
'osnet_ain_x0_75': osnet_ain_x0_75,
'osnet_ain_x0_5': osnet_ain_x0_5,
'osnet_ain_x0_25': osnet_ain_x0_25
自己下载权重【或者自己训练的权重】:
权重会自动下载,如果感觉慢可以去我网盘里下载【我只上传了osnet_x0_25和resnet50】,如果自己下载的是resnet权重,将下载后的权重放在deep_sort/deep/checkpoint/下,然后进入deep_sort/deep/reid/torchreid/models/resnet.py,将model_urls中的'resnet50'的链接改为本地权重路径。
如果你是下载的osnet_x0_25权重,同理可以将权重放在 deep_sort/deep/checkpoint/下,然后在deep_sort/deep/reid/torchreid/models/osnet.py中找到model_dir,直接将路径改为自己的权重路径即可
以上只针对你自己下载权重的操作,或者你后面训练自己的数据集后放权重的操作。如果是让程序自己下载权重就不用上面修改路径的操作了,程序自动下载的权重一般会保存在C:user/你的用户名/.cache/torch/checkpoints/下
百度云权重:
链接:https://pan.baidu.com/s/1SsRx_bmA2aLKGv9OcIRqSw
提取码:yypn
代码:https://github.com/YINYIPENG-EN/yolov4_deepsort_pytorchhttps://github.com/YINYIPENG-EN/yolov4_deepsort_pytorch