使用YOLOv7算法实现目标识别

9/15/2022 YOLOv7MS COCO数据集目标识别单阶段目标检测算法

# 1. 前言

# 1.1 YOLOv7算法基本介绍

# 1.1.1 YOLO与目标检测概述

YOLO 是You Only Look Once的缩写,它是一种使用深卷积神经网络学习的特征来检测物体的目标检测器,物体检测的两个步骤可以概括为:

  • 检测目标位置(生成矩形框)
  • 对目标物体进行分类

物体检测主流的算法框架大致分为one-stage与two-stage。two-stage算法代表有R-CNN系列,one-stage算法代表有Yolo系列。two-stage算法将步骤一与步骤二分开执行,输入图像先经过候选框生成网络(例如faster rcnn中的RPN网络),再经过分类网络;one-stage算法将步骤一与步骤二同时执行,输入图像只经过一个网络,生成的结果中同时包含位置与类别信息。two-stage与one-stage相比,精度高,但是计算量更大,所以运算较慢。

# 1.1.2 YOLOv7算法简介

2022年7月,YOLOv7来临,YOLOv7由YOLOv4的作者团队提出。官方版的YOLOv7相同体量下比YOLOv5精度更高,速度快120%(FPS),比 YOLOX 快180%(FPS),比 Dual-Swin-T 快1200%(FPS),比 ConvNext 快550%(FPS),比 SWIN-L快500%(FPS)。在5FPS到160FPS的范围内,无论是速度或是精度,YOLOv7都超过了目前已知的检测器,并且在GPU V100上进行测试, 精度为56.8% AP的模型可达到30 FPS(batch=1)以上的检测速率,与此同时,这是目前唯一一款在如此高精度下仍能超过30FPS的检测器。

官方yolov7

论文原文:YOLOv7: Trainable bag-of-freebies sets new state-of-the-art for real-time object detectors (opens new window)

项目地址:https://github.com/WongKinYiu/yolov7 (opens new window)

Colab官方示例:https://colab.research.google.com/github/WongKinYiu/yolov7/blob/main/tools/YOLOv7CoreML.ipynb (opens new window)

# 1.1.3 YOLOv7理论创新

[1] 扩展的高效层聚合网络

作者提出了一个网络结构E-ELAN使用expand、shuffle、merge cardinality来实现在不破坏原有梯度路径的情况下不断增强网络学习能力的能力。

扩展的高效层聚合网络

[2] 基于concatenate模型的模型缩放

作者提出了一个模型缩放方法,可以保持模型在初始设计时的特性并保持最佳结构。

基于concatenate模型的模型缩放

[3] 计划重参数化卷积

尽管RepConv在VGG基础上取得了优异的性能,但当将它直接应用于ResNet、DenseNet和其他架构时,它的精度将显著降低。作者使用梯度流传播路径来分析重参数化的卷积应该如何与不同的网络相结合。作者还相应地设计了计划中的重参数化的卷积。

计划重参数化卷积

[4] 标签匹配

过去,在深度网络的训练中,标签分配通常直接指GT,并根据给定的规则生成硬标签。然而,近年来,如果以目标检测为例,研究者经常利用网络预测输出的质量和分布,然后结合GT考虑,使用一些计算和优化方法来生成可靠的软标签。例如,YOLO使用边界框回归预测和GT的IoU作为客观性的软标签。在本文中,作者将网络预测结果与GT一起考虑,然后将软标签分配为“label assigner”的机制。

标签匹配

# 1.2 MS COCO数据集基本介绍

# 1.2.1 MS COCO数据集简介

MS COCO是一个非常大型且常用的数据集,其中包括了目标检测,分割,图像描述等。

官网地址:https://cocodataset.org/ (opens new window)

论文地址:https://arxiv.org/pdf/1405.0312.pdf (opens new window)

MS-COCO数据集

# 1.2.2 MS COCO数据集主要特性

