yolov5的使用

2023-09-12 16:59:18

本地的标注数据集工具推荐如下:

Labelme 。能够对图像进行多边形、矩形、圆、折线,点形式的标注,主要用于目标检测,语义分割,图像分类等任务。
Labellmg 。通过创建矩形框及标签属性标签相应的区域内容,得到标注信息是矩形框的位置大小和标签属性的XML文件。
VGG 。支持在线或离线使用,能标注矩形、圆、椭圆、多边形、点和折线标注,并且发布图像标准工具,支持对象检测、图像语义分割与实例分割数据标注。
此外,还有 OpenCV、Labelbox、VOTT、PixelAnnotationTool、point-cloud-annotation-tool、AI-tagger等 也是标注数据集工具1。

在线标注工具COCO

链接: COCO-Annotator教程

训练模型

以下是一个简单的示例,展示了如何使用Yolov5训练一个目标检测模型。请注意,此代码示例假定您已经正确安装了Yolov5和其他必要的依赖项,并且您的数据集已准备就绪。

import torch
import torchvision

# 加载数据集
train_dataset = torchvision.datasets.CocoDetection(root='./data', annFile='./data/annotations/instances_train2017.json', transform=torchvision.transforms.ToTensor())
train_loader = torch.utils.data.DataLoader(train_dataset, batch_size=16, shuffle=True, num_workers=4)

# 加载Yolov5模型和损失函数
model = torchvision.models.detection.yolov5s(pretrained=True)
criterion = torchvision.losses.FocalLoss()

# 开始训练
model = model.to(device)  # 如果有GPU,请使用GPU
model.train()

for epoch in range(100):  # 迭代次数
    running_loss = 0.0
    for i, data in enumerate(train_loader, 0):
        inputs, targets = data[0].to(device), data[1].to(device)
        optimizer.zero_grad()
        outputs = model(inputs)
        loss = criterion(outputs, targets)
        loss.backward()
        optimizer.step()
        running_loss += loss.item()
        if i % 2000 == 1999:    # 每2000个小批次打印一次
            print('[%d, %5d] loss: %.3f' %
                  (epoch + 1, i + 1, running_loss / 2000))
            running_loss = 0.0

print('Finished Training')

首先,我们导入了一些必要的Python库,包括PyTorch和torchvision。torchvision是一个用于计算机视觉任务的库,它包含了众多常见的数据集、模型和损失函数。

然后,我们加载了准备好的数据集(train_dataset)。在这个例子中,我们使用了COCO数据集,它是一个常用的目标检测数据集。接着,我们使用torch.utils.data.DataLoader来创建一个数据加载器,它会将数据集划分为小批次并返回每个批次的数据。这里,我们设置了批次大小为16,并启用了随机打乱数据的选项(shuffle=True)。

接下来,我们加载了一个预训练的Yolov5模型(model)。Yolov5是一种流行的目标检测算法,它可以在各种任务上表现出色。在这里,我们使用了预训练的模型,这意味着该模型已经在大量数据上进行了训练,并且已经学会了一些通用的特征表示。

然后,我们定义了损失函数(criterion)。在目标检测任务中,常用的损失函数是Focal Loss,它可以帮助模型更好地关注难以分类的样本。

最后,我们开始训练模型。我们首先将模型和数据加载到设备上(如果有GPU的话,使用GPU),并设置模型为训练模式(model.train())。然后,我们使用一个循环来迭代训练数据集,每次迭代我们都将模型的参数更新以最小化损失函数。具体而言,我们首先将输入数据和目标标签传递给模型,然后计算模型的输出和损失,接着使用反向传播算法更新模型的参数以减小损失。

在每个epoch结束时,我们计算了平均损失(running_loss / 2000)并打印出来。这里的running_loss是用来累计这个epoch中所有小批次的损失。

最后,我们打印出训练完成的消息。此时,模型已经学习了如何进行目标检测,可以用于实际的任务中了。

请注意,这只是一个基本的示例,实际使用中可能需要进行更多的设置和优化。例如,您可能需要调整学习率、增加数据增强、使用更复杂的损失函数等等。

以上程序输出的训练模型名字是yolov5s。这个模型是Yolov5系列模型中的一个,它代表了一个相对轻量级的模型,适用于对计算资源有限制的场景。Yolov5还有其它变种模型如yolov5m和yolov5l等,它们在参数数量和计算能力上有所不同,可以根据实际需求进行选择。
以上程序输出的模型名字在以下代码行中定义:

