基于丹摩智算平台的YOLOv8训练与测试
#基于丹摩智算平台的YOLOv8训练与测试 前言 自YOLO(You Only Look Once)模型问世以来,其简洁高效的设计理念和卓越的目标检测能力备受推崇。YOLO系列通过单次前向传播,能够同时预测图像中多个物体的位置和类别,显著提升了目标检测的速度与效率。随着技术不断演进,YOLO模型也经过多次升级,每次迭代都带来了更强的性能。作为最新版本,YOLOv8不仅继承了前代模型的高效性和实时性
#基于丹摩智算平台的YOLOv8训练与测试
前言
自YOLO(You Only Look Once)模型问世以来,其简洁高效的设计理念和卓越的目标检测能力备受推崇。YOLO系列通过单次前向传播,能够同时预测图像中多个物体的位置和类别,显著提升了目标检测的速度与效率。随着技术不断演进,YOLO模型也经过多次升级,每次迭代都带来了更强的性能。作为最新版本,YOLOv8不仅继承了前代模型的高效性和实时性,还在网络架构、损失函数等方面进行了优化,进一步提升了检测精度和泛化能力。
丹摩简介
丹摩智算是专为AI开发打造的高性能云计算平台,提供强大的并行计算能力和灵活的资源调度系统。平台依托GPU集群和分布式计算架构,为AI开发者和企业提供大规模计算支持。支持主流A1框架(如TensorF1ow、PyTorch),并配备简化的开发环境和自动化调度工具,有效提升开发效率和资源利用率。
算力支持平台:丹摩智算网:https://ww.damodel.com/home帮助文档:https://doc.damodel.com/
YoloV8-训练与测试
制作数据集
Labelme 数据集 数据集选用我以前自己标注的数据集。直接点击下载
类别如下:
['c17', 'c5', 'helicopter', 'c130', 'f16', 'b2',
'other', 'b52', 'kc10', 'command', 'f15', 'kc135', 'a10',
'b1', 'aew', 'f22', 'p3', 'p8', 'f35', 'f18', 'v22', 'f4',
'globalhawk', 'u2', 'su-27', 'il-38', 'tu-134', 'su-33',
'an-70', 'su-24', 'tu-22', 'il-76']
格式转换
将 Lableme 数据集转为 yolov8 格式的数据集,转换代码如下:
import os
import shutil
import numpy as np
import json
from glob import glob
import cv2
from sklearn.model_selection import train_test_split
from os import getcwd
def convert(size, box):
dw = 1. / (size[0])
dh = 1. / (size[1])
x = (box[0] + box[1]) / 2.0 - 1
y = (box[2] + box[3]) / 2.0 - 1
w = box[1] - box[0]
h = box[3] - box[2]
x = x * dw
w = w * dw
y = y * dh
h = h * dh
return (x, y, w, h)
def change_2_yolo5(files, txt_Name):
imag_name=[]
for json_file_ in files:
json_filename = labelme_path + json_file_ + ".json"
out_file = open('%s/%s.txt' % (labelme_path, json_file_), 'w')
json_file = json.load(open(json_filename, "r", encoding="utf-8"))
# image_path = labelme_path + json_file['imagePath']
imag_name.append(json_file_+'.jpg')
height, width, channels = cv2.imread(labelme_path + json_file_ + ".jpg").shape
for multi in json_file["shapes"]:
points = np.array(multi["points"])
xmin = min(points[:, 0]) if min(points[:, 0]) > 0 else 0
xmax = max(points[:, 0]) if max(points[:, 0]) > 0 else 0
ymin = min(points[:, 1]) if min(points[:, 1]) > 0 else 0
ymax = max(points[:, 1]) if max(points[:, 1]) > 0 else 0
label = multi["label"].lower()
if xmax <= xmin:
pass
elif ymax <= ymin:
pass
else:
cls_id = classes.index(label)
b = (float(xmin), float(xmax), float(ymin), float(ymax))
bb = convert((width, height), b)
out_file.write(str(cls_id) + " " + " ".join([str(a) for a in bb]) + '\n')
# print(json_filename, xmin, ymin, xmax, ymax, cls_id)
return imag_name
def image_txt_copy(files,scr_path,dst_img_path,dst_txt_path):
"""
:param files: 图片名字组成的list
:param scr_path: 图片的路径
:param dst_img_path: 图片复制到的路径
:param dst_txt_path: 图片对应的txt复制到的路径
:return:
"""
for file in files:
img_path=scr_path+file
print(file)
shutil.copy(img_path, dst_img_path+file)
scr_txt_path=scr_path+file.split('.')[0]+'.txt'
shutil.copy(scr_txt_path, dst_txt_path + file.split('.')[0]+'.txt')
if __name__ == '__main__':
classes = ['c17', 'c5', 'helicopter', 'c130', 'f16', 'b2',
'other', 'b52', 'kc10', 'command', 'f15', 'kc135', 'a10',
'b1', 'aew', 'f22', 'p3', 'p8', 'f35', 'f18', 'v22', 'f4',
'globalhawk', 'u2', 'su-27', 'il-38', 'tu-134', 'su-33',
'an-70', 'su-24', 'tu-22', 'il-76']
# 1.标签路径
labelme_path = "USA-Labelme/"
isUseTest = True # 是否创建test集
# 3.获取待处理文件
files = glob(labelme_path + "*.json")
files = [i.replace("\\", "/").split("/")[-1].split(".json")[0] for i in files]
for i in files:
print(i)
trainval_files, test_files = train_test_split(files, test_size=0.1, random_state=55)
# split
train_files, val_files = train_test_split(trainval_files, test_size=0.1, random_state=55)
train_name_list=change_2_yolo5(train_files, "train")
print(train_name_list)
val_name_list=change_2_yolo5(val_files, "val")
test_name_list=change_2_yolo5(test_files, "test")
#创建数据集文件夹。
file_List = ["train", "val", "test"]
for file in file_List:
if not os.path.exists('./VOC/images/%s' % file):
os.makedirs('./VOC/images/%s' % file)
if not os.path.exists('./VOC/labels/%s' % file):
os.makedirs('./VOC/labels/%s' % file)
image_txt_copy(train_name_list,labelme_path,'./VOC/images/train/','./VOC/labels/train/')
image_txt_copy(val_name_list, labelme_path, './VOC/images/val/', './VOC/labels/val/')
image_txt_copy(test_name_list, labelme_path, './VOC/images/test/', './VOC/labels/test/')
运行完成后就得到了 yolov8 格式的数据集。
本地调试
如果你打算直接使用YOLOv8,可以通过执行命令 pip install ultralytics
安装。然而,如果你计划对模型进行修改或二次开发,建议避免使用该命令进行安装。
你可以访问官网或GitHub链接: 下载YOLOv8源码,解压后,将生成的YOLO数据集放入项目中的 datasets
文件夹(如果该文件夹不存在,需要手动创建)。
如图:
安装必要的库文件,安装命令:
pip install opencv-python
pip install numpy==1.23.5
pip install pyyaml
pip install tqdm
pip install matplotlib
请根据需要安装缺失的依赖,特别注意 numpy 的版本。如果是2.0以上版本,请确保将其降级到合适的版本。
然后在根目录新建 VOC.yaml 文件,如下图:
添加内容:
train: ./VOC/images/train # train images
val: ./VOC/images/val # val images
test: ./VOC/images/test # test images (optional)
•
names: ['c17', 'c5', 'helicopter', 'c130', 'f16', 'b2',
'other', 'b52', 'kc10', 'command', 'f15', 'kc135', 'a10',
'b1', 'aew', 'f22', 'p3', 'p8', 'f35', 'f18', 'v22', 'f4',
'globalhawk', 'u2', 'su-27', 'il-38', 'tu-134', 'su-33',
'an-70', 'su-24', 'tu-22', 'il-76']
然后新建 train.py,如下图:
在 train.py 添加代码:
from ultralytics import YOLO
if __name__ == '__main__':
# 加载模型
model = YOLO("ultralytics/cfg/models/v8/yolov8l.yaml") # 从头开始构建新模型
print(model.model)
•
# Use the model
results = model.train(data="VOC.yaml", epochs=100, device='0', batch=16,workers=0) # 训练模型
然后就可以看是训练了,点击 run 开始运行 train.py。
基于丹摩智算的训练
创建账号-创建实例-选择配置
在官网创建账号并登录后,进入主页面,点击“GPU 云实例”,然后选择“创建实例”。根据需求配置实例并选择合适的数据盘容量。在配置详情栏中查看当前选定的配置信息。接下来,选择支持的镜像(如PyTorch),然后点击“创建密钥对”以生成或导入公钥。最后,点击“立即创建”完成实例创建。
创建好后,点击 JupyterLab 进入控制台。
将我们刚才创建的工程压缩成 zip 的压缩包,等待上传
点击,文件夹样子的标签,进入根目录,然后点击↑,进入上传文件的页,选择文件,点击打开。
上传完成后,点击“Terminal”进入命令行界面。输入 ls
查看上传的压缩包。
然后,输入以下命令解压文件:
unzip ultralytics-main.zip
解压后,左侧目录会显示解压后的文件夹,点击进入即可。
点击 train.py,Open With→Editor。
打开 train.py 后就可以修改 train.py 里面的参数了。
安装 YoloV8 运行所需要的库:
pip install opencv-python
如果遇到错误 ImportError: libGL.so.1: cannot open shared object file
,请安装:
pip install opencv-python-headless
接着安装其他依赖:
pip install pyyaml
pip install tqdm
pip install matplotlib
pip install pandas
若某些文件无法下载,尝试设置国内镜像源:
pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple
安装完成后,运行 python train.py
开始训练。
测试代码(test.py):
from ultralytics import YOLO
if __name__ == '__main__':
# 加载模型
# model = YOLO('yolov8m.pt') # 加载官方模型
model = YOLO('runs/detect/train/weights/best.pt') # 加载自定义模型
results = model.predict(source="ultralytics/assets", device='0') # 对图片进行预测
print(results)
执行 python test.py
进行图片测试。
希望对你有帮助!加油!
若您认为本文内容有益,请不吝赐予赞同并订阅,以便持续接收有价值的信息。衷心感谢您的关注和支持!
更多推荐
所有评论(0)