基于丹摩智算的`YoloV8-训练与测试

news2024/9/25 18:07:42
🍑个人主页:Jupiter.
🚀 所属专栏:Linux从入门到进阶
欢迎大家点赞收藏评论😊

在这里插入图片描述

在这里插入图片描述

目录

    • 丹摩简介
    • 前言
  • `YoloV8-训练与测试`
      • 制作数据集
      • 格式转换
      • 本地调试
  • 基于丹摩智算的训练
      • 创建账号-创建实例-选择配置
      • 测试代码


丹摩简介

链接:https://www.damodel.com/console/overview
DAMODEL(丹摩智算)是专为 AI 打造的智算云,致力于提供丰富的算力资源与基础设施助力 AI 应用的开发、训练、部署。

前言

自YOLO(You Only Look Once)模型问世以来,其简洁的设计理念和高效的目标检测能力便广受好评。YOLO系列模型通过一次卷积神经网络的前向传播,即可同时预测图像中多个物体的位置和类别,极大地提高了目标检测的速度和效率。随着技术的不断进步,YOLO模型也经历了多次迭代升级,每一次更新都带来了性能上的显著提升。YoloV8作为YOLO系列的最新力作,不仅继承了前代模型的高效性和实时性,还在网络架构、损失函数等方面进行了优化和改进,进一步提升了模型的检测精度和泛化能力。

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 格式的数据集。
在这里插入图片描述

本地调试

直接执行命令pip install ultralytics,如果你打算修改模型,或者二次创新,不建议使用安装命令安装。

在官网上下载 YoloV8,GitHub 链接:https://github.com/ultralytics/ultralytics
下载到本地后解压,将生成的 yolo 数据集放到 datasets(需要创建 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,就可以看到 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: No such file or direc,这样的错误,需要安装:


```python
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 代码如下:


```python
from ultralytics import YOLO


if __name__ == '__main__':
    # Load a model
    # model = YOLO('yolov8m.pt')  # load an official model
    model = YOLO('runs/detect/train/weights/best.pt')  # load a custom model
    results = model.predict(source="ultralytics/assets", device='0')  # predict on an image
    print(results)

执行测试,就可以测试图片了。


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2164399.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

python中SortedList类的用法详解

SortedList类是python第三方库sortedcontainers中的提供的一种高效的方式来存储有序的元素集合&#xff0c;同时支持快速的插入、删除和查找操作。 SortedList类的特点&#xff1a; 1.排序列表的值始终保持有序。 2.排序列表中的值必须可以比较。 3.值的总顺序在存储于排序列表…

设计模式之装饰模式(Decorator)

前言 这个模式带给我们有关组合跟继承非常多的思考 定义 “单一职责” 模式。动态&#xff08;组合&#xff09;的给一个对象增加一些额外的职责。就增加功能而言&#xff0c;Decorator模式比生成子类&#xff08;继承&#xff09;更为灵活&#xff08;消除重复代码 & 减少…

10个超好用的企业文档加密软件丨2024年加密软件大盘点

都2024年了&#xff01; 泄密事件依旧频发&#xff01; 到底该如何防止文档信息泄密&#xff1f; 别急&#xff0c;本文小编为你整理了10款超好用的企业文档加密软件&#xff0c;有力保护你的文档信息安全&#xff0c;快来看看吧&#xff0c;一定有你的菜&#xff01; 1. 安企…

Leetcode 45-跳跃游戏 II

题解 法一 找当前可跳到最远的起始位置&#xff08;贪心法&#xff09; 局部最优&#xff1a; 当前覆盖范围内尽选可到达最远的一步&#xff0c;如果还没到终点&#xff0c;步数再加一。 整体最优&#xff1a; 一步尽可能多走&#xff0c;从而达到最少步数。 本题和55题不同…

通义灵码最佳使用实践:如何深度使用辅助功能

通义灵码是JetBrains或VSCode集成开发环境&#xff08;IDE&#xff09;中嵌入的一款智能开发助手工具&#xff0c;旨在通过人工智能技术简化软件开发过程&#xff0c;提升开发效率。本文将介绍在开发过程中如何深度体验多种辅助功能。其主要功能包括&#xff1a;通用大模型问答…

win11任务栏怎么自定义调整?任务栏透明设置技巧分享(实用功能)

Win11任务栏是可以自定义设置的&#xff0c;那么怎么把任务栏变透明呢&#xff1f;最近很多小伙伴都在咨询Windows11任务栏怎么透明&#xff1f;那还不简单吗&#xff0c;本文整理了一些关于Windows任务栏自定义调整的教程&#xff0c;包括win11任务栏透明、隐藏任务栏、显示任…

阿里发布视频大模型,快来体验

传送门&#xff1a;https://tongyi.aliyun.com/wanxiang/videoCreation 使用说明&#xff1a;https://alidocs.dingtalk.com/i/nodes/jb9Y4gmKWrx9eo4dCql9LlbYJGXn6lpz?spm5176.29623064.0.0.41ed1eceDjrPw0&utm_sceneperson_space

大数据新视界 --大数据大厂之大数据实战指南:Apache Flume 数据采集的配置与优化秘籍

&#x1f496;&#x1f496;&#x1f496;亲爱的朋友们&#xff0c;热烈欢迎你们来到 青云交的博客&#xff01;能与你们在此邂逅&#xff0c;我满心欢喜&#xff0c;深感无比荣幸。在这个瞬息万变的时代&#xff0c;我们每个人都在苦苦追寻一处能让心灵安然栖息的港湾。而 我的…

如何使用ssm实现基于SpringMVC网上选课系统的设计与实现

TOC ssm696基于SpringMVC网上选课系统的设计与实现jsp 研究背景和来源 目前的管理类系统已各种各样&#xff0c;涉及到生活中的每一个部分。购物类、网站类、信息统计类、办公类、官网类等非常丰富。我国各类系统的发展已非常成熟&#xff0c;这些系统依靠网络和计算机技术不…

多网站域名共享微信网页授权:PHP实现微信授权代理转发

在做网站需要微信扫码或微信内授权注册登陆&#xff0c;但是做过类似功能的都知道&#xff0c;需要授权登陆比较麻烦。 需要满足以下条件&#xff1a; 申请公众号网站域名备案开放平台注册新建应用审核 有没有简单&#xff0c;不需要申请免备案可用的方案&#xff0c;答案肯…

解决 ValueError: did not find HDF5 headers----安装netCDF4报错

报错如图 报错说是hdf5找不到&#xff0c;按照这个思路搞了半天都没搞好。后来换了一个安装命令 pip install netcdf41.5.7 成功&#xff01;&#xff01;

基于vue框架的大连盐业有限公司生产管理系统的设计与实现3hk5y(程序+源码+数据库+调试部署+开发环境)系统界面在最后面。

系统程序文件列表 项目功能&#xff1a;计划员,工艺员,生产建模,生产计划,生产信息,生产监视,工艺质量,盐政信息 开题报告内容 一、引言 随着信息技术的飞速发展和市场竞争的日益激烈&#xff0c;传统盐业企业如大连盐业有限公司正面临着转型升级的迫切需求。传统管理模式下…

python-比较月亮大小/数组下标/人见人爱a+b

一:比较月亮大小 题目描述 小理是一名出色的狼人。众所周知&#xff0c;狼人只有在满月之夜才会变成狼。 同时&#xff0c;月亮的大小随着时间变化&#xff0c;它的大小变化 3030 天为一循环。 它的变化情况(从第一天开始)为 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,14,13,12,1…

Python提供内置正则表达式库

正则表达式是一种强大的文本处理工具&#xff0c;可以匹配文本片段的模式 最简单的正则表达式就是普通的字符串&#xff0c;可以匹配自身 要注意的是&#xff0c;正则表达式并不是一个程序&#xff0c;它使用一种特定的语法模式来描述在搜索文本时要匹配的一个或多个字符串。正…

UE5 C++: 插件编写05 | 批量删除无用资产

删除无用的asset 已经在地图中使用的asset会有asset reference EditorAssetLibrary&#xff08;按F12&#xff09;open header file&#xff0c;会有如下一个功能&#xff0c;可以找asset reference&#xff0c;返回bool值 UFUNCTION(BlueprintCallable, Category "Edi…

wpf在图上画矩形,矩形可拖动、大小可调节,使用装饰器Adorner调整矩形大小,限制拖动和调节范围

效果 功能 使用wpf实现 在图片上画一个矩形框该矩形框可以调节大小该矩形框可以拖动调整位置 注&#xff1a;这里的鼠标事件是&#xff0c;双击在图上画一个固定大小的矩形框&#xff0c;右键按住拖动矩形框。有需要的可以自行调整对应的鼠标事件 参考资料&#xff1a;https…

心理测试小程序开发心理健康MBTI人格测试,小程序源码部署支持多种流量主

简介 在当今这个高速运转的社会里&#xff0c;个人内心性格与心理健康日益成为人们关注的焦点。随着科技的日新月异&#xff0c;心理评估的方式正经历着深刻的变革&#xff0c;从传统的面对面咨询室中解放出来&#xff0c;无缝融入了我们日常使用的移动设备之中。这一趋势极大…

【网络安全】网络基础第一阶段——第四节:网络协议基础---- VRRP与网络架构设计

目录 一、VRRP 1.1 VRRP使用场景及简介 1.2 VRRP基本原理 1.2.1 VRRP基本结构 1.2.2 设备类型 1.2.3 VRRP工作原理 1.3 VRRP的基本配置 1.3.1 基于三层交换机的VRRP组配置 1.3.2 SMTPVRRP经典组网 1.4 端口聚合 1.4.1 端口聚合技术 1.4.2 聚合模式 1.4.3 Eth-trun…

Python项目Flask框架整合Redis

一、在配置文件中创建Redis连接信息 二、 实现Redis配置类 import redis from config.config import REDIS_HOST, REDIS_PORT, REDIS_PASSWD, REDIS_DB, EXPIRE_TIMEclass RedisDb():def __init__(self, REDIS_HOST, REDIS_PORT, REDIS_DB, EXPIRE_TIME, REDIS_PASSWD):# 建立…

【笔记】KaiOS 系统框架和应用结构(APP界面逻辑)

KaiOS系统框架 最早自下而上分成Gonk-Gecko-Gaia层,代码有同名的目录,现在已经不用这种称呼。 按照官网3.0的版本迭代介绍,2.5->3.0已经将系统更新成如下部分: 仅分为上层web应用和底层平台核心,通过WebAPIs连接上下层,这也是kaios系统升级变更较大的部分。 KaiOS P…