• 【深度学习】YOLOv5 工程落地部署过程 MNN


    概述

    兜兜转转又回到YOLOv5,YOLOv5的项目代码太易用了,开箱即用,工具多,效果好,谁能不爱呢。我这里对我使用YOLOv5 做简单的记录,以后自己看到能很快用起来就是本篇文章的目的,这篇文章我一直要干到MNN部署方式去。

    目标检测模型概述

    深度学习模型由于其拥有足够的表达能力,能够很好表达从输入数据到输出数据的映射关系,被广泛应用于各类场景中。图1中展现了深度学习模型在文字、图像、语音中的应用场景,其中图像是我个人最熟悉的,也是日常业务中最常遇到的场景。
    在这里插入图片描述
    图像领域有四个主要任务:图像分类、目标检测、图像分割、实例分割。
    在目标分割领域中,基本可以分为anchor based方法和anchor free方法,yolov5这个算法模型是anchor based方法,同时也是集大成者,包含目前目标检测领域中所有的比较有效的方法(FPN、PAN、SPP、CSP等),目前仍就是目标检测领域中最为优秀的算法之一。目前学术界的研究在目标检测领域主要分为两个方向,一是使用anchor free方法的模型(学术界普遍认为此种方法更加符合目标检测的原始动机,不带有那么高的监督性),二是使用 NLP领域的一些新模型(比如Transformer、多模态的一些研究)。
    就目前学术研究情况(靠学术前沿论坛获知)和各大公司所采用模型情况来看,yolov5依旧是一个值得长期选择和持有的模型。

    使用COCO2017体验YOLOv5

    其实可以用COCO128体验,过程与下面类似,我这里用COCO2017因为我已经下载过了。

    下载项目和权重

    项目代码:https://github.com/ultralytics/yolov5
    字模:https://github.com/ultralytics/yolov5/releases/download/v1.0/Arial.ttf
    权重:https://github.com/ultralytics/yolov5/releases

    或者直接全部用网盘下载:

    下载处理COCO2017数据

    https://github.com/ultralytics/yolov5中yolov5/data/scripts中get_coco.sh脚本就是下载COCO2017数据集的,四个压缩包,coco2017labels.zip是处理过的符合COCO的数据,train2017.zip、val2017.zip、test2017.zip是图片数据。原代码中含有解压的一些操作,下面的代码删除了解压的操作:

    #!/bin/bash
    # YOLOv5 🚀 by Ultralytics, GPL-3.0 license
    # Download COCO 2017 dataset http://cocodataset.org
    # Example usage: bash data/scripts/get_coco.sh
    # parent
    # ├── yolov5
    # └── datasets  # 官网的方式
    #     └── coco  ← downloads here
    
    # Download/unzip labels
    d='../datasets' # unzip directory
    url=https://github.com/ultralytics/yolov5/releases/download/v1.0/
    f='coco2017labels.zip' # or 'coco2017labels-segments.zip', 68 MB
    echo 'Downloading' $url$f ' ...'
    curl -L $url$f -o $f
    
    # Download/unzip images
    url=http://images.cocodataset.org/zips/
    f1='train2017.zip' # 19G, 118k images
    f2='val2017.zip'   # 1G, 5k images
    f3='test2017.zip'  # 7G, 41k images (optional)
    for f in $f1 $f2; do
      echo 'Downloading' $url$f '...'
      curl -L $url$f -o $f
    done
    wait # finish background tasks
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27

    最终形成的数据文件夹的层级目录如下图,其中 instances_val2017.json 应该是COCO2017的标注原文件是json版的,images里面的三个文件就是我自行解压进去的,labels里面的2个文件是COCO2017的标注文件yolo版本的。 train2017.txt 里面写了用于训练的图片的路径(相对路径), val2017.txt里面写了用于验证的图片的路径(相对路径), test-dev2017.txt里面写了用于测试的图片的路径(相对路径)。
    这里是一种方式,这里可以关注yolov5代码里对数据的解析:
    (1)images和labels的路径名是被yolov5识别的,目录里面对图片数据和标注数据这么去组织很方便后面使用yolov5;
    (2)数据使用train2017.txt 表达,train2017.txt 里面写的是图片数据的路径,而labels目录yolov5会自行寻找。
    在这里插入图片描述

    训练YOLOv5

    首先需要修改yolov5/data/中coco.yaml脚本,指定path,我这里直接指定为绝对路径/data/dong_xie/yolov5/data/scripts/coco,指定train、val、test对应到之前的三个txt文件,nc和names也是必须的。

    # YOLOv5 🚀 by Ultralytics, GPL-3.0 license
    # COCO 2017 dataset http://cocodataset.org by Microsoft
    # Example usage: python train.py --data coco.yaml
    
    # Train/val/test sets as 1) dir: path/to/imgs, 2) file: path/to/imgs.txt, or 3) list: [path/to/imgs1, path/to/imgs2, ..]
    path: /data/dong_xie/yolov5/data/scripts/coco  # dataset root dir
    train: train2017.txt  # train images (relative to 'path') 118287 images
    val: val2017.txt  # val images (relative to 'path') 5000 images
    test: test-dev2017.txt  # 20288 of 40670 images, submit to https://competitions.codalab.org/competitions/20794
    
    # Classes
    nc: 80  # number of classes
    names: ['person', 'bicycle', 'car', 'motorcycle', 'airplane', 'bus', 'train', 'truck', 'boat', 'traffic light',
            'fire hydrant', 'stop sign', 'parking meter', 'bench', 'bird', 'cat', 'dog', 'horse', 'sheep', 'cow',
            'elephant', 'bear', 'zebra', 'giraffe', 'backpack', 'umbrella', 'handbag', 'tie', 'suitcase', 'frisbee',
            'skis', 'snowboard', 'sports ball', 'kite', 'baseball bat', 'baseball glove', 'skateboard', 'surfboard',
            'tennis racket', 'bottle', 'wine glass', 'cup', 'fork', 'knife', 'spoon', 'bowl', 'banana', 'apple',
            'sandwich', 'orange', 'broccoli', 'carrot', 'hot dog', 'pizza', 'donut', 'cake', 'chair', 'couch',
            'potted plant', 'bed', 'dining table', 'toilet', 'tv', 'laptop', 'mouse', 'remote', 'keyboard', 'cell phone',
            'microwave', 'oven', 'toaster', 'sink', 'refrigerator', 'book', 'clock', 'vase', 'scissors', 'teddy bear',
            'hair drier', 'toothbrush']  # class names
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21

    然后就可以训练了,需要指定batch-size、data 、img、epochs 、weight 这几个关键参数。

    python train.py --batch-size 60 --data coco.yaml --img 640 --epochs 600 --weight /data/dong_xie/yolov5/weights/yolov5m.pt 
    
    • 1
  • 相关阅读:
    文字悬停效果
    初识Java 9-2 内部类
    字符函数和字符串函数(下)
    MindSpore社区群组介绍系列之二——SIG-DPP
    【ESP 保姆级教程】疯狂Node.js服务器篇 ——程序员的浪漫,给女朋友做个3d相册,实现公网访问(不需要ESP)
    【云原生】FlexCloud 云数据转HTTP开发接口操作
    EditorConfig + ESLint + Prettier 实现代码规范化
    QT数据库,实现数据库增删改查
    LeetCode0461.汉明距离 Go语言AC笔记
    Windows多线程编程
  • 原文地址:https://blog.csdn.net/x1131230123/article/details/125620342