【Deepsort-yolov5实现无人机视觉检测和跟踪】

无人机视觉检测和跟踪系列
数据集一
数据集二
数据集三
数据集四
数据集五
数据集六
数据集七
数据集八
无人机视频段
YOLOv5无人机训练权重
YOLOv3无人机训练权重
Darknet-YOLOv3无人机训练权重
Darknet-YOLOv4无人机训练权重
SSD无人机检测训练权重
CenterNet无人机检测训练权重
Deepsort-YOLOv5无人机视觉检测和跟踪代码

1. YOLOv5无人机视觉检测

1.1 训练无人机数据集

  • 准备无人机数据集:需要YOLO格式的标签,若数据标签式VOC,则需要转换;
  • 划分数据集:将数据集划分为训练集train、验证集val、测试集test,其中train和val用于训练,test用于对训练好的模型进行评估,在YOLOv5中,test用于val.py(或者test.py,5版中用于验证的脚本是test.py)对训练好的模型进行验证;
# val.py或者test.py
parser.add_argument('--task', default='test', help='train, val, test, speed or study')
  • 划分好的数据集文件目录结构如下所示,其中images中放图片,lables中放对应的txt格式标签:
    在这里插入图片描述
  • 新建加载数据的配置文件drone.yaml。在YOLOv5项目文件下的data文件夹中新建drone.yaml文件,其内容如下:
# Train/val/test sets as 1) dir: path/to/imgs, 2) file: path/to/imgs.txt, or 3) list: [path/to/imgs1, path/to/imgs2, ..]
#path: ../datasets/coco128  # dataset root dir
train: ../drone-all/images/train  # train images (relative to 'path') 128 images
val: ../drone-all/images/val  # val images (relative to 'path') 128 images
test: ../drone-all/images/test # test images (relative to 'path') 128 images(optional)

# Classes
nc: 1 # number of classes
names: [ 'drone']  # class names
  • 然后修改train.py中的参数行中的--weights--data,--epochs,--batch-size,就运行trian.py就开始训练了。修改后的参数如下:
if __name__ == '__main__':
    parser = argparse.ArgumentParser()
    parser.add_argument('--weights', type=str, default='yolov5s.pt', help='initial weights path')
    parser.add_argument('--cfg', type=str, default='', help='model.yaml path')
    parser.add_argument('--data', type=str, default='data/drone.yaml', help='data.yaml path')
    parser.add_argument('--hyp', type=str, default='data/hyp.scratch.yaml', help='hyperparameters path')
    parser.add_argument('--epochs', type=int, default=150)
    parser.add_argument('--batch-size', type=int, default=8, help='total batch size for all GPUs')
    parser.add_argument('--img-size', nargs='+', type=int, default=[640, 640], help='[train, test] image sizes')
    parser.add_argument('--rect', action='store_true', help='rectangular training')
    parser.add_argument('--resume', nargs='?', const=True, default=False, help='resume most recent training')
    parser.add_argument('--nosave', action='store_true', help='only save final checkpoint')
    parser.add_argument('--notest', action='store_true', help='only test final epoch')
    parser.add_argument('--noautoanchor', action='store_true', help='disable autoanchor check')
    parser.add_argument('--evolve', action='store_true', help='evolve hyperparameters')
    parser.add_argument('--bucket', type=str, default='', help='gsutil bucket')
    parser.add_argument('--cache-images', action='store_true', help='cache images for faster training')
    parser.add_argument('--image-weights', action='store_true', help='use weighted image selection for training')
    parser.add_argument('--device', default='', help='cuda device, i.e. 0 or 0,1,2,3 or cpu')
    parser.add_argument('--multi-scale', action='store_true', help='vary img-size +/- 50%%')
    parser.add_argument('--single-cls', action='store_true', help='train multi-class data as single-class')
    parser.add_argument('--adam', action='store_true', help='use torch.optim.Adam() optimizer')
    parser.add_argument('--sync-bn', action='store_true', help='use SyncBatchNorm, only available in DDP mode')
    parser.add_argument('--local_rank', type=int, default=-1, help='DDP parameter, do not modify')
    parser.add_argument('--workers', type=int, default=8, help='maximum number of dataloader workers')
    parser.add_argument('--project', default='runs/train', help='save to project/name')
    parser.add_argument('--entity', default=None, help='W&B entity')
    parser.add_argument('--name', default='exp', help='save to project/name')
    parser.add_argument('--exist-ok', action='store_true', help='existing project/name ok, do not increment')
    parser.add_argument('--quad', action='store_true', help='quad dataloader')
    parser.add_argument('--linear-lr', action='store_true', help='linear LR')
    parser.add_argument('--label-smoothing', type=float, default=0.0, help='Label smoothing epsilon')
    parser.add_argument('--upload_dataset', action='store_true', help='Upload dataset as W&B artifact table')
    parser.add_argument('--bbox_interval', type=int, default=-1, help='Set bounding-box image logging interval for W&B')
    parser.add_argument('--save_period', type=int, default=-1, help='Log model after every "save_period" epoch')
    parser.add_argument('--artifact_alias', type=str, default="latest", help='version of dataset artifact to be used')
    opt = parser.parse_args()

1.2无人机检测结果

训练完成后,权重文件以及训练过程中的各种指标曲线图保存在runs/train/exp文件夹中;然后在detect.py中修改一些参数加载训练好的无人机pt权重文件,运行detect.py就可以实现无人机的检测,需要修改的部分如下:

parser = argparse.ArgumentParser()
    parser.add_argument('--weights', nargs='+', type=str, default='runs/exp/weights/best.pt', help='model.pt path(s)')
    parser.add_argument('--source', type=str, default='./drone_imgs', help='source')  # file/folder, 0 for webcam

其中,“--weight” 参数是加载训练好的无人机检测权重文件;'--source'参数是设置要检测的图片或者视频,或者调用摄像头实时检测无人机。'--source'使用方法如下:

Usage - sources:
    $ python detect.py --weights yolov5s.pt --source 0                               # webcam
                                                     img.jpg                         # image
                                                     vid.mp4                         # video
                                                     path/                           # directory
                                                     'path/*.jpg'                    # glob
                                                     'https://youtu.be/Zgi9g1ksQHc'  # YouTube
                                                     'rtsp://example.com/media.mp4'  # RTSP, RTMP, HTTP stream

无人机检测结果示例如下图所示:
在这里插入图片描述

2. Deepsort跟踪

2.1 算法原理

Sort算法利用卡尔曼滤波和匈牙利匹配,将 跟踪结果和检测结果之间的 IoU 作为代价矩阵,实现 了一种简单高效并且实用的跟踪范式。
但是 SORT 算 法的缺陷在于所使用的关联度量(Association Metric) 只有在状态估计不确定性较低的情况下有效,因此算 法执行时会出现大量身份切换现象,当目标被遮挡时 跟踪失败。为了改善这个问题,DeepSORT 将目标的 运动信息和外观信息相结合作为关联度量,改善目标 消失后重新出现导致的跟踪失败问题。
DeepSORT 利用检测器的结果初始化跟踪器,每个跟踪器都会设置一个计数器,在卡尔曼滤波之后 计数器累加,当预测结果和检测结果成功匹配时,该 计数器置为 0。在一段时间内跟踪器没有匹配到合适 的检测结果,则删除该跟踪器。DeepSORT 为每一帧 中新出现的检测结果分配跟踪器,当该跟踪器连续 几帧的预测结果都能匹配检测结果,则确认是出现了新 的轨迹,否则删除该跟踪器。

2.2 无人机跟踪实现

YOLOv5整个项目代码放入到Deepsort项目代码中,并将其重命名为yolov5,在track.py中修改一些参数如下:

 parser = argparse.ArgumentParser()  #参数设置,下面是一系列参数设置选项,自己根据需要进行设置
    parser.add_argument('--yolo_weights', nargs='+', type=str, default='yolov5/weights/yolov5m.pt', help='model.pt path(s)')    #加载权重,
    parser.add_argument('--deep_sort_weights', type=str, default='deep_sort_pytorch/deep_sort/deep/checkpoint/ckpt.t7', help='ckpt.t7 path')
    # file/folder, 0 for webcam
    parser.add_argument('--source', type=str, default='car_track-1.mp4', help='source') #这里把car_track-1.mp4改成自己需要跟踪的视屏,注意路径
    parser.add_argument('--output', type=str, default='inference/output', help='output folder')  # 输出结果保存在inference/output下
    parser.add_argument('--img-size', type=int, default=416, help='inference size (pixels)')    #416指将图片缩放至416尺寸
    
    parser.add_argument('--show-vid', action='store_true', help='display tracking video results')   #--show-vid指运行过程中显示出结果
    parser.add_argument('--save-vid', action='store_true', help='save video tracking results')  #--save-vid指对跟踪后的视屏

修改后运行track.py即可实现无人机的多目标跟踪,跟踪结果如下所示:
在这里插入图片描述

2.3 无人机运动轨迹可视化

在这里插入图片描述

2.4 目标质心点保存

质心坐标保存在center_pts.txt中;其中每行数据分别为cls_id, frame_idx, id,center_x, center_y(类别ID,第几帧,身份ID, 质心坐标x, 质心坐标y)
在这里插入图片描述

2.5目标重识别模型要注意的问题

deepsort中的目标重识别模型是在行人数据集中训练得到,针对其他目标的跟踪效果肯定没有行人跟踪效果那么好,但还是能用的。当然也可以针对特定跟踪目标制作目标重识别数据集,然后再选用先进的目标重识别算法训练,这个跟踪的效果可能会更好。

3. 飞机目标检测

在这里插入图片描述

  • 18
    点赞
  • 137
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 21
    评论
YOLOv5是一种基于深度学习的目标检测算法,可以用于绝缘子的检测。通过无人机搭载相机头云台对输电线路上的绝缘子进行数据采集,并利用YOLOv5算法对这些数据进行训练,可以实现对绝缘子的精准识别和定位。这种方法结合了深度学习技术和无人机的优势,可以大幅提升无人机巡检时对绝缘子设备的准确跟踪和判定效率,具有重要的应用价值。\[1\]\[2\] 如果你想了解如何安装YOLOv5并训练自己的数据集,可以参考之前的文章,其中详细介绍了在本机上安装YOLOv5的教程。\[3\] #### 引用[.reference_title] - *1* *3* [YOLOv5实战之输电线路绝缘子缺陷检测识别](https://blog.csdn.net/qq_40716944/article/details/127582766)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [【2023-Pytorch-检测教程】手把手教你使用YOLOV5做电线绝缘子缺陷检测](https://blog.csdn.net/ECHOSON/article/details/129560401)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

XTX_AI

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

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

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

打赏作者

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

抵扣说明:

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

余额充值