ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

挑战学院科创项目——初尝yolov5

2021-12-27 23:34:26  阅读:268  来源: 互联网

标签:yolov5 help 初尝 科创 parser argument -- add true


悲催的期末周终于过去,要继续做学院科技创新了,自己下载了个yolov5来玩一玩。

基本概念

  • 单个物体的图片\(\Longrightarrow\)物体分类

    多个物体\(\Longrightarrow\)目标检测

  • NMS(Non-Maximum Suppression)和IOU(Intersection over Union):目标检测时会在图像上生成很多的候选框,然后把这些候选框进行特征提取后送入分类器,得到候选框的得分。将得分全部进行排序,选取得分最高的那个框,接下来计算其他的框与当前框的重合程度,用iou衡量:$$IOU = \frac{A\cap B}{A\cup B}$$如果重合程度大于一定阈值就将其删除。

  • ONNX

ONNX是一种针对机器学习所设计的开放式的文件格式,用于存储训练好的模型。它使得不同的人工智能框架(如Pytorch, MXNet)可以采用相同格式存储模型数据并交互。 ONNX的规范及代码主要由微软,亚马逊 ,Facebook 和 IBM 等公司共同开发,以开放源代码的方式托管在Github上。目前官方支持加载ONNX模型并进行推理的深度学习框架有: Caffe2, PyTorch, MXNet,ML.NET,TensorRT 和 Microsoft CNTK,并且 TensorFlow 也非官方的支持ONNX。---维基百科

detect.py文件

  • 运行:命令行中指定参数或在pycharm中设置运行参数
 python detect.py --source 0  # webcam
                            file.jpg  # image 
                            file.mp4  # video
                            path/  # directory
                            path/*.jpg  # glob
                            'https://youtu.be/NUsoVlDFqZg'  # YouTube video
                            'rtsp://example.com/media.mp4'  # RTSP, RTMP, HTTP stream #可以用于摄像头实时检测
  • parse_opt()参数:
def parse_opt():
    parser = argparse.ArgumentParser()
    parser.add_argument('--weights', nargs='+', type=str, default=ROOT / 'yolov5s.pt', help='model path(s)') # 加载的权重(选用的模型)
    parser.add_argument('--source', type=str, default=ROOT / 'data/images', help='file/dir/URL/glob, 0 for webcam') # 测试数据的地址
    parser.add_argument('--imgsz', '--img', '--img-size', nargs='+', type=int, default=[640], help='inference size h,w') #图片resize,再送入神经网络,最好与选取的模型匹配
    parser.add_argument('--conf-thres', type=float, default=0.25, help='confidence threshold') # 置信度,显示检测框的最小概率
    parser.add_argument('--iou-thres', type=float, default=0.45, help='NMS IoU threshold') # NMS IOU阈值,标志框和框之间交集大小
    parser.add_argument('--max-det', type=int, default=1000, help='maximum detections per image')  #最大侦测目标数
    parser.add_argument('--device', default='', help='cuda device, i.e. 0 or 0,1,2,3 or cpu') # 设备编号
    # 以下参数没有默认值,在命令行中指定则为true;也可以在pycharm中设置运行/调试参数
    parser.add_argument('--view-img', action='store_true', help='show results') # 展示推理后的图片,实时看到检测效果
    parser.add_argument('--save-txt', action='store_true', help='save results to *.txt') # 结果保存为txt
    parser.add_argument('--save-conf', action='store_true', help='save confidences in --save-txt labels') # 在txt中保存相应置信度
    parser.add_argument('--save-crop', action='store_true', help='save cropped prediction boxes')
    parser.add_argument('--nosave', action='store_true', help='do not save images/videos')
    parser.add_argument('--classes', nargs='+', type=int, help='filter by class: --classes 0, or --classes 0 2 3') # 过滤类型,只看到classes分类的图片
    parser.add_argument('--agnostic-nms', action='store_true', help='class-agnostic NMS') # 让不同类别间也可以做NMS
    parser.add_argument('--augment', action='store_true', help='augmented inference') # 推理增强
    parser.add_argument('--visualize', action='store_true', help='visualize features')
    parser.add_argument('--update', action='store_true', help='update all models') # 去除模型中优化器、ema等不必要的部分,减小模型大小
    parser.add_argument('--project', default=ROOT / 'runs/detect', help='save results to project/name') # 结果保存的目录
    parser.add_argument('--name', default='exp', help='save results to project/name') # 结果保存的文件夹名
    parser.add_argument('--exist-ok', action='store_true', help='existing project/name ok, do not increment') # 不新建文件夹,在之前的文件夹下保存结果
    parser.add_argument('--line-thickness', default=3, type=int, help='bounding box thickness (pixels)') # 边界框的厚度
    parser.add_argument('--hide-labels', default=False, action='store_true', help='hide labels') # 隐藏每个目标的标签
    parser.add_argument('--hide-conf', default=False, action='store_true', help='hide confidences') # 隐藏每个目标的置信度
    parser.add_argument('--half', action='store_true', help='use FP16 half-precision inference') # 利用FP16半精度推理提高速度
    parser.add_argument('--dnn', action='store_true', help='use OpenCV DNN for ONNX inference')
    opt = parser.parse_args()
    opt.imgsz *= 2 if len(opt.imgsz) == 1 else 1  # expand
    print_args(FILE.stem, opt)
    return opt

调试小技巧:下断点查看opt,预览参数

Debug

1.下载模型报错解决办法:下载模型提示需要设置环境变量,在 detect.py 的起始导入os库,设置环境变量。

import os
os.environ['<变量名>'] = True

2.提示”AssertionError: Image Not Found C:\留存文件\yolov5-master\data\images\bus.jpg“,原因是路径中含有中文文件夹名,改成英文即可。

初次尝试

第一次就用我去蹦床乐园玩耍的视频好了,先使用默认参数:

--source data/images/me.mp4 --view-img

可以看到效果并不理想,检测框断断续续,有时还会被检测成椅子。。重新设置下置信度和iou阈值再试试:

--source data/images/me.mp4 --weight 'yolov5l.pt' --conf 0.1 --iou 0.15 --view-img

发现更容易被检测到了,但总是被检测成椅子,可能相比起人,这个造型更像椅子吧。。使用更大一点的模型试一试:

--source data/images/me.mp4 --weight yolov5m.pt --conf 0.15 --view-img

可以感受到虽然调高了置信度,但推理速度还是变慢了很多。

虽然趴在墙上的时候还是认不出我是人,但好在不会再被检测成椅子了,检测框的显示也稳定了许多。


待续...

标签:yolov5,help,初尝,科创,parser,argument,--,add,true
来源: https://www.cnblogs.com/zouludaxia/p/15738362.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有