你的位置:ai 巨乳 > 叉叉叉综合网图片 >

学妹超乖 Flexus X实例ultralytics模子yolov10深度学习AI部署与应用

  • 发布日期:2024-12-23 22:03    点击次数:52
  • 学妹超乖 Flexus X实例ultralytics模子yolov10深度学习AI部署与应用

    序论:

    🔍 深度学习新纪元,828 B2B企业节Flexus X实例特惠!思要高效考查YOLOv10模子,罢了精确图像识别?Flexus X以超卓算力,助您猖狂附近大范围数据集学妹超乖,加快模子迭代,让AI智能垂手而得。主办此刻,让翻新不再受限!

    🐳本实践演示从0到1部署YOLOv10深度学习AI大模子的环境搭建、模子考查、权重使用,以及各样貌的解读。实践环境为Flexus云就业器X实例 就业器,成就:4vCPUs | 12GiB

    环境准备购买就业器成就

    本次实践使用的是 Flexus云就业器X实例 就业器。

    在性能确立中我选拔了自界说模式,使用了4vCPUs | 12GiB,因为本次要实践的是yolov10的部署与应用,Windows操作系统具有愈加直不雅的用户界面和庞杂的图形解救,我选拔了宇宙镜像Windows Server 2022 数据中心版。以上成就仅供参考,并非硬性条目!

    伸开剩余97%

    贯穿就业器

    在华为云就业器戒指台中找到咱们刚刚购买的就业器,将弹性公网IP地址复制下来。

    快捷键Windows + R 掀开运行窗口,输入mstsc,回车!

    输入缱绻机:弹性公网IP地址;用户名:MicrosoftAccount\Administrator,单击“细则”。

    然后输入密码,就得胜的贯穿到咱们的就业器了。

    要是健忘密码了,不错在操作列中点击重置密码,从头确立咱们的就业器密码。

    安设Python

    咱们先来安设python3,掀开官网地址

    Download Python | Python.org

    在官网下一个大于大于3.8的python安设包(官方建议使用3.9的版块),选拔amd64的exe版块

    安设的时候勾选最底下的帮咱们添加环境变量

    恭候一霎,出现底下这个界面便是安设得胜了。

    CMD掀开戒指台小黑窗,奉行 python -V 和 pip -V 检讨python版块与pip版块,望望咱们的环境变量是否确立得胜。

    安设Pytorch

    到官网安设Pytorch

    Start Locally | PyTorch

    在安设之前望望我方买的就业器是否有GPU,不错使用敕令来检讨

    检讨CPU型号:cat /proc/cpuinfo | grep "model name"

    检讨GPU型号(Nvidia GPU):nvidia-smi --query-gpu=gpu_name --format=csv

    检讨GPU型号(AMD Radeon GPU):sudo lshw -C display

    因为我这台是只好CPU的,因此在官网中选拔Stable(沉稳版),系统Linux,用pip来安设吧,然后Compute Platform选拔CPU,然后把Run this Command:中的敕令👇cmd掀开黑窗口奉行。

    我这里奉行的是

    pip3 install torch torchvision torchaudio

    径直奉行可能会很慢,我在背面加上指定镜像源,切换为国内镜像

    pip3 install torch torchvision torchaudio -i https://pypi.mirrors.ustc.edu.cn/simple/

    出现如下画面即是得胜下载完成。

    部署YOLOv10

    YOLOv10是YOLO(You Only Look Once)系列的最新版块,由清华大学的参谋东谈主员开荒,旨在进一步提高及时方针检测的成果和准确性。以下是对YOLOv10的详备先容:

    之前的YOLO版块在后处理和模子架构方面仍存在不及,相等是依赖于非最大扼制(NMS)进行后处理,这终局了模子的端到端部署并加多了推理蔓延。YOLOv10通过摒除NMS和优化模子组件,旨在处置这些问题,罢了更高的性能和成果。

    拉取YOLOv10代码并安设有关依赖

    掀开YOLOV0的GItHub代码库,将源码下载到土产货,解压。

    GitHub - THU-MIG/yolov10: YOLOv10: Real-Time End-to-End Object Detection

    解压完成后,掀开敕令行窗口,cd到源码的职责目次,奉行底下两个敕令。

    //升级pip

    python -m pip install --upgrade pip

    pip install -r requirements.txt

    pip install ultralytics

    pip install yolo

    pip install -e .

    速率慢的话换国内镜像,在敕令背面加上-i 镜像源

    以下是常用的国内镜像源

    清华大学:https://pypi.tuna.tsinghua.edu.cn/simpl

    阿里云:https://mirrors.aliyun.com/pypi/simple/

    豆瓣:https://pypi.douban.com/simple/

    腾讯云:https://mirrors.cloud.tencent.com/pypi/simple/

    华为云:https://mirrors.huaweicloud.com/repository/pypi/simple/

    中国科学期间大学:https://pypi.mirrors.ustc.edu.cn/simple/

    华中科技大学:http://pypi.hustunique.com/

    山东理工大学:http://pypi.sdutlinux.org/

    浙江大学:https://mirrors.zju.edu.cn/pypi/web/simple

    北京异邦语大学:https://mirrors.bfsu.edu.cn/pypi/web/simple

    上海交通大学:https://mirrors.sjtug.sjtu.edu.cn/pypi/web/simple

    当以上有关依赖齐安设罢了后,奉行以下考查敕令测试咱们的环境(此武艺可跳过)。

    yolo detect train data=coco.yaml model=yolov10s.yaml epochs=5 batch=256 imgsz=640

    第一次奉行会自动下载官方提供的考查案例文献,需要恭候较永劫间。

    数据集准备

    YOLOv10动作及时方针检测模子,表面上解救多种类型的数据集,只消这些数据集适应YOLOv10的输入花式和标注条目。具体来说,YOLOv10不错解救的数据集包括但不限于以下几种类型:

    通用方针检测数据集:如COCO(Common Objects in Context)数据集,这是一个大型、丰富的图像数据集,用于方针检测、分割、要害点检测等多种任务。YOLOv10在COCO数据集上取得了显耀的性能普及,展现出优异的精度-成果均衡材干。 特定领域数据集:YOLOv10也不错应用于特定领域的数据集,如交通象征检测数据集、东谈主脸检测数据集、车辆检测数据集等。这些数据集经常针对特定场景或任务进行齐集和标注,以闲暇特定领域的需求。 自界说数据集:用户还不错说明我方的需求创建自界说数据集,并使用YOLOv10进行考查和测试。自界说数据集需要按照YOLOv10的输入花式进行标注和组织,包括图像文献、标签文献以及可能的数据集成就文献等。

    经常来说,咱们需要将标注驱散与原图按比例分派到三个文献夹中

    如你有100张标注了的图片,爽直 80 张图片用于考查数据,约 10 张图片用于考证数据,约 10 张图片用于测试数据

    train 旅途用于考查模子,val 旅途用于考证模子,test 旅途用于测试模子。在考查和考证期间,模子将在不同的数据集上进行考查和考证,以便评估模子的性能。在测试期间,模子将使用扫数这个词数据集进行测试,以细则其性能目的

    需要防备的是:考查过的图有顷常弗成用于考证数据。这是因为在考查期间,模子照旧对这些图片进行了考查,并学会了识别这些图片中的对象和场景类别。

    因为数据标注要忽地多量的时代,这里径直拿出我最爱的皮卡丘标注数据

    400多张“皮卡丘”原图与标注驱散以及yolov8的考查驱散best.pt权重和ONNX花式文献_yolov8权重转onnx资源-CSDN文库

    在这个压缩包中有皮卡丘图片与标注信息,还有yolov8的考查好的权重文献,咱们只留住images和labels用来考查yolov10版块的权重。

    因为我比拟懒,能用代码处置的事就用代码,底下咱们使用python对数据集进行立时候派。

    修改底下代码中66-67行中的

    src_data_folder = '数据集旅途' target_data_folder = '处理后的数据集'

    # 器具类

    import os

    import random

    from shutil import copy2

    def data_set_split(src_data_folder, target_data_folder, train_scale=0.8, val_scale=0.2):

    '''

    读取源数据文献夹,生成区别好的文献夹,分为train、val两个文献夹进行

    :param src_data_folder: 源文献夹

    :param target_data_folder: 方针文献夹

    :param train_scale: 考查集比例

    :param val_scale: 考证集比例

    :return:

    '''

    print("初始数据集区别")

    class_names = os.listdir(src_data_folder)

    欧美日韩中文字幕在线,播放

    # 在方针目次下创建文献夹

    split_names = ['train', 'val']

    for split_name in split_names:

    split_path = os.path.join(target_data_folder,勾引av split_name)

    if os.path.isdir(split_path):

    pass

    else:

    os.makedirs(split_path)学妹超乖

    # 然后在split_path的目次下创建类别文献夹

    for class_name in class_names:

    class_split_path = os.path.join(split_path, class_name)

    if os.path.isdir(class_split_path):

    pass

    else:

    os.makedirs(class_split_path)

    # 按照比例区别数据集,并进行数据图片的复制

    # 最初进行分类遍历

    for class_name in class_names:

    current_class_data_path = os.path.join(src_data_folder, class_name)

    current_all_data = os.listdir(current_class_data_path)

    current_data_length = len(current_all_data)

    current_data_index_list = list(range(current_data_length))

    random.shuffle(current_data_index_list)

    train_folder = os.path.join(os.path.join(target_data_folder, 'train'), class_name)

    val_folder = os.path.join(os.path.join(target_data_folder, 'val'), class_name)

    train_stop_flag = current_data_length * train_scale

    current_idx = 0

    train_num = 0

    val_num = 0

    for i in current_data_index_list:

    src_img_path = os.path.join(current_class_data_path, current_all_data[i])

    if current_idx <= train_stop_flag:

    copy2(src_img_path, train_folder)

    train_num = train_num + 1

    else:

    copy2(src_img_path, val_folder)

    val_num = val_num + 1

    current_idx = current_idx + 1

    print("*********************************{}*************************************".format(class_name))

    print("{}类按照{}:{}的比例区别完成,一共{}张图片".format(class_name, train_scale, val_scale, current_data_length))

    print("考查集{}:{}张".format(train_folder, train_num))

    print("考证集{}:{}张".format(val_folder, val_num))

    if __name__ == '__main__':

    src_data_folder = 'datasets/dwsb'

    target_data_folder = 'datasets/dwsb2'

    data_set_split(src_data_folder, target_data_folder, 0.8, 0.2)

    因为在yolo考查中,咱们并不需要将图片和标注驱散分开存放,因此咱们将train和val中的images和labels里的文献齐一谈移出来,然后将这两个文献夹删掉即可。

    要防备的是,无论是train照旧val齐需要查验是否包含这样一个classes.txt文献,要是莫得的话需要我方手动补上,因为我这里的素材只好一个皮卡丘方针,况且标注为1了,是以只写了一个1。

    Detect方针检测模子考考查查数据集的成就文献

    参考旅途C:\yolov10-main\ultralytics\cfg\datasets 找到voc.yaml,复制一份,自界说一个名字

    对内部的代码进行退换,path 是咱们的刚刚准备好的数据集目次旅途(便是刚刚的data,我改了个名字),train和val便是考查集和考证集的文献夹称号。

    names: 标注时的数值和他的又名(这里需要说明照数据集的标注类别来界说,要是用的是我的数据集,径直按照我着实立就好了)

    # Ultralytics YOLO 🚀, AGPL-3.0 license

    # PASCAL VOC dataset http://host.robots.ox.ac.uk/pascal/VOC by University of Oxford

    # Documentation: # Documentation: https://docs.ultralytics.com/datasets/detect/voc/

    # Example usage: yolo train data=VOC.yaml

    # parent

    # ├── ultralytics

    # └── datasets

    # └── VOC ← downloads here (2.8 GB)

    # 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: C:/yolov10-main/datasets/pkqdata

    train: train

    val: val

    test: # test images (optional)

    - images/test2007

    # Classes

    names:

    0: pkq

    # Download script/URL (optional) ---------------------------------------------------------------------------------------

    download: |

    import xml.etree.ElementTree as ET

    from tqdm import tqdm

    from ultralytics.utils.downloads import download

    from pathlib import Path

    def convert_label(path, lb_path, year, image_id):

    def convert_box(size, box):

    dw, dh = 1. / size[0], 1. / size[1]

    x, y, w, h = (box[0] + box[1]) / 2.0 - 1, (box[2] + box[3]) / 2.0 - 1, box[1] - box[0], box[3] - box[2]

    return x * dw, y * dh, w * dw, h * dh

    in_file = open(path / f'VOC{year}/Annotations/{image_id}.xml')

    out_file = open(lb_path, 'w')

    tree = ET.parse(in_file)

    root = tree.getroot()

    size = root.find('size')

    w = int(size.find('width').text)

    h = int(size.find('height').text)

    names = list(yaml['names'].values()) # names list

    for obj in root.iter('object'):

    cls = obj.find('name').text

    if cls in names and int(obj.find('difficult').text) != 1:

    xmlbox = obj.find('bndbox')

    bb = convert_box((w, h), [float(xmlbox.find(x).text) for x in ('xmin', 'xmax', 'ymin', 'ymax')])

    cls_id = names.index(cls) # class id

    out_file.write(" ".join(str(a) for a in (cls_id, *bb)) + '\n')

    # Download

    dir = Path(yaml['path']) # dataset root dir

    url = 'https://github.com/ultralytics/yolov5/releases/download/v1.0/'

    urls = [f'{url}VOCtrainval_06-Nov-2007.zip', # 446MB, 5012 images

    f'{url}VOCtest_06-Nov-2007.zip', # 438MB, 4953 images

    f'{url}VOCtrainval_11-May-2012.zip'] # 1.95GB, 17126 images

    download(urls, dir=dir / 'images', curl=True, threads=3, exist_ok=True) # download and unzip over existing paths (required)

    # Convert

    path = dir / 'images/VOCdevkit'

    for year, image_set in ('2012', 'train'), ('2012', 'val'), ('2007', 'train'), ('2007', 'val'), ('2007', 'test'):

    imgs_path = dir / 'images' / f'{image_set}{year}'

    lbs_path = dir / 'labels' / f'{image_set}{year}'

    imgs_path.mkdir(exist_ok=True, parents=True)

    lbs_path.mkdir(exist_ok=True, parents=True)

    with open(path / f'VOC{year}/ImageSets/Main/{image_set}.txt') as f:

    image_ids = f.read().strip().split()

    for id in tqdm(image_ids, desc=f'{image_set}{year}'):

    f = path / f'VOC{year}/JPEGImages/{id}.jpg' # old img path

    lb_path = (lbs_path / f.name).with_suffix('.txt') # new label path

    f.rename(imgs_path / f.name) # move image

    convert_label(path, lb_path, year, id) # convert labels to YOLO format

    考查敕令

    奉行底下敕令初始考查咱们的模子

    yolo detect train data=coco.yaml model=yolov10n/s/m/b/l/x.yaml epochs=500 batch=256 imgsz=640 device=0,1,2,3,4,5,6,7

    对于敕令的内容,咱们来进行解读:

    data=coco.yaml: 指定了考查数据集的成就文献,coco.yaml是一个YAML花式的文献,它包含了考查YOLO模子所需的数据集信息,如图片旅途、标注文献旅途、类一名号等。数据集罢免COCO(Common Objects in Context)的花式 model=yolov10n/s/m/b/l/x.yaml: 指定了模子的成就文献。这里使用了yolov10n/s/m/b/l/x.yaml动作占位符,实质上应该选拔一个具体的模子成就,如yolov10n.yaml、yolov10s.yaml等 YOLOv10-N:适用于资源极其有限的环境 YOLOv10-N:适用于资源极其有限的环境 YOLOv10-S:兼顾速率与精度 YOLOv10-S:兼顾速率与精度 YOLOv10-M:一般用途 YOLOv10-M:一般用途 YOLOv10-B:宽度加多,精度更高 YOLOv10-B:宽度加多,精度更高 YOLOv10-L:以缱绻资源为代价罢了高精度 YOLOv10-L:以缱绻资源为代价罢了高精度 YOLOv10-X:最高精度和性能 YOLOv10-X:最高精度和性能 epochs=500: 指定了考查经过中的迭代次数(epoch)。一个epoch意味着扫数这个词考查数据集被遍历了一次。这里确立为500,意味着扫数这个词数据集将被用于考查500次。 batch=256: 确立了每个batch中的图片数目。Batch size是一个紧要的超参数,它影响模子的考查速率和沉稳性。较大的batch size不错加快考查,但也可能需要更多的内存。 imgsz=640: 指定了输入图片的大小。在这个例子中,扫数输入图片齐将被退换(或剪辑)到640x640像素。退换输入图片大小是YOLO等方针检测模子考查前的常见武艺。 device=0,1,2,3,4,5,6,7: 指定了用于考查的GPU建立ID。在这个例子中,它使用了8个GPU(从0到7编号)来加快考查经过。这经常是在具有多个GPU的就业器上进行的,不错显耀减少考查时代。

    奉行完敕令后出现以下窗口意味着正在考查中,接下来便是漫长的恭候~~~

    掀开任务不竭器看一下性能,CPU的应用率照旧很可不雅的,4vCPUs | 12GiB的成就考查yolov10s的模子绰绰过剩!

    考查完成后

    weights下有两个.pt文献,这是咱们的考查驱散权重文献

    best.pt文献保存的是在考证集上推崇最好的模子权重。在考查经过中,每个epoch终局后齐会对考证集进行一次评估,并纪录下推崇最好的模子的权重。这个文献经常用于推理和部署阶段,因为它包含了在考证集上推崇最好的模子的权重,不错赢得最好的性能。 last.pt文献则保存的是终末一次考查迭代终局后的模子权重。这个文献经常用于赓续考查模子,因为它包含了终末一次考查迭代终局时的模子权重,不错赓续从上一次考查终局的地方赓续考查模子。

    因此部署的话使用best,下次赓续追加考查就用last

    除了权重文献,咱们发现还有一些考查驱散可视化分析图,底下咱们对其中几张进行检讨!

    为了梗概评价不同算法的优劣,在Precision和Recall的基础上建议了F1值的办法,来对Precision和Recall进行举座评价。F1的界说如下:

    F1值的取值范围是0到1,其中1暗示最好性能(即精确率和调回率齐为1),而0暗示最差性能(即精确率和调回率齐为0)由上图可见模子在均衡精确率和调回率方面的推崇齐比拟理思。

    在方针检测中,耗损函数饰演着至关紧要的变装。它的主要作用是测度模子展望驱散与真正标签之间的互异或罪戾,并通过最小化这个互异来优化模子的参数,从而提高模子的展望准确性。

    IoU系列耗损函数简介

    IoU(Intersection over Union):最基本的方针检测耗损函数之一,缱绻展望框与真正框的交加与并集之比。相关词,当展望框与真正框不相交时,IoU值为0,导致耗损函数莫得梯度。 GIoU(Generalized Intersection over Union):针对IoU的迤逦进行改良,引入了最小阻滞款式C(不错包含展望框和真正框)的办法,并缱绻C中未秘密展望框和真正框的面积占C总面积的比值,终末用IoU减去这个比值得到GIoU。GIoU梗概在展望框与真正框不重迭时提供梯度信息。 DIoU(Distance-IoU):进一步商酌了展望框与真正框中心点之间的距离信息,使耗损函数在重迭时仍能为鸿沟框提供迁移处所。 CIOU(Complete IoU):在DIoU的基础上加多了长宽比的一致性项,使耗损函数愈加全面和鲁棒。 识别敕令

    使用yolo predict来进行识别,model便是咱们刚刚考查好的模子,source是你要拿来识别的图片文献夹旅途。同期背面不错确立一些参数来退换你思要的识别驱散。

    yolo predict model=模子旅途 source= 图片旅途 conf=0.5 识别阈值

    更多其他参数可参考下表 :

    Key

    Value

    Description

    source

    'ultralytics/assets'

    source directory for images or videos

    conf

    0.25

    object confidence threshold for detection

    iou

    0.7

    intersection over union (IoU) threshold for NMS

    imgsz

    640

    image size as scalar or (h, w) list, i.e. (640, 480)

    half

    False

    use half precision (FP16)

    device

    None

    device to run on, i.e. cuda device=0/1/2/3 or device=cpu

    show

    False

    show results if possible

    save

    False

    save images with results

    save_txt

    False

    save results as .txt file

    save_conf

    False

    save results with confidence scores

    save_crop

    False

    save cropped images with results

    hide_labels

    False

    hide labels

    hide_conf

    False

    hide confidence scores

    max_det

    300

    maximum number of detections per image

    vid_stride

    False

    video frame-rate stride

    line_width

    None

    The line width of the bounding boxes. If None, it is scaled to the image size.

    visualize

    False

    visualize model features

    augment

    False

    apply image augmentation to prediction sources

    agnostic_nms

    False

    class-agnostic NMS

    retina_masks

    False

    use high-resolution segmentation masks

    classes

    None

    filter results by class, i.e. class=0, or class=[0,2,3]

    boxes

    True

    Show boxes in segmentation predictions

    奉行完识别敕令后,可在输出信息中看到识别驱散文献所在位置,detect\predict(数字会自动叠加)

    轻易掀开一张图片,找出识别前的图片对比一下,皮卡丘照旧被框出来了,并打上咱们确立的pkq标签。

    至此~咱们就完成了YOLOv10方针检测模子的考查与识别职责了!扫数这个词实践操作下来学妹超乖,Flexus云就业器X实例的推崇齐长短常出色的!

    发布于:河北省



    Powered by ai 巨乳 @2013-2022 RSS地图 HTML地图

    Copyright Powered by365建站 © 2013-2024