YOLO-V5 算法和代码解析系列(一)—— 快速开始

运行环境配置

  环境配置的官方教程如下,如果一些库安装失败,导致安装中断,可以单独安装一些库,比如 Pytorch,然后再执行下列安装步骤,具体如下:

在这里插入图片描述
  个人建议:在上述安装之前,先安装 Anaconda,然后创建虚拟环境。Anconda 以及相关 Pytorch 开发环境配置,可以参考本人的博客文章,相关的链接如下,

  1. Ubuntu:https://blog.csdn.net/kxh123456/article/details/121331727
  2. Windows:https://blog.csdn.net/kxh123456/article/details/110267660

注意几个问题:

  1. 下载特定版本的 yolo-v5:git clone -b v6.1 https://github.com/ultralytics/yolov5.git
  2. 最好是用 【git clone】的方式下载,这样工程在被改动的时候,会有标记,很容易恢复到原始版本.
  3. 版本重要更新:【v6.2 】添加了分类模型,【v7 】添加了分割模型.
  4. 当前系列教程解析的代码版本:【v6.1】.

Demo

  1. 在线推理
    运行下面的代码,模型 【yolov5s.pt】自动从 【“ultralytics/yolov5”】下载,测试图片也是从网上下载。完整代码如下:

    import torch
    
    # Model
    model = torch.hub.load('ultralytics/yolov5', 'yolov5s')  # or yolov5n - yolov5x6, custom
    
    # Images
    img = 'https://ultralytics.com/images/zidane.jpg'  # or file, Path, PIL, OpenCV, numpy, list
    
    # Inference
    results = model(img)
    
    # Results
    results.print()  # or .show(), .save(), .crop(), .pandas(), etc.
    

    运行后,如果出现如下的错误,表示无法访问 Github,

    在这里插入图片描述
    如果可以正常访问【Github】 ,可以正常推理,打印如下结果,

    在这里插入图片描述
    最后一行代码改为 results.show() ,得到如下可视化结果,

在这里插入图片描述

  1. 离线推理
    如果无法访问 【Github】,也可以把模型和测试图片通过其它方式下载到本地,进行离线推理,具体代码修改如下,

    import torch
    
    # Model
    # model = torch.hub.load('ultralytics/yolov5', 'yolov5s')  # or yolov5n - yolov5x6, custom
    model = torch.hub.load('./', 'yolov5s', source='local')  # or yolov5n - yolov5x6, custom
    
    # Images
    # img = 'https://ultralytics.com/images/zidane.jpg'  # or file, Path, PIL, OpenCV, numpy, list
    img = 'data/images/zidane.jpg'  # or file, Path, PIL, OpenCV, numpy, list
    
    
    # Inference
    results = model(img)
    
    # Results
    results.show()  # or .show(), .save(), .crop(), .pandas(), etc.
    

    在这里插入图片描述

  2. detect.py
    官方教程如下图所示,可以是多种输入形式,
    在这里插入图片描述

    调用摄像头进行预测,命令如下,

    python detect.py --weights yolov5s.pt --source 0
    

    在这里插入图片描述

    推理单张图,命令如下,

    python detect.py --weights yolov5s.pt 
    	             --source D:\\DM2\\2DDetection\\datasets\\coco128\\images\\train2017\\000000000030.jpg
    

    在这里插入图片描述

    推理路径下的所有图片,运行命令和结果如下,

    python detect.py --weights yolov5s.pt 
    	             --source D:\\DM2\\2DDetection\\datasets\\coco128\\images\\train2017\\ 	
    

    在这里插入图片描述

    输入参数为网站视频链接,并进行推理,同时还会输出目标的数量(见终端打印内容),

    python detect.py --weights yolov5s.pt --source https://youtu.be/Zgi9g1ksQHc 	
    

    在这里插入图片描述

