Yolov7 架构简介

在深度学习的网路架构中,主要由三个部分组成:Backbone、Neck、Head。

1. Backbone

Backbone 是网路架构中的骨干,负责提取特徵,也就是从输入图片中获取资讯。在 Yolov7 中,使用的是 ELAN 和 E-ELAN 来进行特徵提取。

2. Neck

Neck 位于 Backbone 和 Head 之间,负责融合不同尺度的特徵,以便更好地完成 Head 的任务。在 Yolov7 中,使用的是 CSPSPP+(ELAN, E-ELAN) 和 PAN。

3. Head

Head 是网路架构中预测的部分,它根据 Backbone 和 Neck 提取的特徵进行输出预测。在 Yolov7 中,使用的是 YOLOR 来进行预测。

需要先掌握的技术

为了顺利完成所有步骤,建议先掌握以下技术:

1. Linux 基本操作

首先需要熟悉 Linux 环境,这包括如何在终端上输入命令,如 cd、ls 这些基本操作,还有如何安装和更新软件包。这些操作在安装 Yolov7 的过程中会经常用到。

2. Git 使用

我们会用 Git 从 GitHub 上下载 Yolov7 的代码,所以你需要了解如何使用 git clone 来获取专案,并知道如何在专案目录中进行操作。

3. Python 基础

你需要会使用 Python,特别是如何使用 pip 来安装套件。还要懂得一些基本的 Python 语法,因为之后的模型训练和推理都会用到 Python。

4. 深度学习框架 (PyTorch)

Yolov7 是基于 PyTorch 的,所以你需要先了解 PyTorch 框架,特别是如何安装 PyTorch,以及如何检查安装是否支援 GPU,这会直接影响模型运行效率。

5. GPU 和 CUDA 的基础

如果你有 NVIDIA GPU,我们会用到 CUDA 来加速运算。你需要知道如何确认 CUDA 和 GPU 是否正常运行,以确保模型运行时高效。

6. 物件侦测的概念

了解物件侦测模型的基本原理,例如 YOLO 模型的工作原理,这将有助于你更好地理解 Yolov7 的架构。

7. 环境管理

建议使用虚拟环境(如 virtualenv 或 conda)来管理 Python 的依赖,以避免不同项目之间的套件冲突。

8. 基本除错能力

学会基本的问题排查能力非常重要。如果在安装过程中遇到依赖包错误或版本不兼容问题,你应该知道如何查看错误信息并解决问题。


这些技能是学习 Yolov7 安装和使用过程中的基础知识。有了这些準备,你将发现整个过程更加顺利,并且能更好理解每一步的意义。我也将会在往后整理相关技术!!!!!

Yolov7 安装流程 - Linux