MS COCO数据集主要特性如下:

  • Object segmentation: 目标级分割
  • Recognition in context: 图像情景识别
  • Superpixel stuff segmentation: 超像素分割
  • 330K images (>200K labeled): 超过33万张图像,标注过的图像超过20万张
  • 1.5 million object instances: 150万个对象实例
  • 80 object categories: 80个目标类别
  • 91 stuff categories: 91个材料类别
  • 5 captions per image: 每张图像有5段情景描述
  • 250,000 people with keypoints: 对25万个人进行了关键点标注

# 2. 测试环境及MS COCO数据集准备

# 2.1 测试服务器环境准备

# 2.1.1 服务器实验环境

系统环境及配置:系统版本是Ubuntu 18.04.6 LTS,128G内存,128TB存储。

$ cat /etc/issue             // 适用于ubuntu、debian等系统
$ cat /etc/redhat-release    // 适用于redhat、centos等系统
$ df -hl                     // 查看磁盘剩余空间
$ free -m                    // 查看剩余内存
1
2
3
4

GPU及CUDA环境:4张2080显卡,CUDA版本是10.2

$ nvidia-smi -q      // 查询GPU型号
$ nvidia-smi         // 查询GPU运行状态
$ nvcc --version     // 查看CUDA版本(安装PyTorch之类的深度学习库需要与CUDA驱动版本对应,不然连不上GPU)
1
2
3
2080显卡配置

# 2.1.2 准备conda环境

Conda 是一个开源的软件包管理系统和环境管理系统,用于安装多个版本的软件包及其依赖关系,并在它们之间轻松切换。 Conda 是为 Python 程序创建的,适用于 Linux,OS X 和Windows,也可以打包和分发其他软件。

$ curl -O https://repo.anaconda.com/archive/Anaconda3-2019.03-Linux-x86_64.sh   // 从官网下载安装脚本
$ bash Anaconda3-2019.03-Linux-x86_64.sh   // 阅读协议确认安装,安装完成后再输入yes以便不需要手动将Anaconda添加到PATH
$ conda create -n conda_env python=3.8     // 安装虚拟环境,conda_env是给虚拟环境起的别名(任意即可)
$ conda activate conda_env                 // 激活虚拟环境
$ conda deactivate                         // 关闭虚拟环境
$ conda config --set auto_activate_base false  // 取消每次启动自动激活conda的基础环境(base)
$ conda info --envs                        // 查询所有虚拟环境
$ conda remove -n conda_env --all          // 删除虚拟环境
1
2
3
4
5
6
7
8

# 2.2 MS COCO数据集准备

不用在这一节下载数据集,yolov7官方提供了下载脚本,可以把数据集和标注文件都弄好。我当时没看到,就自己弄的,实际只需要 2017 Train images、2017 Val images两个数据集即可,2017 Test images的可选。

# 2.2.1 下载并解压MS COCO数据集

MS COCO数据集(以coco2017数据集为例),主要下载三个文件:

  • 2017 Train images [118K/18GB]:训练过程中使用到的所有图像文件
  • 2017 Val images [5K/1GB]:验证过程中使用到的所有图像文件
  • 2017 Train/Val annotations [241MB]:对应训练集和验证集的标注json文件

coco2017数据集

download_coco_dataset.sh

#!/bin/bash

# 获取当前目录
base_path=$(cd `dirname $0`; pwd)

# 设置代理(国内服务器建议设置代理进行下载)
# export https_proxy=http://xxx.xxx.xxx.xxx:xxx

# 下载coco数据集
wget http://images.cocodataset.org/annotations/annotations_trainval2017.zip
wget http://images.cocodataset.org/zips/val2017.zip
wget http://images.cocodataset.org/zips/train2017.zip

echo "download success!"

# 解压annotations_trainval2017.zip
annotations_trainval2017_path="${base_path}/annotations_trainval2017"
zip_annotations_trainval2017_name="${base_path}/annotations_trainval2017.zip"
rm -fr ${annotations_trainval2017_path}
unzip -d ${annotations_trainval2017_path} ${zip_annotations_trainval2017_name}

# 解压val2017.zip
val2017_path="${base_path}/val2017"
zip_val2017_name="${base_path}/val2017.zip"
rm -fr ${val2017_path}
unzip -d ${val2017_path} ${zip_val2017_name}