model = torchvision.models.detection.yolov5s(pretrained=True)

在这行代码中,我们使用torchvision.models.detection.yolov5s来加载预训练的Yolov5模型,并将其赋值给变量model。因此,以上程序输出的训练模型名字是yolov5s。

train_dataset = torchvision.datasets.CocoDetection(root='./data', annFile='./data/annotations/instances_train2017.json', transform=torchvision.transforms.ToTensor())
train_loader = torch.utils.data.DataLoader(train_dataset, batch_size=16, shuffle=True, num_workers=4)

这段代码是使用Python语言和PyTorch库来定义一个训练数据集及其加载器。具体来说,torchvision.datasets.CocoDetection用于创建一个COCO目标检测数据集,该数据集的根目录为’./data’,标注文件路径为’./data/annotations/instances_train2017.json’,并对数据进行转换(ToTensor)。然后,torch.utils.data.DataLoader用于创建一个数据加载器,它将数据集划分为大小为16的批次,并随机打乱数据,同时使用4个工作线程来加载数据。

transform=torchvision.transforms.ToTensor()表示的是数据预处理步骤。这是在使用PyTorch库加载图像数据时常用的一种转换。ToTensor()方法将PIL图像或Numpy ndarray类型的数据转换为torch.Tensor,并对数据进行归一化,将像素的数值范围从0到255转换到0到1之间。这样的预处理步骤对于深度学习模型的训练非常必要,因为模型本身无法直接处理原始的图像数据。

用PyTorch训练一个简单的多层感知器(MLP)进行手写数字识别(MNIST数据集)。

import torch
import torch.nn as nn
import torch.optim as optim
from torchvision import datasets, transforms

# 设定设备
device = torch.device("cuda" if torch.cuda.is_available() else "cpu")

# 定义网络结构
class MLP(nn.Module):
    def __init__(self):
        super(MLP, self).__init__()
        self.fc1 = nn.Linear(784, 128)
        self.fc2 = nn.Linear(128, 10)

    def forward(self, x):
        x = x.view(-1, 784)
        x = torch.relu(self.fc1(x))
        x = self.fc2(x)
        return x

# 加载数据集
transform=transforms.Compose([
        transforms.ToTensor(),
        transforms.Normalize((0.5,), (0.5,))
        ])
dataset1 = datasets.MNIST('../data', train=True, download=True, transform=transform)
dataset2 = datasets.MNIST('../data', train=False, transform=transform)

train_loader = torch.utils.data.DataLoader(dataset1)
test_loader = torch.utils.data.DataLoader(dataset2)

model = MLP().to(device)
criterion = nn.CrossEntropyLoss()
optimizer = optim.SGD(model.parameters(), lr=0.01, momentum=0.9)

# 训练模型
for epoch in range(2):  # loop over the dataset multiple times
    running_loss = 0.0
    for i, data in enumerate(train_loader, 0):
        inputs, labels = data[0].to(device), data[1].to(device)
        optimizer.zero_grad()
        # forward + backward + optimize
        outputs = model(inputs)
        loss = criterion(outputs, labels)
        loss.backward()
        optimizer.step()
        # print statistics
        running_loss += loss.item()
        if i % 2000 == 1999:    # print every 2000 mini-batches
            print('[%d, %5d] loss: %.3f' %
                  (epoch + 1, i + 1, running_loss / 2000))
            running_loss = 0.0

print('Finished Training')

YOLOv5是一种流行的目标检测算法,可以用于识别和定位图像中的对象。要使用YOLOv5识别老鼠,您需要执行以下步骤:

准备数据集:首先,您需要准备一个标记的数据集,其中包含一些带有标记框和类别标签的图像。您可以使用一些开源数据集,例如COCO或Pascal VOC,或者自己创建一个数据集。
下载YOLOv5模型:您可以从YOLOv5的官方网站下载预训练的模型。如果您要使用自己的数据集进行训练,则需要下载YOLOv5的Python实现,并使用PyTorch或TensorFlow等深度学习框架来训练模型。
加载模型和数据集:使用Python代码加载YOLOv5模型和数据集。您可以使用YOLOv5的Python API或自行编写代码。加载模型和数据集后,您可以使用适当的超参数对模型进行训练和调整。
运行目标检测:一旦加载了模型和数据集,您可以运行目标检测来识别图像中的老鼠。YOLOv5提供了一个前向传递函数,该函数将输入图像作为输入,并输出检测到的对象的边界框、类别标签和得分。
以下是一个使用YOLOv5进行老鼠目标检测的示例代码:

import torch
import cv2
from yolov5.utils.general import non_max_suppression, scale_coords
from yolov5.models.experimental import attempt_load
from yolov5.utils.torch_utils import select_device

# 加载预训练模型
weights = 'yolov5s.pt'
model = attempt_load(weights, map_location=select_device('cpu'))

# 读取图像
img0 = cv2.imread('img.jpg')

# 将图像转换为RGB格式并缩放为模型输入尺寸
img = img0[:, :, ::-1].copy()
img = torch.from_numpy(img).to(device)
img = img.float() / 255.0  # 标准化图像
if img.ndimension() == 3:
    img = img.unsqueeze(0)

# 进行目标检测
pred = model(img)[0]
pred = non_max_suppression(pred, conf_thres=0.5, iou_thres=0.5)

# 绘制检测结果
for det in pred[0]:
    if det is not None and len(det):
        det[:, :4] = scale_coords(img.shape[2:], det[:, :4], img0.shape).round()
        for *xyxy, conf, cls in reversed(det):
            c = int(cls)
            label = f'{model.names[c]} {conf:.2f}'
            plot_one_box(xyxy, img0, label=label, color=colors(c, True), line_thickness=3)

这段代码将加载一个名为’yolov5s.pt’的预训练模型,并对名为’img.jpg’的图像进行目标检测。检测结果将在原始图像上绘制出来。要使用自己的数据集进行训练,请更改超参数、数据集路径和文件名,并使用YOLOv5的Python API或自行编写代码来训练模型。

YOLOv5是一种流行的深度学习算法,用于目标检测和物体识别。它是由马来西亚的一个研究小组开发的,并受到了广泛关注。下面是如何用Python实现YOLOv5的步骤:

准备环境
首先,您需要安装Python和一些必要的库,例如NumPy、Pandas、Matplotlib以及深度学习框架PyTorch和Darknet。您还需要安装一些其他的库,例如OpenCV用于图像处理。

下载YOLOv5模型
在YOLOv5官方网站或者其他可信赖的源上下载预训练的YOLOv5模型。

加载模型和数据
使用Python代码加载YOLOv5模型和数据集。数据集需要包括带有标记框和类别标签的图像。您可以使用YOLOv5的Python API或自行编写代码来加载模型和数据。

进行目标检测
一旦加载了模型和数据集,您可以使用适当的超参数对模型进行训练和调整。然后,您可以使用YOLOv5的前向传递函数来对输入图像进行目标检测,该函数将输出检测到的物体的边界框、类别标签和得分。

下面是一个使用YOLOv5进行目标检测的Python代码示例:

import torch
import cv2
from yolov5.utils.general import non_max_suppression, scale_coords
from yolov5.models.experimental import attempt_load
from yolov5.utils.torch_utils import select_device

# 加载预训练模型
weights = 'yolov5s.pt'
model = attempt_load(weights, map_location=select_device('cpu'))

# 读取图像
img0 = cv2.imread('img.jpg')

# 将图像转换为RGB格式并缩放为模型输入尺寸
img = img0[:, :, ::-1].copy()
img = torch.from_numpy(img).to(device)
img = img.float() / 255.0  # 标准化图像
if img.ndimension() == 3:
    img = img.unsqueeze(0)

# 进行目标检测
pred = model(img)[0]
pred = non_max_suppression(pred, conf_thres=0.5, iou_thres=0.5)

# 绘制检测结果
for det in pred[0]:
    if det is not None and len(det):
        det[:, :4] = scale_coords(img.shape[2:], det[:, :4], img0.shape).round()
        for *xyxy, conf, cls in reversed(det):
            c = int(cls)
            label = f'{model.names[c]} {conf:.2f}'
            plot_one_box(xyxy, img0, label=label, color=colors(c, True), line_thickness=3)
更多推荐

网络安全:保护你的系统

🌷🍁博主猫头虎(🐅🐾)带您GotoNewWorld✨🍁🦄博客首页——🐅🐾猫头虎的博客🎐🐳《面试题大全专栏》🦕文章图文并茂🦖生动形象🐅简单易学!欢迎大家来踩踩~🌺🌊《IDEA开发秘籍专栏》🐾学会IDEA常用操作,工作效率翻倍~💐🌊《100天精通Golang(基础入门篇)》🐅学会Gol

