Docker搭建yolov8并训练、验证、推理化学仪器数据集

一颗洋芋 2024-08-07 10:37:02 阅读 77

目录

1、安装docker

2、创建yolov8镜像

3、下载代码包

4、下载模型预训练权重

5、制作数据集

6、训练、验证及推理

(1)训练

(2)验证

(3)推理

中文标签显示问题


本文通过docker的方式搭建yolov8运行环境,并成功训练了化学仪器数据集,其中训练数据215张,验证数据65张,推理数据10张,类别一共14(此数据集由于纯手工采集,因此数据量小,大家选择的数据集尽量丰富一点)

1、安装docker

在一台有网络的服务器上安装docker,建议参考我之前的文章:Docker基础学习-CSDN博客

2、创建yolov8镜像

首先编写Dockerfile文件(为啥不用yolov8自带的Dockerfile文件,主要是因为试过但报错太多,不好解决,所以换一种风险低的方式),内容如下所示:

<code># 使用与CUDA 11.2兼容的PyTorch官方镜像作为基础镜像

# 使用nvidia-smi查看服务器CUDA 版本,然后参考PyTorch官方说明来选择合适的镜像,否则会出错!

FROM pytorch/pytorch:1.13.1-cuda11.6-cudnn8-runtime

# 所需要的包

RUN pip install scipy -i https://mirrors.aliyun.com/pypi/simple

RUN pip install numpy -i https://mirrors.aliyun.com/pypi/simple

RUN pip install matplotlib -i https://mirrors.aliyun.com/pypi/simple

RUN pip install tqdm -i https://mirrors.aliyun.com/pypi/simple

RUN pip install PyYAML -i https://mirrors.aliyun.com/pypi/simple

RUN pip install Pillow -i https://mirrors.aliyun.com/pypi/simple

RUN pip install opencv_python -i https://mirrors.aliyun.com/pypi/simple

RUN pip install tensorboard -i https://mirrors.aliyun.com/pypi/simple

RUN pip install h5py -i https://mirrors.aliyun.com/pypi/simple

RUN pip install Seaborn -i https://mirrors.aliyun.com/pypi/simple

RUN pip install ultralytics -i https://mirrors.aliyun.com/pypi/simple

RUN pip install yolo -i https://mirrors.aliyun.com/pypi/simple

然后依次运行以下脚本:

[root@hcs my_docker]# pwd

/data/ai/my_docker

[root@hcs my_docker]# ls

Dockerfile

[root@hcs my_docker]# docker build -t yolov8 .

出现了successful时说明镜像创建成功。

3、下载代码包

下载地址:https://github.com/ultralytics/ultralytics

4、下载模型预训练权重

我选择了yolov8n的预训练权重,地址:https://github.com/ultralytics/assets/releases/download/v0.0.0/yolov8n.pt

然后将下载好的yolov8n.pt放在ultralytics-main代码包文件夹下,如下所示:

5、制作数据集

拍摄化学仪器照片,并对图片进行剪裁、旋转、降噪等操作,增加样本数量。图片保存的位置很有讲究,将采集的图片数据集放在ultralytics-main文件夹的datasets下面的images文件夹,分为train和val,都要放入图片。如下所示(命名一致):

然后使用LabelImg工具进行数据标注,打开cmd或者conda虚拟环境下安装:

<code>C:\Users\coke> pip install labelimg -i https://pypi.tuna.tsinghua.edu.cn/simple

等待下载安装成功之后,继续输入以下代码打开labelimg。

C:\Users\coke> labelimg

上传的文件夹就是刚刚/data/ai/ultralytics-main/datasets/chemical/images/train文件夹,保存就是

/data/ai/ultralytics-main/datasets/chemical/labels/train文件夹,一一对应,验证集也是如此。其中Create RectBox就是标记识别方框,然后对每张图片标记得到相应的标签文本,如下图所示。

最后编写chemical.yaml文件,注意path路径写绝对路径,names代表分类,我的数据集分为两类,因此就是0:类别1,1:类别2,2:类别3....以此类推。

<code># 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: /data/ai/ultralytics-main/datasets/chemical # 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)

nc: 14

names:

['烧杯',

'三角烧瓶',

'三角漏斗',

'试管',

'分液漏斗',

'蒸发皿',

'量筒',

'酒精灯',

'托盘天平',

'坩埚',

'胶头滴管',

'玻璃棒',

'滴瓶',

'冷凝管'

]

至此,数据集准备结束,如下所示:

6、训练、验证及推理

(1)训练

进入容器,其中端口映射可以改成你服务器空闲端口号,/data/ai/ultralytics-main换成你ultralytics-main文件夹地址,yolov8换成你容器名称。

<code>[root@hcs ~]# docker run --gpus all --ipc=host -p 8888:8888 -v /data/ai/ultralytics-main:/data/ai/ultralytics-main -it yolov8 /bin/bash

在ultralytics-main文件夹下,按理说运行终端命令yolo detect train data=datasets/chemical/chemical.yaml model=yolov8n.yaml pretrained=./yolov8n.pt epochs=100 batch=4 lr0=0.01 resume=True就能成功运行,但是提示yolo没有detect命令等相关错误,因此查询yolo官网,我换成以python脚本的形式来进行训练。

在ultralytics-main文件夹下新建train.py,代码如下:

from ultralytics import YOLO

# Load a model

model = YOLO('yolov8n.yaml') # load a pretrained model (recommended for training)

model.load('yolov8n.pt')

# Train the model

model.train(

data='datasets/chemical/chemical.yaml',code>

epochs=50, # 根据数据量调整

batch=4, # 根据实际调整

workers=2,

device=0,

imgsz=(640,640),

lr0=0.01,

resume=True,

)

wq保存退出后,运行python train.py,出现下面的界面就表示运行成功:

最后结果会保存在runs/detect/train文件夹下(因训练的次数而异)。

至此,通过docker容器使用yolov8训练自己的数据集就完成啦~

(2)验证

验证脚本val.py,代码如下:

<code>from ultralytics import YOLO

if __name__ == "__main__":

# 加载刚刚训练好的模型地址(注意路径!)

model = YOLO('runs/detect/train6/weights/best.pt')

# Validate the model

metrics = model.val(

val = True,

data = 'datasets/chemical/chemical.yaml',

split = 'val',

batch = 4,

imgsz = (640,640),

workers = 2,

device = 0

) # no arguments needed, dataset and settings remembered

print(f"mAP50-95: {metrics.box.map}") # map50-95

print(f"mAP50: {metrics.box.map50}") # map50

print(f"mAP75: {metrics.box.map75}") # map75

然后再python val.py即可成功!结果在runs/detect/val2文件夹下(因实际情况而异)。

(3)推理

推理脚本detect.py,代码如下:

<code>from ultralytics import YOLO

if __name__ == "__main__":

# 加载刚刚训练好的模型地址,注意路径!

model = YOLO("runs/detect/train6/weights/best.pt")

# Predict with the model

results = model(

source = "/data/ai/ultralytics-main/datasets/chemical/pre_img",

save=True,

imgsz=640,

conf=0.5) # 用于检测的目标置信度阈值(默认为0.25,用于预测,0.001用于验证

然后再python detect.py即可成功!

中文标签显示问题

参考文章:

YOLOv5,v8中文标签显示问题_yolo8中文标签-CSDN博客

YOLOv8中文标签显示不了如何解决_yolov8混淆矩阵中文标签-CSDN博客

SimHei字体(永久有效)_simhei字体怎么下载-CSDN博客



声明

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