0


YOLOv8入门 | 从环境配置到代码拉取(下载)再到数据集划分又到实验运行


💡💡💡本专栏所有程序均经过测试,均可成功执行💡💡💡


专栏地址:YOLOv8从入门改进到发论文——点击即可跳转 订阅专栏不迷路

在深度学习的目标检测领域,YOLOv8是现在较受欢迎的一个算法。但很多同学没有老师手把手教,对YOLOv8了解甚少。为了让大家少走弯路,我为大家整理了详细的步骤,越是小白,越是适合看我写的内容。如果有写的不明白的地方,大家可以在评论区问我,我将知无不言言无不尽。


1. 环境配置

想要成功的运行实验,一个合适稳定的环境是不可或缺的。

安装Anaconda

Anaconda包括Conda、Python以及一大堆安装好的工具包,比如:numpy等常用的包

因此安装Anaconda的好处主要为以下几点:

1)包含conda:conda是一个环境管理器,其功能依靠conda包来实现,该环境管理器与pip类似,那有同学会问了:我能通过pip装conda包达到conda环境管理器一样的功能吗?答案是不能,conda包的实现离不开conda环境管理器。

2)安装大量工具包:Anaconda会自动安装一个基本的python,该python的版本Anaconda的版本有关。该python下已经装好了一大堆工具包,这对于科学分析计算是一大便利,你愿意费时耗力使用pip一个个包去装吗?

3)可以创建使用和管理多个不同的Python版本:比如想要新建一个新框架或者使用不同于Anoconda装的基本Python版本,Anoconda就可以实现同时多个python版本的管理

具体步骤(一)

Anaconda的安装

你可以根据你的操作系统是32位还是64位选择对应的版本到官网下载,但是官网下载很慢,建议到清华大学镜像站下载。

Anaconda3-5.3.0-Windows-x86_64.exe——点击即可跳转

下载好后进行安装

  1. 安装Anaconda3-5.3.0-Windows-x86_64.exe

** 2. 主要选择,基本默认安装**

** 3. 两个勾选项的选择,选择第一个**

** 4. 进度条完成后点Next**

去掉默认的两个选项,点击Finish****完成安装

验证是否安装成功

输入cmd打开dos

在打开的dos中输入conda命令,出现如下图提示就代表我们已经安装完成了

具体步骤(二)

安装好以后打开anaconda powershell prompt

然后输入命令

​conda create -n name python==3.8  # 创建环境, name是可以替换的,随便起名,这个名字是你的环境名称, python==3.8意思是python的版本是3.8

创建环境, name是可以替换的,随便起名,这个名字是你的环境名称, python==3.8意思是python的版本是3.8 ,如果你想要3.9版本的,则python==3.9

回车后出现

输入 Y后回车,开始下载python和一些基础的包

下载完成后 激活环境

conda activate name # 其中name是你上面创建环境的名称

🎇 激活成功。现在基本的环境已经安装好了,我们可以下载代码了🎇

但是能运行YOLOv8的环境还没有完全安装好

2. YOLOv8代码下载

可能有些同学不知道在哪下载YOLOv8的官方代码,YOLOv8的官方代码在github上下载。

YOLOv8官方代码仓库——点击即可跳转

进入网站后,可以这样下载,这样下载的是一个压缩包

也可以这样下载,即用命令下载

git clone https://github.com/ultralytics/ultralytics.git

两种方法选择一种下载即可。

然后现在可以打开刚刚激活环境的窗口,切换到你下载好YOLOv8的目录下面

cd /root/ultralytics/

输入命令

pip install -i https://pypi.tuna.tsinghua.edu.cn/simple/ -r requirements.txt

为了下载速度快,我这里用了清华源,当然,也可以换成阿里源

https://mirrors.aliyun.com/pypi/simple 

出现这个画面即说明环境安装成功

**到这一步,整个YOLOv8的环境才算是真正的配置完成。 **