# 解压train2017.zip
train2017_path="${base_path}/train2017"
zip_train2017_name="${base_path}/train2017.zip"
rm -fr ${train2017_path}
unzip -d ${train2017_path} ${zip_train2017_name}

# 删除原始压缩包
rm -f ${zip_annotations_trainval2017_name}
rm -f ${zip_val2017_name}
rm -f ${zip_train2017_name}

echo "unzip success!"
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
28
29
30
31
32
33
34
35
36
37
38
39

# 2.2.2 MS COCO数据集目录结构

下载并解压到coco2017_dataset目录下,可以得到如下目录结构:

.
├── annotations_trainval2017   // 对应训练集和验证集的标注json文件
│   └── annotations
│       ├── captions_train2017.json
│       ├── captions_val2017.json
│       ├── instances_train2017.json
│       ├── instances_val2017.json
│       ├── person_keypoints_train2017.json
│       └── person_keypoints_val2017.json
├── train2017  // 训练过程中使用到的所有图像文件
│   └── train2017
├── val2017    // 验证过程中使用到的所有图像文件
│   └── val2017     
└── download_coco_dataset.sh
1
2
3
4
5
6
7
8
9
10
11
12
13
14

注:解压后可以使用如下命令查看一下数据集的图片数量,train2017目录有118287张图片,val2017有5000张图片。

$ ls -l | grep "^-" | wc -l     // 统计当前目录下文件的个数(不包括子目录)
1

# 2.3 YOLOv7算法准备

# 2.3.1 下载YOLOv7算法源码

从官方Github仓库拉取代码

$ git clone https://github.com/WongKinYiu/yolov7.git
1

# 2.3.2 YOLOv7算法目录结构

.
├── cfg
├── data
├── deploy
├── detect.py    // 目标检测主程序
├── export.py
├── figure
├── hubconf.py
├── inference
├── LICENSE.md
├── models
├── paper        // 里面有yolov7论文
├── README.md
├── requirements.txt
├── scripts      // 里面有coco数据集及标注文件的下载脚本
├── test.py
├── tools
├── train_aux.py
├── train.py     // 训练主程序
└── utils
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20

# 2.3.3 创建conda环境并安装项目依赖

$ conda create -n yolov7 python=3.8                     // 安装虚拟环境
$ conda activate yolov7                                 // 激活虚拟环境
$ cd /root/yolov7 && pip3 install -r requirements.txt   // 安装项目依赖
1
2
3

# 3. 使用官方的预训练模型实现目标识别

# 3.1 官方的预训练模型

官方提供了预训练模型,它是在MS COCO数据集上进行训练的,我们把这个模型下载到/root/yolov7/weights/目录下,用来统一存放我们的预训练模型。

$ cd /root/yolov7 && mkdir weights && /root/yolov7/weights
$ wget https://github.com/WongKinYiu/yolov7/releases/download/v0.1/yolov7_training.pt
1
2

# 3.2 使用YOLOv7实现目标识别

运行detect.py文件,使用官方提供的预训练模型和示例图片进行目标识别。

$ python3 detect.py --weights weights/yolov7.pt --source inference/images 
1

参数说明:

--weights weight/yolov7.pt   # 传进去受用的模型
--source inference/images    # 传进去要预测的图片
1
2

