目标:
实现自己的图像分类算法模型训练,应用。
- 掌握数据集配置方式;
- 掌握训练、预测命令语句
- 掌握训练结果分析
学习内容:
1.图像分类数据集配置方式
例如:
- 制作一个表情分类数据集。
# 0 - 6 文件夹分别label为:
# angry ,disgust ,fear ,happy ,sad ,surprise ,neutral
#0,1, 2,3 ,4 , 5 , 6
保存文件形式如下:
每一个数字标签文件夹里面是面部表情图片。文件夹命名为分类类名,多少个类别就有多少个文件夹,不用配置额外的data-yaml.
2.yolov8训练图像分类算法模型
注意,此处数据与分割,检测,关键点算法的数据输入yaml不同.data=数据集文件夹地址imageFER(根据自己存放地址而变)
result = model.train(data='D:/xxx/Datasets/datasetFER2024/imagesFER'-----
。
# Begin to show your code!
import torch
from ultralytics import YOLO
device = torch.device("cuda:0" if torch.cuda.is_available() else "cpu")
def trainModel(mode_pt=None):
if mode_pt is None:
# model = YOLO(model=r'D:/xxx/Models/yolov8/classify/yolov8m-cls.pt') # 加载预训练模型方法导入分类模型参数
model = YOLO('yolov8m-cls.yaml').load('yolov8m-cls.pt') # 在线下载预训练模型,加载训练方式
else:
model = YOLO(model=mode_pt) # 加载待优化模型
model.to(device)
result = model.train(data='D:/xxx/Datasets/datasetFER2024/imagesFER', epochs=100, batch=32, single_cls=False, imgsz=224, workers=0)
if __name__ == "__main__":
mode_pt = r'D:/xxx/Models/yolov8/classify/yolov8m-cls.pt'
trainModel()
imgsz=224,可根据数据集图像大小的均值设定一个尺寸imgsz。
注意:# 加载预训练模型方法导入分类模型参数,可能因为自行下载的YOLOv8-cls.pt预训练模型文件有问题,会报bug
ModuleNotFoundError: No module named ‘ultralytics.utils‘
,建议使用在线下载最新模型。
3.掌握训练结果分析
根据损失函数,精确度曲线,调整参数或新增数据均衡类别。
学习产出:
完成表情分类识别算法模型: FER,Facial expression recognition表情识别算法模型
- 测试检测效果。
ferRes = model.predict(source=r"D:/xx/Datasets/datasetFER2024/test/", save=True)
测试结果以概率从高到低排列可能的结果。
2. 预测结果分析
首先,debug程序,在预测打印结果位置打个断点,查看模型预测图像文件夹的输出—ferRes :
然后,选择一个图片输出结果打开。
probs保存了预测结果。top1为得分最高的分类结果。top5为得分前五的类别列表,且按置信度得分由高到低排列。
训练的时候,你也许注意到了loss后面有
Top1Acc
和Top5Acc
.(Top5Acc表示预测概率前5个中有一个正确,就算预测正确的概率)