当前位置:首页 » 《资源分享》 » 正文

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

16 人参与  2024年11月18日 12:41  分类 : 《资源分享》  评论

点击全文阅读



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


专栏地址: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

然后输入命令

​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 dirtrain: images/train2017 # train images (relative to 'path') 128 imagesval: images/train2017 # val images (relative to 'path') 128 imagestest: # test images (optional)# Classesnames:  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 osimport randomdef 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_pathsdef 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_pathsdef 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 dirtrain: root\datasets\train.txt # train images (relative to 'path') 4 imagesval: root\datasets\val.txt # val images (relative to 'path') 4 imagestest: # test images (optional)# Classesnames:  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 dirtrain: [/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 imagesval: [/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 imagestest: # test images (optional)# Classesnames:  0: person  1: bicycle  2: car  3: motorcycle  4: airplane  5: bus

4. 开始训练

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

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

import warningswarnings.filterwarnings('ignore')from ultralytics import YOLOif __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实验结果分析的内容 


点击全文阅读


本文链接:http://m.zhangshiyu.com/post/188135.html

<< 上一篇 下一篇 >>

  • 评论(0)
  • 赞助本站

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

关于我们 | 我要投稿 | 免责申明

Copyright © 2020-2022 ZhangShiYu.com Rights Reserved.豫ICP备2022013469号-1