YOLOv5学习笔记1
Yolov5学习笔记-预测部分
一些使用tips:
detect.py运行指令——命令行方式
1 | python detect.py --source 0 # webcam |
格式如上,“–”后面为传入的参数,通过命令行的方式往执行的.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 | conda activate pytorch |
我们不喜欢在命令行写指令,那么可以编辑该文件的运行配置,在[形参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参数的默认值
通过在调试可以看到所有参数的默认值