3. 数据准备

如果你想用自己的数据作实验的话,需要自己编写对应的ymal文件

在\root\ultralytics\ultralytics\ultralytics\cfg\datasets文件夹下,我们可以找到有关数据的yaml文件,我们参考coco128.yaml的内容编写我们自己的数据路径。

# Ultralytics YOLO 🚀, AGPL-3.0 license
# COCO128 dataset https://www.kaggle.com/ultralytics/coco128 (first 128 images from COCO train2017) by Ultralytics
# Documentation: https://docs.ultralytics.com/datasets/detect/coco/
# Example usage: yolo train data=coco128.yaml
# parent
# ├── ultralytics
# └── datasets
#     └── coco128  ← downloads here (7 MB)

# 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: ../datasets/coco128 # dataset root dir
train: images/train2017 # train images (relative to 'path') 128 images
val: images/train2017 # val images (relative to 'path') 128 images
test: # test images (optional)

# Classes
names:
  0: person
  1: bicycle
  2: car
  3: motorcycle
  4: airplane
  5: bus

在coco128.yaml上面可以看到在写一行

Train/val/test sets as 1) dir: path/to/imgs, 2) file: path/to/imgs.txt, or 3) list:

这说明给数据集的方式有三种,接下来我们一一介绍。

数据集地址(一)

其中path是根目录,train是训练集的相对目录,是相对path的相对目录,这里我个人认为比较麻烦,所以我一般是将path注释掉,直接在train写绝对路径。同理,val和test也是一样的。

下面得names是你要训练的类别和它对应的索引,如果在你的数据集中,person被标注为0,那person的索引就是0,以此类推。

数据集的放置要和coco128的类似,coco128是这样放置的,需要注意的像images,labels,train,val不可以用其他的单词替换,但是coco128可以换成其他的文件夹名称

coco128
├─images
│  ├─train
│  └─val
└─labels
    ├─train
    └─val

数据集地址(二)

第二种是给一个file,即txt文件,txt文件的内容是每张img的绝对路径或者相对路径,和上面一样,我还是喜欢写绝对路径,因为写相对路径容易出错,绝对路径无脑放就行了。txt具体的内容如下:

只写图片的地址即可,但是文件夹的放置应该是这样的

dataset
├─images  # 里面是训练验证和测试的全部图片
│  
│  
└─labels # 里面是训练验证和测试的对应的标签

但是有同学可能在生成txt文件的时候觉得困难,不能轻松的拿到全部图片的绝对路径,下面我提供一个脚本,一键生成三个txt文件。

import os
import random

def get_image_paths(folder):
    """Returns a list of absolute paths of images in the given folder and subfolders."""
    image_extensions = {'.png', '.jpg', '.jpeg', '.bmp', '.gif', '.tiff'}
    image_paths = []
    for root, _, files in os.walk(folder):
        for file in files:
            if any(file.lower().endswith(ext) for ext in image_extensions):
                image_paths.append(os.path.join(root, file))
    return image_paths

def split_data(paths, train_ratio=0.7, val_ratio=0.2, test_ratio=0.1):
    """Splits the paths into train, val, and test sets based on the given ratios."""
    random.shuffle(paths)
    total = len(paths)
    train_end = int(total * train_ratio)
    val_end = train_end + int(total * val_ratio)
    
    train_paths = paths[:train_end]
    val_paths = paths[train_end:val_end]
    test_paths = paths[val_end:]
    
    return train_paths, val_paths, test_paths

def save_paths(file_path, paths):
    """Saves the list of paths to the given file."""
    with open(file_path, 'w') as f:
        for path in paths:
            f.write(path + '\n')

def main(folder, train_file='train.txt', val_file='val.txt', test_file='test.txt'):
    image_paths = get_image_paths(folder)
    train_paths, val_paths, test_paths = split_data(image_paths)
    
    save_paths(train_file, train_paths)
    save_paths(val_file, val_paths)
    save_paths(test_file, test_paths)

