YOLOv4 deepsort pytorch实现【代码资源已上传】

前些日子跑了一下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进行修改

YOLOv4 deepsort pytorch实现【代码资源已上传】_第1张图片

$ 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_25resnet50】,如果自己下载的是resnet权重,将下载后的权重放在deep_sort/deep/checkpoint/下,然后进入deep_sort/deep/reid/torchreid/models/resnet.py,将model_urls中的'resnet50'的链接改为本地权重路径。

YOLOv4 deepsort pytorch实现【代码资源已上传】_第2张图片

如果你是下载的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

你可能感兴趣的