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

长发和小虎牙 2024-08-25 15:31:01 阅读 92


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


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

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

目录

1. 环境配置

 安装Anaconda

具体步骤(一)

 具体步骤(二)

2. YOLOv8代码下载

3. 数据准备

数据集地址(一) 

数据集地址(二) 

数据集地址(三) 

4. 开始训练


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——点击即可跳转

下载好后进行安装

安装Anaconda3-5.3.0-Windows-x86_64.exe

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

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

        4. 进度条完成后点Next 

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

验证是否安装成功

输入cmd打开dos

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

 具体步骤(二)

安装好以后打开anaconda powershell prompt

然后输入命令

<code>​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和一些基础的包

下载完成后 激活环境

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

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

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

2. YOLOv8代码下载

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

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

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

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

<code>git clone https://github.com/ultralytics/ultralytics.git

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

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

<code>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的内容编写我们自己的数据路径。

<code># 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具体的内容如下:

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

<code>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'):code>

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"code>

optimizer='SGD', # 使用 SGD 优化器code>

resume='runs/train/exp/weights/last.pt', # 如过想继续训就设置last.pt的地址code>

amp=True, # 开启自动混合精度训练

project='runs/train',code>

name='exp', #这个name建议大家修改,我一般修改为数据集的名称+时间戳,这样你保存的实验结果可知道是什么适合做的哪个实验code>

)

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

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



声明

本文内容仅代表作者观点,或转载于其他网站,本站不以此文作为商业用途
如有涉及侵权,请联系本站进行删除
转载本站原创文章,请注明来源及作者。