新概念英语(第二册)复习——Lesson 1 - Lesson5

前言重新整理下自己走过的英语路,算是一次梳理,也是一次简单的常识,更是为了以后做一次备份不用怀疑,学完我曾经看过,听过,背过的资料,你也可以成为英语高手。文章目录前言Lesson1-Aprivateconversation原文翻译单词Lesson2-Breakfastorlunch?原文译文单词Lesson3-Plea

rust字符串

标准库提供了String结构体表示字符串。String实际上就是Vec<u8>的封装。唯一的不同是String的方法假定Vec<u8>中的二进制都是utf8编码的pubstructString{vec:Vec<u8>,}一、定义String1.使用new方法创建空字符串letstring=String::new();2

前端深入理解JavaScript面向对象编程与Class

🎬岸边的风:个人主页🔥个人专栏:《VUE》《javaScript》⛺️生活的理想,就是为了理想的生活!目录引言1.什么是面向对象编程?2.Class的基本概念3.Class的语法3.1构造函数3.2属性3.3方法3.4方法的访问修饰符4.类的静态方法和属性5.Getter和Setter方法6.类的私有属性和方法7.

深度学习-Python调用ONNX模型

目录ONNX模型使用流程获取ONNX模型方法使用ONNX模型手动编写ONNX模型Python调用ONNX模型常见错误错误raiseValueError...:错误:Loadmodelmodel.onnxfailed错误:'CUDAExecutionProvider'isnotinavailableprovider错误:

GFS 分布式文件系统

1、GlusterFS概述1.1GlusterFS简介GlusterFS是一个开源的分布式文件系统。由存储服务器、客户端以及NFS/Samba存储网关(可选,根据需要选择使用)组成。没有元数据服务器组件,这有助于提升整个系统的性能、可靠性和稳定性。MFS传统的分布式文件系统大多通过元服务器来存储元数据,元数据包含存储节

前端实现websocket的应用场景以及逻辑实现

前端实现websocket的应用场景以及逻辑实现前端在基础业务逻辑外,根据具体的业务需求还可以实现更复杂的交互逻辑,如:数据同步:WebSocket可用于实时更新数据,当服务器端数据发生变化时,通过WebSocket将变化的数据推送给前端,以保持数据的实时同步。聊天功能:使用WebSocket实现实时聊天功能,前端用户

Guava精讲(三)-Caches,同步DB数据到缓存

在开发中,我们经常需要从数据库中读取数据并进行频繁的读取操作。缓存在各种场景中都有运用,例如,当一个值的计算或检索成本很高,而且在某个输入中需要多次使用该值时,就应该考虑使用缓存,因此将数据缓存在内存中可以显著提高应用程序的性能。问题描述假设我们正在开发一个电子商务网站,需要频繁地显示商品信息。商品信息存储在数据库中,

Go-Python-Java-C-LeetCode高分解法-第六周合集

前言本题解Go语言部分基于LeetCode-Go其他部分基于本人实践学习个人题解GitHub连接:LeetCode-Go-Python-Java-CGo-Python-Java-C-LeetCode高分解法-第一周合集Go-Python-Java-C-LeetCode高分解法-第二周合集Go-Python-Java-C

施耐德电气携中国信通院和中国联通共同发布白皮书,共探5G+PLC深度融合应用

2023年9月20日——全球能源管理和自动化领域的数字化转型专家施耐德电气在第23届中国国际工业博览会首日的9月19日,与中国信息通信研究院(以下简称“中国信通院”)及中国联合网络通信集团有限公司(以下简称“中国联通”)联手重磅发布《5G+PLC深度融合解决方案》白皮书,以期通过对研究思路、前沿技术、产业成果及实际应用

VScode的注释和标题,标签,img的src属性(如何网页上插入图片)(Mac如何开启js控制台)(如何免费复制网页中的文字)

一、注释<!--这是注释-->,在这个<!--内容-->里面的是注释,内容就是你要填写的注释。在windows上查看,你是使用F12,但是mac上(我也不清楚为什么f12不好使,这时候就要按照下面的步骤调出这个界面看这个高级,下面的在菜单栏中显示开发选项,然后我们可以勾选上它。这时候点击这里的JAVAScript控制台

热文推荐