完整参数请查看代码:

    parser = argparse.ArgumentParser()
    parser.add_argument('--weights', nargs='+', type=str, default='yolov7.pt', help='model.pt path(s)')
    parser.add_argument('--source', type=str, default='inference/images', help='source')  # file/folder, 0 for webcam
    parser.add_argument('--img-size', type=int, default=640, help='inference size (pixels)')
    parser.add_argument('--conf-thres', type=float, default=0.25, help='object confidence threshold')
    parser.add_argument('--iou-thres', type=float, default=0.45, help='IOU threshold for NMS')
    parser.add_argument('--device', default='', help='cuda device, i.e. 0 or 0,1,2,3 or cpu')
    parser.add_argument('--view-img', action='store_true', help='display results')
    parser.add_argument('--save-txt', action='store_true', help='save results to *.txt')
    parser.add_argument('--save-conf', action='store_true', help='save confidences in --save-txt labels')
    parser.add_argument('--nosave', action='store_true', help='do not save images/videos')
    parser.add_argument('--classes', nargs='+', type=int, help='filter by class: --class 0, or --class 0 2 3')
    parser.add_argument('--agnostic-nms', action='store_true', help='class-agnostic NMS')
    parser.add_argument('--augment', action='store_true', help='augmented inference')
    parser.add_argument('--update', action='store_true', help='update all models')
    parser.add_argument('--project', default='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('--no-trace', action='store_true', help='don`t trace model')
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19

运行成功后在控制台有以下输出:

使用YOLOv7实现目标识别

程序运行完之后,在 /root/yolov7/runs/detect/exp目录生成了识别后的图片,已经完成了框选和标注,取其中的一组示例图片(左侧原始图,右侧标注后的)如下:

YOLOv7目标识别结果示例

# 4. 训练自己的目标识别模型

由于我没有条件去人工标注,所以这里仍然使用MS COCO数据集,训练结果的作用与官方提供的预训练模型一致(受迭代次数的影响,效果不如官方的预训练模型),仅作为演示,没有实用意义。实际训练自己的目标识别模型,应该先使用标注软件制作自己的数据集,把它处理成yolo能解析的格式,然后再进行训练模型。不同的目标识别,仅需在代码里更换所使用的模型即可。

# 4.1 使用MS COCO数据集自己训练模型

# 4.1.1 下载数据集及标注文件

/root/yolov7/scripts/目录有 get_coco.sh 脚本,可以一键下载好数据集及标注文件,官方的该脚本内容如下:

#!/bin/bash
# COCO 2017 dataset http://cocodataset.org
# Download command: bash ./scripts/get_coco.sh

# Download/unzip labels
d='./' # unzip directory
url=https://github.com/ultralytics/yolov5/releases/download/v1.0/
f='coco2017labels-segments.zip' # or 'coco2017labels.zip', 68 MB
echo 'Downloading' $url$f ' ...'
curl -L $url$f -o $f && unzip -q $f -d $d && rm $f & # download, unzip, remove in background

# Download/unzip images
d='./coco/images' # unzip directory
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 $f3; do
  echo 'Downloading' $url$f '...'
  curl -L $url$f -o $f && unzip -q $f -d $d && rm $f & # download, unzip, remove in background
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

注:由于我在 2.2 节已经提前下载好了coco数据集,因此这里只需要下载标注文件即可。然后把train2017和val2017数据集拷贝到解压后的 images 对应目录。

$ cd /root/yolov7/coco2017_dataset
$ wget https://github.com/ultralytics/yolov5/releases/download/v1.0/coco2017labels-segments.zip 
$ unzip -o -d /root/yolov7/coco2017_dataset/ /root/coco2017_dataset/coco2017labels-segments.zip 
$ rm -f /root/yolov7/coco2017_dataset/coco2017labels-segments.zip
1
2
3
4

解压后的目录结构如下:

.
├── LICENSE
├── README.txt
├── annotations
│   └── instances_val2017.json
├── images   
│   ├── train2017  // 空目录(把之前下载的train2017数据集拷过来)
│   └── val2017    // 空目录(把之前下载的val2017数据集拷过来)
├── labels   
│   ├── train2017  // 里面是txt文件
│   └── val2017    // 里面是txt文件
├── test-dev2017.txt
├── train2017.txt
└── val2017.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14

然后把 /root/yolov7/yolov7/data/coco.yaml 配置文件里的路径也需要改一下,把download和test模块注释了。

# COCO 2017 dataset http://cocodataset.org

# download command/URL (optional)
# download: bash ./scripts/get_coco.sh

# train and val data as 1) directory: path/images/, 2) file: path/images.txt, or 3) list: [path1/images/, path2/images/]
train: /root/yolov7/coco2017_dataset/coco/train2017.txt  # 118287 images
val: /root/yolov7/coco2017_dataset/coco/val2017.txt  # 5000 images
# test: /root/yolov7/coco2017_dataset/coco/test-dev2017.txt  # 20288 of 40670 images, submit to https://competitions.codalab.org/competitions/20794

# number of classes
nc: 80

# class names
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' ]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23

# 4.1.2 训练目标识别模型

训练过程总共有两个文件需要配置,一个是/yolov7/cfg/training/yolov7.yaml,这个文件是有关模型的配置文件;一个是/yolov7/data/coco.yaml,这个是数据集的配置文件。

$ python3 train.py --weights weights/yolov7.pt --cfg cfg/training/yolov7.yaml --data data/coco.yaml --device 0,1,2,3 --batch-size 16 --epoch 10
1

参数说明:

--weights weights/yolov7.pt             # 接收预训练模型路径的参数(为什么要用预训练模型见下文“预训练和微调的作用”)
--cfg cfg/training/yolov7.yaml          # 接收模型配置文件的参数
--data data/coco.yaml                   # 接收数据配置文件的参数
--device 0,1,2,3                        # GPU/CPU训练,我有4块,因此为0,1,2,3,若使用CPU,则为cpu
--batch-size 16                         # 按照自己GPU块数及显存大小大致确定
--epoch 10                              # 训练次数,这里仅测试使用,所以只设置10次
1
2
3
4
5
6

完整参数请查看代码:

    parser = argparse.ArgumentParser()
    parser.add_argument('--weights', type=str, default='yolo7.pt', help='initial weights path')
    parser.add_argument('--cfg', type=str, default='', help='model.yaml path')
    parser.add_argument('--data', type=str, default='data/coco.yaml', help='data.yaml path')
    parser.add_argument('--hyp', type=str, default='data/hyp.scratch.p5.yaml', help='hyperparameters path')
    parser.add_argument('--epochs', type=int, default=300)
    parser.add_argument('--batch-size', type=int, default=16, help='total batch size for all GPUs')
    parser.add_argument('--img-size', nargs='+', type=int, default=[640, 640], help='[train, test] image sizes')
    parser.add_argument('--rect', action='store_true', help='rectangular training')
    parser.add_argument('--resume', nargs='?', const=True, default=False, help='resume most recent training')
    parser.add_argument('--nosave', action='store_true', help='only save final checkpoint')
    parser.add_argument('--notest', action='store_true', help='only test final epoch')
    parser.add_argument('--noautoanchor', action='store_true', help='disable autoanchor check')
    parser.add_argument('--evolve', action='store_true', help='evolve hyperparameters')
    parser.add_argument('--bucket', type=str, default='', help='gsutil bucket')
    parser.add_argument('--cache-images', action='store_true', help='cache images for faster training')
    parser.add_argument('--image-weights', action='store_true', help='use weighted image selection for training')
    parser.add_argument('--device', default='', help='cuda device, i.e. 0 or 0,1,2,3 or cpu')
    parser.add_argument('--multi-scale', action='store_true', help='vary img-size +/- 50%%')
    parser.add_argument('--single-cls', action='store_true', help='train multi-class data as single-class')
    parser.add_argument('--adam', action='store_true', help='use torch.optim.Adam() optimizer')
    parser.add_argument('--sync-bn', action='store_true', help='use SyncBatchNorm, only available in DDP mode')
    parser.add_argument('--local_rank', type=int, default=-1, help='DDP parameter, do not modify')
    parser.add_argument('--workers', type=int, default=8, help='maximum number of dataloader workers')
    parser.add_argument('--project', default='runs/train', help='save to project/name')
    parser.add_argument('--entity', default=None, help='W&B entity')
    parser.add_argument('--name', default='exp', help='save to project/name')
    parser.add_argument('--exist-ok', action='store_true', help='existing project/name ok, do not increment')
    parser.add_argument('--quad', action='store_true', help='quad dataloader')
    parser.add_argument('--linear-lr', action='store_true', help='linear LR')
    parser.add_argument('--label-smoothing', type=float, default=0.0, help='Label smoothing epsilon')
    parser.add_argument('--upload_dataset', action='store_true', help='Upload dataset as W&B artifact table')
    parser.add_argument('--bbox_interval', type=int, default=-1, help='Set bounding-box image logging interval for W&B')
    parser.add_argument('--save_period', type=int, default=-1, help='Log model after every "save_period" epoch')
    parser.add_argument('--artifact_alias', type=str, default="latest", help='version of dataset artifact to be used')
    parser.add_argument('--freeze', nargs='+', type=int, default=[0], help='Freeze layers: backbone of yolov7=50, first3=0 1 2')
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
28
29
30
31
32
33
34
35
36

预训练和微调的作用:

在 CNN领域中,实际上,很少人自己从头训练一个 CNN网络。主要原因是自己很小的概率会拥有足够大的数据集,基本是几千或者几万张,拥有的数据集不够大,而又想使用很好的模型的话,很容易会造成过拟合。所以,一般的操作都是在一个大型的数据集上训练一个模型,然后使用该模型作为类似任务的初始化或者特征提取器。这样既节省了时间和计算资源,又能很快的达到较好的效果。

训练过程遇到的问题:

[1] RuntimeError: CUDA out of memory. Tried to allocate 100.00 MiB (GPU 2; 10.76 GiB total capacity; 2.13 GiB already allocated; 9.19 MiB free; 2.20 GiB reserved in total by PyTorch)

GPU 2 的内存溢出,不使用该GPU了,修改一下 --device 和 --batch-size 参数即可(--batch-size必须为--device所使用GPU的整数倍)

$ python3 train.py --weights weights/yolov7.pt --cfg cfg/training/yolov7.yaml --data data/coco.yaml --device 0,1,3 --batch-size 18 --epoch 10
1

yolov7训练耗时

在我这个测试环境及配置下,单次训练耗时大约为47分钟,模型训练大约需要7.8小时,根据自己情况而定就行,仅作为测试的话可以把训练次数调的很低,正式训练的时候要把它调高。

训练过程及结果:

yolov7训练结果日志

训练结果保存在打印出的目录下,该目录有训练中间过程的模型文件epoch_xxx.pt及init.pt、last.pt、best.pt,通常只需要best.pt。

.
├── best.pt
├── epoch_000.pt
├── epoch_001.pt
...
├── init.pt
└── last.pt
1
2
3
4
5
6
7

# 4.2 使用自己训练的模型进行目标识别

重复 3.2 节的操作,把 --weights 参数换成自己训练的模型即可,我们使用best.pt即可。

$ python3 detect.py --weights runs/train/exp13/weights/best.pt --source inference/images 
1

# 5. 参考资料

[1] YOLOv7: Trainable bag-of-freebies sets new state-of-the-art for real-time object detectors from arxiv (opens new window)

[2] YOLOv7论文的实现 from Github (opens new window)

[3] 这是一个yolov7的库,可以用于训练自己的数据集 from Github (opens new window)

[4] YOLOv7CoreML.ipynb from Google Colab (opens new window)

[5] yolov7从0开始训练自己数据集-模型 from 墨天轮 (opens new window)

[6] 如何用YOLOv7训练自己的数据集 from 知乎 (opens new window)

[7] 目标检测 YOLOv7理论简介+实践测试 from 华为云 (opens new window)

[8] 教你利用yolov5训练自己的目标检测模型 from CSDN (opens new window)

[9] 深入浅出Yolo系列之Yolov5核心基础知识完整讲解 from 知乎 (opens new window)

[10] 这是一篇对YOLOv7的详细解读和剖析 from 知乎 (opens new window)

[11] MS COCO数据集介绍以及pycocotools简单使用 from CSDN (opens new window)

[12] COCO数据集标注格式及意义 from CSDN (opens new window)

[13] YOLOv7来临:论文详读和解析 from cvmart (opens new window)

[14] YoloV7:又快又准,Yolov4团队力作 from 知乎 (opens new window)

[15] 写给小白的YOLO介绍 from 知乎 (opens new window)

[16] 目标检测|YOLO原理与实现 from 知乎 (opens new window)

[17] 从V1到V4,让你读懂YOLO原理——深度AI科普团队 from CSDN (opens new window)

[18] YOLO之理解预训练和微调 from CSDN (opens new window)

Last Updated: 1/8/2023, 1:44:28 PM