【机器学习】Yolov8安装到使用模型插图
【机器学习】Yolov8安装到使用模型插图1

配置环境

安装Anaconda

YOLO训练使用的是Python环境,所以使用Anaconda进行虚拟环境创建。

安装软件

下载安装好了anaconda,启动这个软件,新建一个虚拟环境,建议使用3.9版本python,防止后续python库由于python版本问题无法安装。

【机器学习】Yolov8安装到使用模型插图2

点击 Open Terminal 进入终端,显示有环境名称即为安装配置成功。

【机器学习】Yolov8安装到使用模型插图3
【机器学习】Yolov8安装到使用模型插图4

配置环境

打开终端后,安装需要的python类库。

pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple/
pip config set install.trusted-host pypi.tuna.tsinghua.edu.cn
# 这里用的是 yolo 0.3.1 版本
# 使用最新版本运行命令: pip install yolo
pip install yolo==0.3.1
# 这里用的是 ultralytics 8.2.79 版本 
# 使用最新版本运行命令: pip install ultralytics
pip install ultralytics==8.2.79
pip install ncnn==1.0.20240410
pip install labelimg
#最后输入 pip list 查看安装的类库列表

报错检查是否是因为python版本太低的问题。

在命令行输入yolo命令验证是否成功。

【机器学习】Yolov8安装到使用模型插图5

验证labelimg图片标注工具是否正常,控制台输入labelimg,即可打开labelimg程序

【机器学习】Yolov8安装到使用模型插图6

新建训练目录

├── Yolo8
    └── images
        └── train
            └── 20180824-13-43-21-401.jpg
            └──*****
            └── 20181025-16-37-47-196.jpg
        └──test
        └──val
    └── labels  
        └── train
            └── 20180824-13-43-21-401.txt
            └──*****
            └── 20181025-16-37-47-196.txt
        └──val

在文件目录下创建.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: D:/Yolov8  # dataset root dir
train: images/train  # train images (relative to 'path') 128 images
val: images/val  # val images (relative to 'path') 128 images
test:  # test images (optional)

# Classes
nc: 200  # number of classes
names: ['1_puffed_food', '2_puffed_food', '3_puffed_food', '4_puffed_food', '5_puffed_food', '6_puffed_food', '7_puffed_food', '8_puffed_food', '9_puffed_food', '10_puffed_food', '11_puffed_food', '12_puffed_food', '13_dried_fruit', '14_dried_fruit', '15_dried_fruit', '16_dried_fruit', '17_dried_fruit', '18_dried_fruit', '19_dried_fruit', '20_dried_fruit', '21_dried_fruit', '22_dried_food', '23_dried_food', '24_dried_food', '25_dried_food', '26_dried_food', '27_dried_food', '28_dried_food', '29_dried_food', '30_dried_food', '31_instant_drink', '32_instant_drink', '33_instant_drink', '34_instant_drink', '35_instant_drink', '36_instant_drink', '37_instant_drink', '38_instant_drink', '39_instant_drink', '40_instant_drink', '41_instant_drink', '42_instant_noodles', '43_instant_noodles', '44_instant_noodles', '45_instant_noodles', '46_instant_noodles', '47_instant_noodles', '48_instant_noodles', '49_instant_noodles', '50_instant_noodles', '51_instant_noodles', '52_instant_noodles', '53_instant_noodles', '54_dessert', '55_dessert', '56_dessert', '57_dessert', '58_dessert', '59_dessert', '60_dessert', '61_dessert', '62_dessert', '63_dessert', '64_dessert', '65_dessert', '66_dessert', '67_dessert', '68_dessert', '69_dessert', '70_dessert', '71_drink', '72_drink', '73_drink', '74_drink', '75_drink', '76_drink', '77_drink', '78_drink', '79_alcohol', '80_alcohol', '81_drink', '82_drink', '83_drink', '84_drink', '85_drink', '86_drink', '87_drink', '88_alcohol', '89_alcohol', '90_alcohol', '91_alcohol', '92_alcohol', '93_alcohol', '94_alcohol', '95_alcohol', '96_alcohol', '97_milk', '98_milk', '99_milk', '100_milk', '101_milk', '102_milk', '103_milk', '104_milk', '105_milk', '106_milk', '107_milk', '108_canned_food', '109_canned_food', '110_canned_food', '111_canned_food', '112_canned_food', '113_canned_food', '114_canned_food', '115_canned_food', '116_canned_food', '117_canned_food', '118_canned_food', '119_canned_food', '120_canned_food', '121_canned_food', '122_chocolate', '123_chocolate', '124_chocolate', '125_chocolate', '126_chocolate', '127_chocolate', '128_chocolate', '129_chocolate', '130_chocolate', '131_chocolate', '132_chocolate', '133_chocolate', '134_gum', '135_gum', '136_gum', '137_gum', '138_gum', '139_gum', '140_gum', '141_gum', '142_candy', '143_candy', '144_candy', '145_candy', '146_candy', '147_candy', '148_candy', '149_candy', '150_candy', '151_candy', '152_seasoner', '153_seasoner', '154_seasoner', '155_seasoner', '156_seasoner', '157_seasoner', '158_seasoner', '159_seasoner', '160_seasoner', '161_seasoner', '162_seasoner', '163_seasoner', '164_personal_hygiene', '165_personal_hygiene', '166_personal_hygiene', '167_personal_hygiene', '168_personal_hygiene', '169_personal_hygiene', '170_personal_hygiene', '171_personal_hygiene', '172_personal_hygiene', '173_personal_hygiene', '174_tissue', '175_tissue', '176_tissue', '177_tissue', '178_tissue', '179_tissue', '180_tissue', '181_tissue', '182_tissue', '183_tissue', '184_tissue', '185_tissue', '186_tissue', '187_tissue', '188_tissue', '189_tissue', '190_tissue', '191_tissue', '192_tissue', '193_tissue', '194_stationery', '195_stationery', '196_stationery', '197_stationery', '198_stationery', '199_stationery', '200_stationery']
 # class names

