YOLOv5提高检测速度:使用detect.py进行多进程推理

YOLOv5提高检测速度:使用detect.py进行多进程推理

需求

我们的项目有一个需求,就是10s之内得检测完一张图片。但实际上程序可能需要的时间接近40s,所以就有了一个多线程的需求。所以下面测试我将通过跑3次相同路径下图片的耗时进行比较。使用的GPU设备是RTX3060。

原始推理

我先对他的main函数做了一些简单的修改。

def main(path):
    opt = parse_opt(path)
    check_requirements(ROOT / 'requirements.txt', exclude=('tensorboard', 'thop'))
    return run(**vars(opt))

if __name__ == '__main__':
    s_t = time.time()
    path1 = "data/PCBDatasets/images"
    path2 = "data/PCBDatasets/images"
    path3 = "data/PCBDatasets/images"

    # 原始推理
    main(path1) 
    main(path2) 
    main(path3) 
	
	print("Tatal Cost Time:", time.time() - s_t)

通过上述的方式连续跑三次,耗时23s-29s。

多进程推理

同样的,对代码进行一些小修改。

import multiprocessing as mp

def main(path):
    opt = parse_opt(path)
    check_requirements(ROOT / 'requirements.txt', exclude=('tensorboard', 'thop'))
    return run(**vars(opt))
    
if __name__ == '__main__':
    s_t = time.time()
    path1 = "data/PCBDatasets/images"
    path2 = "data/PCBDatasets/images"
    path3 = "data/PCBDatasets/images"

    # 多进程推理
    p1 = mp.Process(target=main, args=(path1,))
    p2 = mp.Process(target=main, args=(path2,))
    p3 = mp.Process(target=main, args=(path3,))
    p1.start()
    p2.start()
    p3.start()
    p1.join()
    p2.join()
    p3.join()

    print("Tatal Cost Time:", time.time() - s_t)

多进程的耗时为11.1s。

根据这种对比方式,得到的结果确实和网站上的一致,多进程均在不同程度上提高了速度。
在这里插入图片描述

多进程结合实际应用进行验证

但是我觉得这一个对比方式有一个错误。原始推理实际上一次检测只需要加载一次模型就可以了,但是这个比较方式原始推理加载了5次模型,明显比实际上消耗了更多的时间。所以我在下面做了额外的实验。

我进行了实际应用的对比。即将多进程融入到一整张大图的检测过程中。原始推理的实验还是按照正常的流程,对大图进行切割,然后加载模型检测检测。多进程的实验我就对过程进行了一下修改。对大图进行切割,然后将切割后的小图分到n个不同的文件夹中,然后加载n个模型,分别检测n个文件夹。根据结果发现,双进程的单张耗时约等于原始推理的两倍,四进程的单张耗时约等于原始推理的四倍,然后开n进程又会多出额外的加载模型的时间,导致开进程并没有提高速度反而降低了速度。

我暂时是没有明白问题出在了哪里。如果后续还有添加实验验证会继续补充。
在这里插入图片描述

  • 9
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
### 回答1: yolov5中的test.pydetect.py是两个Python脚本,用于在训练好的模型进行目标检测。 test.py主要用于测试模型的性能,可以通过设置不同的参数来测试不同的模型,例如模型的大小、批量大小、数据集等。它会输出模型的精度、召回率和F1分数等指标,以及检测结果的可视化图像。 detect.py则是用于实际的目标检测应用,它可以读取图像或视频文件,并在其中检测出目标物体。它也可以设置不同的参数,例如置信度阈值、非极大值抑制等,以控制检测结果的准确性和速度。它会输出检测结果的可视化图像,并可以将结果保存到文件中。 ### 回答2: YOLOv5是一种高效的目标检测算法,它可以在高分辨率下快速、准确地检测多个物体。在YOLOv5中,test.pydetect.py是两个非常重要的文件,下面我就分别对它们进行介绍: 一、test.py test.pyYOLOv5中的一个重要文件,它主要用于在给定的权重下测试模型的精度。 在使用test.py时,需要指定检测的图片或视频路径,还需要输入模型权重路径。同时还可以设置一些参数,例如置信度阈值和非极大值抑制阈值等。test.py还提供了一些可视化的选项,例如显示结果框、预测框、类别等。 使用test.py可以对训练好的模型进行测试,检查它的准确度和可靠性,有助于我们更好地选择和调整模型。 二、detect.py detect.pyYOLOv5中的另一个重要文件,它主要用于在给定的权重下检测图像或视频中的对象。 在使用detect.py时,需要指定待检测文件的路径和需要使用的权重文件。和test.py一样,还可以设置一些参数,例如置信度阈值和非极大值抑制阈值等。不同的是,detect.py可以支持实时摄像头检测,也可以保存检测结果为视频或图片。 detect.pyYOLOv5中非常重要的一个文件,它可以快速、准确地检测出图像或视频中的目标,为后续的处理提供了很大的帮助。 总结: test.pydetect.pyYOLOv5中非常重要的文件,它们分别用于模型测试和目标检测使用它们可以检查模型的精度和可靠性,也可以实现快速、准确地目标检测。这两个文件的使用非常灵活,可以根据具体的应用场景灵活选择和调整参数。 ### 回答3: yolov5是一种目标检测算法,它的最新版本为yolov5s。其中,yolov5中的test.pydetect.py是两个重要的脚本文件,下面我将分别进行介绍。 1. test.py test.pyyolov5中用于测试的脚本文件。它主要用于将训练得到的模型应用于测试集或者用户上传的图像上,进行目标检测以及预测。该脚本具有较高的灵活性,可以通过命令行设置多个参数,以满足不同情况下的需求。 test.py主要的参数包括: - weights:该参数用于指定模型的权重路径 - source:该参数用于指定待测试的图像源,可以是单张图片、视频文件或者相机输入 - img-size:该参数用于指定输入图像的大小 - conf-thres:该参数用于指定置信度阈值 - iou-thres:该参数用于指定IoU(交并比)阈值 通过运行test.py脚本,我们可以很方便地对模型进行测试,获得目标检测的结果。 2. detect.py detect.pyyolov5中用于检测的脚本文件。它主要用于对单张图片进行目标检测,是test.py的一种特化形式。detect.py的参数设置与test.py类似,也是通过命令行设置。 detect.py主要的参数包括: - weights:该参数用于指定模型的权重路径 - img:该参数用于指定待检测的图像路径 - conf:该参数用于指定置信度阈值 - iou:该参数用于指定IoU阈值 - classes:该参数用于指定待检测的目标类别 使用detect.py脚本可以很方便地对单张图片进行目标检测,给出目标框以及类别信息。 综上所述,test.pydetect.pyyolov5中非常重要的两个脚本文件,它们分别用于测试和检测,具有很高的灵活性和有效性,为yolov5的应用提供了很大的便利性和可靠性。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值