Yolov5学习笔记-预测部分

一些使用tips:

detect.py运行指令——命令行方式

1
2
3
4
5
6
7
python detect.py --source 0  # webcam
img.jpg # image
vid.mp4 # video
path/ # directory
path/*.jpg # glob 匹配该文件夹下的所有jpg图片
'https://youtu.be/Zgi9g1ksQHc' # YouTube
'rtsp://example.com/media.mp4' # RTSP, RTMP, HTTP stream

格式如上,“–”后面为传入的参数,通过命令行的方式往执行的.py文件中传入参数。

以detect.py为例,运行detect.py文件肯定是要有默认的输入参数的,在我所使用的YOLOv5代码下,以右键运行detect.py文件,默认检测的是目录””/yolov5-master/data/images”下的两张图片。

通过上述代码的命令行指令,可以给detect.py的输入指定图片、视频或者某一个路径下的所有文件或某一个路径下的所有图片,当然还有视频或直接调用电脑或手机的摄像头实现实时检测。

运行detect.py需要输入的参数

示例代码:

1
python detect.pu --source data/images --weights yolov5s.pt --conf 0.25
参数 解释
source 输入来源
weights 权重
conf(confidence) 失信度

运行结果如下:

detect.py相关代码学习

参数&解释

接上表继续学习该代码中的参数

参数 解释
–imgsz/–img/–img-size 输入的图片尺寸
–conf-thres 置信度
–iou-thres 交并比
–view-img 实时显示结果
–save-txt 保存检测结果
–save-conf 保存置信度
–save-crop 保存预测结果
–classes 可以检测的类别
–agnostic-nms 数据增强
–augment 增强检测
–project 结果保存的位置
–name 保存结果的名字
–exist-ok 依然保存在默认文件夹,而不新增文件夹

代码解析

1
parser.add_argument('--imgsz', '--img', '--img-size', nargs='+', type=int, default=[640], help='inference size h,w')

虽然指定了图片尺寸,但比如输入1200*800的图片,输出依然为该尺寸,只是在检测过程中会对图片进行裁剪、分割。(代码后面会还原图片尺寸)。

1
parser.add_argument('--conf-thres', type=float, default=0.25, help='confidence threshold')

默认值为0.25,表示只有当置信度大于0.25时,才会去标注它。值越小,检测标注的东西越多,但可信度就会降低,极容易出现误判。

1
parser.add_argument('--iou-thres', type=float, default=0.45, help='NMS IoU threshold')

有关IOU的知识在另一篇blog中有详细解释。default=1表示框与框完全重合才能合并,结果中会有多个框出现。default=0表示只要框与框有交集部分就可以合并,故结果中没有重合的框。

设置默认值default=1,表示只有当检测框与标注框完全重合时才会合并,因此运行后检测的效果会看到许多框框,这种完全重合的情况是很难满足的。在不同框下,一个物体被多次重复检测。如下图所示:

当默认值default=0时,检测效果如下:

1
parser.add_argument('--view-img', action='store_true', help='show results')

在运行detect.py时,若加上上行代码参数,则表示在运行此代码时会在检测的同时显示检测的效果。

一般执行时是默认没有的,若需要显示,有两种方法:一种通过命令行,输入如下代码:

1
2
conda activate pytorch
python detect.py --view-img

我们不喜欢在命令行写指令,那么可以编辑该文件的运行配置,在[形参Parameters]位置上添加参数,如下图所示:

1
parser.add_argument('--save-txt', action='store_true', help='save results to *.txt')

保存检测的结果,内容为检测标注的值。

1
parser.add_argument('--classes', nargs='+', type=int, help='filter by class: --classes 0, or --classes 0 2 3')

例如设置classes=0并运行代码,则表示之间这个类别。

查看detect.py参数的默认值

通过在调试可以看到所有参数的默认值