重新训练 YOLO-V5s

  为了快速验证工程的效果,只重新训练其中一个模型【yolo-v5s】。该模型大小适中,不至于消耗太长时间。当前教程的目的仅仅是为了重新训练一遍,【快速】验证工程的有效性。具体流程如下,

  1. 官方教程
    单卡、单机训练教程如下图所示,可以快速开始训练,验证项目是否可以正常训练。根据自己显卡的显存,需调整批次的大小,避免显存溢出。运行命令以及训练的可视化结果如下,
    在这里插入图片描述

  2. 运行【trian.py
    本机配置:Ubuntu18,batch=32(64,显存不够),2022-12-07,09:30AM 开始训练,2022-12-11,08:30AM 结束训练(大概4天训练完成)。运行后,终端打印内容如下,比如显卡型号,显存,训练集和测试集图片数量等内容,

    YOLOv5 🚀 v6.1-0-g3752807 torch 1.10.0 CUDA:1 (NVIDIA GeForce RTX 2080 Ti, 11019MiB)

    train:Scanning ‘/home/slam/kxh-1/2DDection/datasets/coco/train2017. cache’ images and labels … 117266 found, 1021 missing, 0 empty, 0 corrupt: 100%|████████████████████████████████████████████████████████████████████████████████|
    118287/118287 [00:00<?, ?it/s]
    val: Scanning’/home/slam/kxh-1/2DDection/datasets/coco/val2017. cache’ images and labels… 4952 found, 48 missing, 0 empty, 0 corrupt: 100%|████████████████████████████████████████████████████████████████████████████████████████████|
    5000/5000 [00:00<?, ?it/s]

    训练的命令如下,包含第一次开启训练,以及训练中断后,恢复训练,

    # 开启训练
    python train.py --data coco.yaml --epochs 300 --weights '' --cfg yolov5s.yaml --batch-size 32
    
    # 训练中断,重新恢复训练,resume:添加模型的路径
    python train.py --data coco.yaml --epochs 300 --weights '' --cfg yolov5s.yaml --batch-size 32 
     				--resume runs/train/exp/weights/last.pt
    
    

    训练开始后的部分截图如下图所示,

    在这里插入图片描述
    在这里插入图片描述

    如上图所示,训练【epoch=300】后,【yolo-v5s】训练完成。最终打印结果如下,

            Class     Images     Labels          P          R     mAP@.5 mAP@.5:.95: 100%|██████████| 79/79 [00:34<00:00,  2.29it/s]                                                                                                                              
              all       5000      36335      0.688      0.508      0.559       0.36
           person       5000      10777      0.768      0.683      0.759      0.477
          bicycle       5000        314      0.693      0.438      0.521       0.27
              car       5000       1918      0.681      0.572       0.62      0.373
       motorcycle       5000        367      0.759      0.586      0.658      0.361
         airplane       5000        143      0.884      0.755      0.846      0.575
              bus       5000        283      0.826      0.707      0.777      0.602
            train       5000        190      0.903      0.768      0.839      0.585
            truck       5000        414      0.615      0.403      0.487      0.289
             boat       5000        424      0.634       0.37      0.452       0.21
    traffic light       5000        634      0.638      0.476      0.507      0.237
     fire hydrant       5000        101      0.825      0.713      0.814      0.601
        stop sign       5000         75      0.785       0.68      0.722      0.601
    parking meter       5000         60       0.73      0.533      0.603      0.419
            bench       5000        411      0.632      0.268      0.331      0.204
             bird       5000        427      0.657      0.431       0.48      0.285
              cat       5000        202      0.827      0.748      0.814      0.557
              dog       5000        218      0.786      0.674      0.729      0.546
            horse       5000        272      0.766      0.695      0.748      0.525
            sheep       5000        354      0.629      0.681      0.698      0.459
              cow       5000        372      0.712      0.675      0.726      0.478
         elephant       5000        252      0.743      0.813      0.809      0.556
             bear       5000         71      0.852      0.817      0.857       0.63
            zebra       5000        266      0.886      0.815      0.898      0.623
          giraffe       5000        232      0.915      0.831      0.901      0.658
         backpack       5000        371      0.579      0.259      0.259      0.124
         umbrella       5000        407      0.693       0.55      0.596      0.348
          handbag       5000        540      0.615      0.181      0.223      0.111
              tie       5000        252      0.691      0.417      0.486      0.262
         suitcase       5000        299      0.603      0.472      0.544      0.337
          frisbee       5000        115      0.786      0.783      0.813      0.601
             skis       5000        241      0.691      0.357      0.413      0.169
        snowboard       5000         69      0.579      0.406      0.427      0.233
      sports ball       5000        260      0.691      0.588      0.599      0.387
             kite       5000        327      0.615      0.581      0.601      0.377
     baseball bat       5000        145      0.651      0.469      0.505       0.23
    baseballglove       5000        148      0.734      0.534      0.582      0.327
       skateboard       5000        179      0.825      0.686      0.699      0.456
        surfboard       5000        267       0.65      0.487      0.522      0.284
    tennis racket       5000        225      0.771      0.687      0.739      0.419
           bottle       5000       1013       0.65      0.449      0.516      0.313
       wine glass       5000        341      0.691      0.428      0.513      0.296
              cup       5000        895      0.641      0.509      0.551       0.37
             fork       5000        215      0.586      0.344      0.429      0.247
            knife       5000        325      0.551      0.191      0.244      0.122
            spoon       5000        253      0.494      0.178      0.212      0.112
             bowl       5000        623      0.663      0.478      0.534      0.364
           banana       5000        370      0.537      0.335      0.338      0.182
            apple       5000        236      0.477      0.286      0.252      0.165
         sandwich       5000        177      0.643      0.469      0.501      0.325
           orange       5000        285      0.474      0.361      0.368      0.276
         broccoli       5000        312      0.551      0.359      0.379      0.178
           carrot       5000        365      0.415      0.301      0.293       0.17
          hot dog       5000        125      0.659      0.464      0.501      0.317
            pizza       5000        284      0.754      0.644      0.683      0.475
            donut       5000        328      0.632      0.509      0.548      0.401
             cake       5000        310      0.627      0.487      0.519      0.323
            chair       5000       1771      0.624      0.385      0.455      0.256
            couch       5000        261      0.749      0.479      0.616      0.419
     potted plant       5000        342      0.586      0.435      0.446      0.231
              bed       5000        163      0.804      0.454      0.609      0.376   
     dining table       5000        695      0.627      0.332      0.386      0.233
           toilet       5000        179      0.741      0.693      0.785      0.603
               tv       5000        288      0.742       0.66      0.734       0.51
           laptop       5000        231      0.772      0.628      0.692       0.52
            mouse       5000        106      0.777      0.764      0.804      0.585
           remote       5000        283      0.525       0.36      0.402      0.206
         keyboard       5000        153       0.69      0.608      0.679      0.455
       cell phone       5000        262      0.598      0.458      0.488      0.293
        microwave       5000         55      0.708      0.636      0.726      0.519
        	 oven       5000        143      0.657      0.448      0.512      0.299
          toaster       5000          9      0.998      0.444      0.587      0.399
             sink       5000        225      0.659      0.493      0.535       0.34
     refrigerator       5000        126      0.789      0.595      0.683      0.464
             book       5000       1129      0.486      0.157      0.215      0.084
            clock       5000        267      0.778      0.689      0.712      0.477
             vase       5000        274      0.596      0.496      0.531       0.34
         scissors       5000         36      0.477       0.25      0.269       0.18
       teddy bear       5000        190      0.715      0.529       0.63      0.409
       hair drier       5000         11          1          0      0.017     0.0113
       toothbrush       5000         57       0.54      0.281      0.259      0.156
       
    Evaluating pycocotools mAP... saving runs/train/exp/_predictions.json...
    loading annotations into memory...
    Done (t=0.33s)
    creating index...
    index created!
    Loading and preparing results...
    DONE (t=6.45s)
    creating index...
    index created!
    Running per image evaluation...
    Evaluate annotation type *bbox*
    DONE (t=60.67s).
    Accumulating evaluation results...
    DONE (t=12.01s).
     Average Precision  (AP) @[ IoU=0.50:0.95 | area=   all | maxDets=100 ] = 0.373
     Average Precision  (AP) @[ IoU=0.50      | area=   all | maxDets=100 ] = 0.566
     Average Precision  (AP) @[ IoU=0.75      | area=   all | maxDets=100 ] = 0.405
     Average Precision  (AP) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = 0.219
     Average Precision  (AP) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = 0.423
     Average Precision  (AP) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = 0.482
     Average Recall     (AR) @[ IoU=0.50:0.95 | area=   all | maxDets=  1 ] = 0.307
     Average Recall     (AR) @[ IoU=0.50:0.95 | area=   all | maxDets= 10 ] = 0.514
     Average Recall     (AR) @[ IoU=0.50:0.95 | area=   all | maxDets=100 ] = 0.569
     Average Recall     (AR) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = 0.381
     Average Recall     (AR) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = 0.628
     Average Recall     (AR) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = 0.722
    Results saved to runs/train/exp
    
  3. 运行【val.py

    python val.py --weights runs/train/exp/weights/best.pt --data coco.yaml --img 640
    

    运行评估脚本,结果如下:

    val: data=/home/slam/kxh-1/2DDection/test/yolov5/data/coco.yaml,
    weights=['runs/train/exp/weights/best.pt'], 
    batch_size=32, imgsz=640, conf_thres=0.001, iou_thres=0.6, 
    task=val, device=, workers=8, single_cls=False, augment=False, 
    verbose=False, save_txt=False, save_hybrid=False, save_conf=False, 
    save_json=True, project=runs/val, name=exp, exist_ok=False,half=False, dnn=False
    
    YOLOv5 🚀 v6.1-0-g3752807 torch 1.10.0 CUDA:0 (NVIDIA GeForce RTX 2080 Ti, 11019MiB)
    
    Fusing layers... 
    Model Summary: 213 layers, 7225885 parameters, 0 gradients, 16.4 GFLOPs
    val: Scanning '/home/slam/kxh-1/2DDection/datasets/coco/val2017.cache' images and labels... 
    4952 found, 48 missing, 0 empty, 0 corrupt: 100%|█████████████████████████████████| 5000/5000 
    [00:00<?, ?it/s]
        Class     Images     Labels          P          R     mAP@.5 mAP@.5:.95: 100%|██████████| 157/157 		[00:40<00:00,  3.85it/s]                                                                 
          all       5000      36335      0.668      0.523      0.563      0.363
    Speed: 0.1ms pre-process, 2.5ms inference, 1.5ms NMS per image at shape (32, 3, 640, 640)
    
    Evaluating pycocotools mAP... saving runs/val/exp3/best_predictions.json...
    loading annotations into memory...
    Done (t=0.84s)
    creating index...
    index created!
    Loading and preparing results...
    DONE (t=5.40s)
    creating index...
    index created!
    Running per image evaluation...
    Evaluate annotation type *bbox*
    DONE (t=58.44s).
    Accumulating evaluation results...
    
    DONE (t=11.82s).
     Average Precision  (AP) @[ IoU=0.50:0.95 | area=   all | maxDets=100 ] = 0.373
     Average Precision  (AP) @[ IoU=0.50      | area=   all | maxDets=100 ] = 0.570
     Average Precision  (AP) @[ IoU=0.75      | area=   all | maxDets=100 ] = 0.403
     Average Precision  (AP) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = 0.218
     Average Precision  (AP) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = 0.423
     Average Precision  (AP) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = 0.482
     Average Recall     (AR) @[ IoU=0.50:0.95 | area=   all | maxDets=  1 ] = 0.308
     Average Recall     (AR) @[ IoU=0.50:0.95 | area=   all | maxDets= 10 ] = 0.511
     Average Recall     (AR) @[ IoU=0.50:0.95 | area=   all | maxDets=100 ] = 0.562
     Average Recall     (AR) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = 0.376
     Average Recall     (AR) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = 0.620
     Average Recall     (AR) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = 0.715
    Results saved to runs/val/exp3
    
    
  4. 训练结果可视化
    借助 tensorboard,训练可视化结果如下所示,

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

  5. 结果评估
    重新训练【yolo-v5s】后,得到如下表的结果,很容易可以达到官方训练的水平。表明模型具有极好的稳定性,可复现性,非常适合实际应用,

    yolo-v5simage sizemAP(val)
    0.5:0.95
    mAP(val)
    0.5
    训练时间batch size
    官方发布64037.456.82 days V10064
    重新训练64037.357.04 days 2080Ti32
  • 0
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
yolo-v5系列算法是一种基于深度学习的目标检测算法,其通过将输入图像划分为一系列网格单元,并对每个单元预测出目标的类别和边界框,从而实现对图像中目标的检测和定位。 模型移植是指将训练好的yolo-v5模型从一个平台或框架移植到另一个平台或框架的过程。在实际应用中,由于硬件设备或软件平台的限制,往往需要将模型移植到适用于特定平台的框架上,以便进行推理和应用。 模型移植的主要步骤包括模型导出、模型转换和模型部署。首先,需要将yolo-v5模型导出为通用的模型文件,例如ONNX或TensorFlow格式。然后,利用模型转换工具将导出的模型文件转换为目标平台所支持的模型格式,如Tensorflow Lite或Caffe等。最后,将转换后的模型部署到目标平台上,以便进行推理和应用。 模型移植的关键问题是确保模型在移植过程中的准确性和效率。为了保持模型的准确性,需要注意模型转换过程中参数的正确性和一致性。同时,还需要针对目标平台的硬件设备和软件框架进行优化,以提高模型在目标平台上的推理速度和性能。 总而言之,yolo-v5系列算法的模型移植是将训练好的模型从一个平台移植到另一个平台的过程。通过合理的模型导出、转换和部署步骤,可以将yolo-v5模型应用于不同的硬件设备和软件平台,以实现目标检测和定位的应用。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值