if __name__ == '__main__':
    folder = '/datasets/images'  # 替换为你自己数据集的地址
    main(folder)

同样,images和labels的是不可以用其他的单词的,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: ../datasets/coco8 # dataset root dir
train: root\datasets\train.txt # train images (relative to 'path') 4 images
val: root\datasets\val.txt # val images (relative to 'path') 4 images
test: # test images (optional)

# Classes
names:
  0: person
  1: bicycle
  2: car
  3: motorcycle
  4: airplane
  5: bus

数据集地址(三)

第三种方式放置列表,因为数据一般都比较多,我基本不用这种方式,但在这里我也简单的给出例子

# 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: ../datasets/coco8 # dataset root dir
train: [/home/inspur/datasets/trian/images/000000044802.jpg,
        /home/inspur/datasets/trian/images/000000044813.jpg,
        /home/inspur/datasets/trian/images/000000044815.jpg,
        /home/inspur/datasets/trian/images/000000044820.jpg,
        /home/inspur/datasets/trian/images/000000044823.jpg,
        /home/inspur/datasets/trian/images/000000044825.jpg,
        /home/inspur/datasets/trian/images/000000044827.jpg] # train images (relative to 'path') 4 images
val: [/home/inspur/datasets/trian/images/000000044802.jpg,
        /home/inspur/datasets/trian/images/000000044813.jpg,
        /home/inspur/datasets/trian/images/000000044815.jpg,
        /home/inspur/datasets/trian/images/000000044820.jpg,
        /home/inspur/datasets/trian/images/000000044823.jpg,
        /home/inspur/datasets/trian/images/000000044825.jpg,
        /home/inspur/datasets/trian/images/000000044827.jpg] # val images (relative to 'path') 4 images
test: # test images (optional)

# Classes
names:
  0: person
  1: bicycle
  2: car
  3: motorcycle
  4: airplane
  5: bus

4. 开始训练

在准备好数据以后就可以开始训练了,

我们在\root\ultralytics\下面新建train.py 粘贴下面的内容

import warnings
warnings.filterwarnings('ignore')
from ultralytics import YOLO

if __name__ == '__main__':
    model = YOLO(r'root\ultralytics\ultralytics\ultralytics\cfg\models\v8\yolov8.yaml')

    # model.load('yolov8n.pt') # 是否加载预训练权重,可以加载也可以不加载

    model.train(data=r'ultralytics\ultralytics\ultralytics\cfg\datasets/data.yaml',
                cache=False, # 是否生成告诉缓存文件,生成以后训练的速度是会提高的
                imgsz=640, # 图片输入模型的尺寸
                epochs=150, # 训练的轮数
                single_cls=False,  # 是否是单类别检测
                batch=4, # batch_size 的大小
                close_mosaic=10, # 最后10个epoch关闭马赛克增强
                workers=0, # 线程数
                device='0', # 选择哪个卡进行训练, 没有GPU卡的话可以修改成 device="cpu"
                optimizer='SGD', # 使用 SGD 优化器
                resume='runs/train/exp/weights/last.pt', # 如过想继续训就设置last.pt的地址
                amp=True,  # 开启自动混合精度训练
                project='runs/train',
                name='exp', #这个name建议大家修改,我一般修改为数据集的名称+时间戳,这样你保存的实验结果可知道是什么适合做的哪个实验
                )

然后执行即可开始实验,出现下面的内容就是成功的开始训练

接下来我们将讲解关于YOLOv8实验结果分析的内容


本文转载自: https://blog.csdn.net/kay_545/article/details/140706431
版权归原作者 长发和小虎牙 所有, 如有侵权,请联系我们删除。

“YOLOv8入门 | 从环境配置到代码拉取(下载)再到数据集划分又到实验运行”的评论:

还没有评论