在 Linux 中安装 Yolov7,需依序执行以下指令:

  • 更新基本套件:
    $ sudo apt update

  • 安装 pip:
    $ sudo apt install -y python3-pip

  • 更新 pip:
    $ pip3 install --upgrade pip

  • 下载 Yolov7:
    $ git clone https://github.com/WongKinYiu/yolov7.git

  • 进入 Yolov7 目录并检视需求档案:
    $ cd yolov7
    $ vim requirements.txt

  • 安装必要的系统套件:
    $ sudo apt install -y libfreetype6-dev

  • 安装 requirements.txt 中的套件:
    $ pip3 install -r requirements.txt

  • 硬体要求:

    Yolov7 需要至少 4GB 以上的 GPU 来进行推理和训练,建议在 NVIDIA 驱动和 CUDA 安装完毕后进行硬体检查。

    Python 版本:

    确保 Python 的版本在 3.6 以上,否则可能会遇到兼容性问题。

    检查 Python 版本

    ```bash
    $ python3 --version

    测试一下能不能正常推理:

    ```bash
    python detect.py --weights yolov7.pt --conf 0.25 --img-size 640 --source inference/images/horses.jpg
    ```

    成功辨识物体!!!!

    模型训练–训练资料準备

  • 训练资料集分成三个部分:

    • 训练集 (training set)
    • 验证集 (validation set)
    • 测试集 (test set)
  • 常使用的分配比例:

    • 70% train, 15% val, 15% test
    • 80% train, 10% val, 10% test
    • 60% train, 20% val, 20% test

    没有绝对的比例,需要透过测试得到精度较高的比例。

  • 训练资料準备:

    • 影像档 (.jpg, .png)
    • 标记档 (.txt)

    标记档可透过 Labelimg 工具来产生。

  • Labelimg 使用指南

  • 框选并标注标籤:
    对所有图片进行框选并为每个物体标注相应的标籤。

  • 标记档产生:
    每一张图片会生成一个对应的 .txt 档案,该档案会储存该图片的标籤资讯。

  • 标记档内容格式:
    以下图为例:

    • 0 表示第 0 个标籤(类别)
    • 后面的数字代表框选方框的四个角的位置(通常以比例形式表示)。
  • 多标籤支持:
    一张图片中可以有多个标籤,每个物体都可单独标注并储存在同一个 .txt 档案中。

  • 安装 labelImg:

    $ sudo apt install labelImg

    启动 labelImg:

    CMD输入labelImg启动labelImg

    $ labelImg

    图片资料集标注:

    使用Open Dir开启预训练的图片位置在Change Save Dir执行与Open Dir一样的动作按照下图启动自动储存功能

    按一下PascalVOC改成下图YOLO以符合YOLO的标籤格式

    按下Create RectBox框选预辨识的位置,会跳出预定义的Label清单,也就是刚刚我们输入至predefined_classes.txt的标籤

    将所有图片都框选并标注标籤这时每一张图片会产生1个txt,里面会储存图片标籤的讯息

    训练资料準备(使用以下资料集为例)

    PascalVOC 转 Yolo标籤格式 (上) (范例程式码)

    PascalVOC 转 Yolo标籤格式 (下) (范例程式码)

    这里有详细介绍如何做资料前处理

    Monkey, Cat and Dog detectionhttps://www.kaggle.com/datasets/tarunbisht11/yolo-animal-detection-small?resource=download

    这个资料集的标记资料需要转换成yolo格式可以参考我的另一篇文章

    建立一个YAML档:内容需要包含

    • 训练集 (training set)
    • 验证集 (validation set)
    • 测试集 (test set)
    • 多少类别 (number of classes)
    • 名称类别 (class names)

    这个yaml档我建立后放置在yolov7/data/根目录下:也可以用原先的coco.yaml来进行修改

    开始训练训练!!

    分类任务训练指令:

    $ python train.py --device 0 --batch-size 8 --data data/cat_dog_monkey.yaml --img 640 --cfg cfg/training/yolov7.yaml --weights yolov7.pt

    训练后的结果将会除存在此目录下:

    测试一下训练结果

    使用其他照片来测试训练结果:

    $ python detect.py --weights /home/ken/Desktop/program/yolov7/runs/train/exp2/weights/best.pt --conf 0.25 --img-size 640 --source /home/ken/Desktop/program/yolov7/monkey/monkey.png

    成功辨识到正在唸书的猴猴,而且效果很不错!!!!

    结语

    在原始的 GitHub 网页中,有非常详细的 YOLOv7 使用教学,而本文只是简单地示范如何快速搭建 YOLOv7 以进行分类任务。这是一个入门级的教学,目的是让读者能够快速上手。然而,YOLOv7 的设置中还有许多可调整的参数与细节,这些内容可以在 cfg/training/yolov7.yaml 文件中找到。该配置文件中包含了关于训练模型的各种选项,例如学习率、batch size、网络架构等。根据不同的应用场景,这些参数可以进行灵活的调整,以优化模型性能。

    参考

    https://github.com/WongKinYiu/yolov7