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
$ sudo apt install -y python3-pip
$ pip3 install --upgrade pip
$ git clone https://github.com/WongKinYiu/yolov7.git
$ cd yolov7
$ vim requirements.txt
$ sudo apt install -y libfreetype6-dev
$ 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