参数介绍

epochs: 训练的轮数。这个参数确定了模型将会被训练多少次,每一轮都遍历整个训练数据集。训练的轮数越多,模型对数据的学习就越充分,但也增加了训练时间。

选取策略

默认是100轮数。但一般对于新数据集,我们还不知道这个数据集学习的难易程度,可以加大轮数,例如300,来找到更佳性能。

patience: 早停的等待轮数。在训练过程中,如果在一定的轮数内没有观察到模型性能的明显提升,就会停止训练。这个参数确定了等待的轮数,如果超过该轮数仍没有改进,则停止训练。

早停

早停能减少过拟合。过拟合(overfitting)指的是只能拟合训练数据, 但不能很好地拟合不包含在训练数据中的其他数据的状态。

batch: 每个批次中的图像数量。在训练过程中,数据被分成多个批次进行处理,每个批次包含一定数量的图像。这个参数确定了每个批次中包含的图像数量。特殊的是,如果设置为-1,则会自动调整批次大小,至你的显卡能容纳的最多图像数量。

选取策略

一般认为batch越大越好。因为我们的batch越大我们选择的这个batch中的图片更有可能代表整个数据集的分布,从而帮助模型学习。但batch越大占用的显卡显存空间越多,所以还是有上限的。

imgsz: 输入图像的尺寸。这个参数确定了输入图像的大小。可以指定一个整数值表示图像的边长,也可以指定宽度和高度的组合。例如640表示图像的宽度和高度均为640像素。

选取策略

如果数据集中存在大量小对象,增大输入图像的尺寸imgsz可以使得这些小对象从高分辨率中受益,更好的被检测出。从官网放出的性能表也可以看出。

标注数据

将准备好的图片放到 images/train 文件夹,下面并且复制一份到 images/val 和 images/test两个文件夹

在命令控制台输入labelimg 命令

  • 点击 Open Dir 按钮,选择到你的 images/train 文件夹即可,例如 E:/yolo8/images/train
  • 点击 Change Save Dir 按钮,选择到你的 labels/train 文件夹即可,例如 E:/yolo8/labels/train
  • 注意将格式调整为Yolo模式
【机器学习】Yolov8安装到使用模型插图7

标注

在图片上右键菜单,选择 Create RectBox 选项,或者点击左侧的 Create RectBox

拉出选框后,输入分类名称,点击OK即可保存,注意分类名称会在后续.yaml文件中用到。

照片标注完成后,点击左侧的 Save 按钮保存,然后点击 Next Image 切换标注下一张图片,操作和第一张图片类似

图标标注保存后,会在 labels/train 文件夹存储了标注的数据,classes.txt内容就是分类名称,其他的是和图片相同的名称的txt标注文件

将 labels/train 文件夹数据复制到 labels/val 文件夹,等会验证模型的时候使用

训练模型

在.yaml配置文件中,填写如下实例内容:

path: D:\Yolov8
train: images/train
val: images/val
nc: 2
names: ['dianzan','guanzhu']

名称的顺序不要写错,会影响训练结果

开始训练

在cmd窗口,输入 d: 回车,在输入 cd yolo8,进入这个文件夹,其他路径自行进入,训练命令,下面两个任选一个,截图参数看ultralytics官网

yolo detect train data=d:/yolo8/test.yaml model=d:/yolo8/yolov8s.pt imgsz=640
yolo detect train data=d:/yolo8/test.yaml model=d:/yolo8/yolov8s.pt epochs=100 imgsz=640

这个时候系统会下载yolov8s.pt的基础训练文件,若无法下载,则可自行到官网下载

下载地址:https://github.com/ultralytics/assets/releases/download/v8.2.0/yolov8s.pt

环境配置成功,一切无误,开始训练中

训练完毕,注意这里的 Results saved后面的路径是动态的,截图中是在 runs/detect/train文件夹下,就是D:/yolo8文件夹下

在训练完成的目录中可以找到 best.pt 的训练模型以及训练中被标记和选中目标的图片结果集

验证模型

训练完成后,可以对图片进行验证,cmd控制台输入命令

  • model 参数代表是 需要验证的模型
  • data 代表检测的配置
yolo detect val data=d:/yolo8/test.yaml model=d:/yolo8/runs/detect/train/weights/best.pt

验证结果,这里的 Results saved后面的路径是动态的,请到对应的文件下查看图片标注结果

预测结果

yolo predict model=runs/detect/train/weights/best.pt source=1.jpg

source来源也可以是文件夹,运行结束后,可以到相应的文件夹中查看结果。

导出模型

将训练好的pt文件导出为ncnn文件,交给EC的函数调用

cmd控制台输入命令

  • model 参数代表要转换的模型
yolo export model=d:/yolo8/runs/detect/train/weights/best.pt format=ncnn

导出成功结果可以看到export success后面的路径,进入结果文件夹,可以找到model.ncnn.parammodel.ncnn.bin两个文件,后续需要可以直接对其进行调用。