使用 YOLO 进行自定义对象检测

如何使用 YOLOv8 做对象检测 在本文中,学习到了创建YOLOv8支持的 Web 应用程序的过程。我们介绍了创建模型、使用预训练模型、准备数据来训练自定义模型等步骤,最后创建了一个具有前端和后端的 Web 应用程序。 阅读详情

我们知道我们可以专门检测一些对象。那么我们如何训练系统检测自定义对象呢?让我们一步一步来。

1. 创建数据集

机器是通过数据集学习的。数据集必须包含图像和标签。例如,让我的目标是创建一个检测坦克的系统。

1b8b86efbf70d1a824d0e9273d241768.jpeg

我准备了从网上下载的坦克图片。然后我们需要使用第三方工具对图像进行标记,例如;LabelImg、MakeSense 等。我们将在此示例中使用 MakeSense,可以在此处访问它:https://www.makesense.ai/

bb7cd790a14a0dac31c7b891a7a869e0.jpeg

上传完所有图片后,点击 Object Detection 选择。你会看到你上传的照片。你需要标记对象的区域。

c20bcec118a6e9c7da9cdf24f332ef86.jpeg

我们标记了对象的区域。(如果图像有很多对象,则必须标记所有对象。)然后查看页面右侧的“标签”。

f1277852e4e8c6f47896013c2c37513f.jpeg

单击加号图标并在那里输入对象的名称。

现在我们的数据集准备好了!让我们下载数据集。

8798837b2d59cd1613a8a8760d13aa75.jpeg

准备的数据集如上图。

2. 使用 Colab 进行训练

我们将使用 Google Colab 进行训练。

abbb4a13cc9a423b55d81d6257b9c4d4.jpeg
什么是 Colab?

Colaboratory,简称“Colab”,是谷歌研究院的一款产品。Colab 允许任何人通过浏览器编写和执行任意 python 代码,特别适合机器学习、数据分析和教育。

GPU 训练比 CPU 训练更快。

按照以下步骤进行训练
  1. 打开 Google Drive,创建一个名为“yolov3”的文件夹

  2. 将你的数据集上传为“images.zip”

  3. 从此处链接下载训练文件“Train_YoloV3.ipynb” :https://github.com/turgay2317/yolov3-training-files

  4. 打开 Colab:https://colab.research.google.com/

  5. 选择“上传”选项卡,并选择下载训练文件“Train_YoloV3.ipynb”

9062bc44374a22431359ef4dc8ea1046.jpeg

上传过程结束后,你会遇到如下页面。

2042245e99eb69294f485ca54ddc2b94.jpeg

该文件应用了这些步骤;检查 Nvidia GPU,安装 Google Drive,克隆和编译 DarkNet,为标签创建 obj.names 文件,从 images.zip 中提取图像,开始训练

训练结束后可以查看Google Drive/yolov3目录下的权重文件。

152bc33cf196cee8ee854366980344ad.jpeg

我们将使用权重文件。下载它。

3. 准备所有检测文件

0610ad4e2ec9351488bca34cc8ec6ae5.jpeg

我们将使用这些文件:

  • yolov3_training_last.weights -> 训练文件

  • coco.names -> 包含特定对象的标签

  • yolo_object_detection.py -> 使用 OpenCV 进行对象检测

  • yolov3_testing.cfg -> 一些配置

你可以从这里下载其他文件:https://github.com/turgay2317/yolov3-training-files

4. 运行自定义对象检测

不要忘记安装 OpenCV 和所需的库。然后运行“yolo_object_detection.py”文件!

import cv2
import numpy as np
import glob
import random

net = cv2.dnn.readNet("yolov3_training_last.weights", "yolov3_testing.cfg")

classes = ["Tank"]

images_path = glob.glob(r"tests/*.jpeg")


layer_names = net.getLayerNames()
output_layers = [layer_names[i - 1] for i in net.getUnconnectedOutLayers()]
colors = np.random.uniform(0, 255, size=(len(classes), 3))

random.shuffle(images_path)


for img_path in images_path:
    # Loading image
    img = cv2.imread(img_path)
    img = cv2.resize(img, None, fx=0.4, fy=0.4)
    height, width, channels = img.shape

    # Detecting objects
    blob = cv2.dnn.blobFromImage(img, 0.00392, (416, 416), (0, 0, 0), True, crop=False)

    net.setInput(blob)
    outs = net.forward(output_layers)

    # Showing informations on the screen
    class_ids = []
    confidences = []
    boxes = []
    for out in outs:
        for detection in out:
            scores = detection[5:]
            class_id = np.argmax(scores)
            confidence = scores[class_id]
            if confidence > 0.3:
                # Object detected
                print(class_id)
                center_x = int(detection[0] * width)
                center_y = int(detection[1] * height)
                w = int(detection[2] * width)
                h = int(detection[3] * height)

                # Rectangle coordinates
                x = int(center_x - w / 2)
                y = int(center_y - h / 2)

                boxes.append([x, y, w, h])
                confidences.append(float(confidence))
                class_ids.append(class_id)

    indexes = cv2.dnn.NMSBoxes(boxes, confidences, 0.5, 0.4)
    print(indexes)
    font = cv2.FONT_HERSHEY_PLAIN
    for i in range(len(boxes)):
        if i in indexes:
            x, y, w, h = boxes[i]
            label = str(classes[class_ids[i]])
            color = colors[class_ids[i]]
            cv2.rectangle(img, (x, y), (x + w, y + h), color, 2)
            cv2.putText(img, label, (x, y + 30), font, 3, color, 2)


    cv2.imshow("Image", img)
    key = cv2.waitKey(0)

cv2.destroyAllWindows()
8afceed7514ff4de015c92aaf8133890.jpeg

检测实例

最后,你可以看到我们的检测成功了。现在我们的系统可以检测到坦克。

5. 视频中的自定义对象检测

import cv2
import numpy as np
import time

# Load Yolo
net = cv2.dnn.readNet("yolov3_training_last.weights", "yolov3_testing.cfg")
classes = []
with open("coco.names", "r") as f:
    classes = [line.strip() for line in f.readlines()]
layer_names = net.getLayerNames()
output_layers = [layer_names[i - 1] for i in net.getUnconnectedOutLayers()]
colors = np.random.uniform(0, 255, size=(len(classes), 3))

# Loading image
cap = cv2.VideoCapture("tests/test.mp4")

font = cv2.FONT_HERSHEY_PLAIN
starting_time = time.time()
frame_id = 0
while True:
    _, frame = cap.read()
    frame_id += 1

    height, width, channels = frame.shape

    # Detecting objects
    blob = cv2.dnn.blobFromImage(frame, 0.00392, (416, 416), (0, 0, 0), True, crop=False)

    net.setInput(blob)
    outs = net.forward(output_layers)

    # Showing informations on the screen
    class_ids = []
    confidences = []
    boxes = []
    for out in outs:
        for detection in out:
            scores = detection[5:]
            class_id = np.argmax(scores)
            confidence = scores[class_id]
            if confidence > 0.1:
                # Object detected
                center_x = int(detection[0] * width)
                center_y = int(detection[1] * height)
                w = int(detection[2] * width)
                h = int(detection[3] * height)

                # Rectangle coordinates
                x = int(center_x - w / 2)
                y = int(center_y - h / 2)

                boxes.append([x, y, w, h])
                confidences.append(float(confidence))
                class_ids.append(class_id)

    indexes = cv2.dnn.NMSBoxes(boxes, confidences, 0.8, 0.3)

    for i in range(len(boxes)):
        if i in indexes:
            x, y, w, h = boxes[i]
            label = str(classes[class_ids[i]])
            confidence = confidences[i]
            color = colors[class_ids[i]]
            cv2.rectangle(frame, (x, y), (x + w, y + h), color, 2)
            cv2.putText(frame, label + " " + str(round(confidence, 2)), (x, y + 30), font, 3, color, 3)



    elapsed_time = time.time() - starting_time
    fps = frame_id / elapsed_time
    cv2.putText(frame, "FPS: " + str(round(fps, 2)), (10, 50), font, 4, (0, 0, 0), 3)
    cv2.imshow("Image", frame)
    key = cv2.waitKey(1)
    if key == 27:
        break

cap.release()
cv2.destroyAllWindows()

6. 相机的自定义对象检测

import cv2
import numpy as np
import time

# Load Yolo
net = cv2.dnn.readNet("yolov3_training_last.weights", "yolov3_testing.cfg")
classes = []
with open("coco.names", "r") as f:
    classes = [line.strip() for line in f.readlines()]
layer_names = net.getLayerNames()
output_layers = [layer_names[i - 1] for i in net.getUnconnectedOutLayers()]
colors = np.random.uniform(0, 255, size=(len(classes), 3))

# Loading image
cap = cv2.VideoCapture(0)

font = cv2.FONT_HERSHEY_PLAIN
starting_time = time.time()
frame_id = 0
while True:
    _, frame = cap.read()
    frame_id += 1

    height, width, channels = frame.shape

    # Detecting objects
    blob = cv2.dnn.blobFromImage(frame, 0.00392, (416, 416), (0, 0, 0), True, crop=False)

    net.setInput(blob)
    outs = net.forward(output_layers)

    # Showing informations on the screen
    class_ids = []
    confidences = []
    boxes = []
    for out in outs:
        for detection in out:
            scores = detection[5:]
            class_id = np.argmax(scores)
            confidence = scores[class_id]
            if confidence > 0.1:
                # Object detected
                center_x = int(detection[0] * width)
                center_y = int(detection[1] * height)
                w = int(detection[2] * width)
                h = int(detection[3] * height)

                # Rectangle coordinates
                x = int(center_x - w / 2)
                y = int(center_y - h / 2)

                boxes.append([x, y, w, h])
                confidences.append(float(confidence))
                class_ids.append(class_id)

    indexes = cv2.dnn.NMSBoxes(boxes, confidences, 0.8, 0.3)

    for i in range(len(boxes)):
        if i in indexes:
            x, y, w, h = boxes[i]
            label = str(classes[class_ids[i]])
            confidence = confidences[i]
            color = colors[class_ids[i]]
            cv2.rectangle(frame, (x, y), (x + w, y + h), color, 2)
            cv2.putText(frame, label + " " + str(round(confidence, 2)), (x, y + 30), font, 3, color, 3)



    elapsed_time = time.time() - starting_time
    fps = frame_id / elapsed_time
    cv2.putText(frame, "FPS: " + str(round(fps, 2)), (10, 50), font, 4, (0, 0, 0), 3)
    cv2.imshow("Image", frame)
    key = cv2.waitKey(1)
    if key == 27:
        break

cap.release()
cv2.destroyAllWindows()

因此,你现在可以检测自定义对象!

☆ END ☆

如果看到这里,说明你喜欢这篇文章,请转发、点赞。微信搜索「uncle_pn」,欢迎添加小编微信「 woshicver」,每日朋友圈更新一篇高质量博文。

扫描二维码添加小编↓

3db66d0e83403b7eabd68ea1b7228e4a.jpeg

Yolov5自定义图片训练测试及模型调优(详细过程) Yolov5自定义数据训练及测试1. 图像数据获取、标注2. 数据集划分及准备3. 配置训练参数,准备训练:3.1 修改data/训练配置xxx.yaml文件:3.2 修改models模型配置xxx.yaml文件4. 开始训练5. 测试训练后的模型: 1. 图像数据获取、标注 如果自定义训练自己的数据集,首先需要数据标注,至于数据来源可以是下载现有的开发数据集、拍照、爬虫等等。 如果是拍照、爬虫等获取的数据图片,需要进行数据标注,这个过程可以使用工具来做,但也需要一些手动操作 。。并且图片越多越好,如果 阅读详情

相关推荐

使用YOLOv和Streamlit构建实时对象检测和跟踪应用程序 - 介绍和设置

YOLOv (You Only Look Once) 是一种流行的深度学习算法,用于实时对象检测和跟踪。它可以在图像或视频中准确地检测多个对象,并为每个对象提供边界框和类别标签。Streamlit 是一种用于构建数据应用程序的开源库,可以轻松创建具有交互性界面的实时应用程序。本文将介绍如何使用YOLOv和Streamlit构建一个实时对象检测和跟踪应用程序。

ZksProlog的博客 386

yolov5/yolov3训练自己的数据集(超详细,细的有点烦)

YOLO系列是非常优秀的物体检测框架,目前总共有V1-V5五个版本。本博客的目的在于教大家如何使用YOLOv5训练自己的数据,重点在于应用。有关原理我会在后面的博客中详细介绍。使用YOLOv5训练自己的数据往往要经过以下几个步骤: 一、环境配置 在环境配置方面,我安装的是tensorflow-gpu2.3.0、cuda10.1、cudnn7.6.4、torch1.9.0、anaconda我选择的是python3.8版本。有关详细的安装过程大家可以参考我的另一篇博客《Tensorflow-gpu2.1

qq_43078154的博客 1万+

使用自定义训练的 YOLO 对象检测模型校正生成的图像。 如何自动消除图像中的旋转偏移

由于我并不是一个铁杆集邮爱好者,所以我在将邮票放入塑料套时有些马虎。有些邮票略微旋转,导致出现如下图所示的图像。 我可以简单地手动对齐邮票,拍摄每页的新照片并重新运行对象检测,但用它创建另一个计算机视觉项目不是更有趣吗? 是的!要自动校正旋转偏移,需要执行以下步骤:检测边缘 检测直线 计算检测到的线的角度 应用修正 我将简要解释每个步骤,但您可以随意使用提供的参考资料深入了解这些概念。《10 个 DeepSeek AI 提示助您学习任何语言》权重1,提示词《24GB GPU 中的 DeepSeek R1:U

iCloudEnd的博客 187

如何使用云端GPU训练yolov5(colab)

如何在云端GPU训练yolov5,并解决一些训练时遇到的问题

yuride的博客 3486

如何使用 Yolo v5 对象检测算法进行自定义对象检测

介绍在本文中,将向你解释如何使用 Yolo v5 算法检测和分类60+个不同类型的道路交通标志。我们将从非常基础的开始,涵盖每个步骤,如准备数据集、训练和测试等。在本文中,我们将使用 Wi...

深度学习与计算机视觉 2374

使用自定义数据集在PyTorch中训练Yolo进行对象检测

在上一个故事中,我展示了如何使用预训练的Yolo网络进行物体检测和跟踪。 现在,我想向您展示如何使用由您自己的图像组成的自定义数据集重新训练Yolo。 挑战涉及检测隧道网络中的9个不同对象-它们是非常具体的对象,而不是标准Yolo模型中包含的常规对象。 在此示例中,我假设只有3个对象类。 有几种方法可以执行此操作,并且可以根据官方规范在训练脚本中定义图像,配置,批注和其他数据文件的位置,但这是一种更简单且井井有条的方法 Yolo的最佳做法。 Folder Structure 首先,您需要使用以下文件夹结构将

weixin_41697507的博客 840

YOLO ROS 自定义对象检测:训练并使用你自己的检测模型

YOLO ROS 是一个基于 ROS (Robot Operating System) 的实时对象检测框架,它将 YOLO (You Only Look Once) 算法与 ROS 完美结合,为机器人应用提供快速、准确的物体识别能力。本指南将带你完成从环境搭建到训练自定义模型的全过程,让你的机器人能够识别特定场景中的物体。 ## 准备工作:环境搭建与项目获取 ### 安装必要依赖 在开始之前

gitblog_00394的博客 377

使用 OpenCV 进行 YOLO 对象检测

接下来,一个小的全连接网络在特征层上滑动,以预测与类别无关的框建议,相对于在空间、比例和纵横比上平铺的锚网格。bh 的值是边界框的高度与相应网格单元格的高度之比,bw 是边界框的宽度与网格单元格的宽度之比。在物体检测方面,它并不是最准确的算法,但可以肯定的是,它以其令人印象深刻的速度弥补了这一点,因此在速度和准确性之间取得了很好的平衡。必须注意的是,两次检测模型实现了更好的性能,但单次检测处于性能和速度/资源的最佳位置,这使得它更适合于检测实时提要中的对象或对象跟踪等预测速度较快的任务更为重要。

Meta.Qing的博客 3471

yolo v3制作自己的数据_必看!一文掌握最先进的实时对象检测系统YOLO

全文共3866字,预计学习时长20分钟或更长本文将详细分析如何使用YOLO(You Only Look Once)进行对象检测。要想完全理解这一技术,首先应该知道对象分类、检测和分割之间的区别。对象分类是什么?图片来源: https://goo.gl/BPtB4f它是系统试图预测图像内容属性的过程,就相当于一个预测图像标签的分类器。简单来说,如果有一个预测猫和狗的分类系统,该系统(或者说是分类器)...

weixin_39765840的博客 211

YOLO 对象检测 OpenCV 源代码

请直接查看原文章 YOLO 对象检测 OpenCV 源代码 https://hotdog29.com/?p=621 在 2019年7月8日 上张贴 由 hotdog发表回复 YOLO YOLO 在本教程中,您将学习如何使用yolo 对象检测使用深度学习,OpenCV 和Python 检测图像和视频流中的对象。 通过应用目标检测,你不仅能够确定什么是图像中,也其中一个给定对象所在! 我们首先简要...

热分享-hotdog29 727

Python中的自定义对象检测

在本课程中我们专门使用YOLO(你只看一次)和强大而流行的统一物体检测模型。不仅如此,我们还将在云平台中部署我们的模型。之后,我们准备继续通过下载和安装Python包来准备我们的计算机进行Python编码,并将检查和查看是否一切安装良好。c.从XML文件中解析数据并提取信息,如文件名、大小、边界框信息(xmin,xmax,ymin,ymax)b.用于对象检测的标签图像:这里我们将使用LabelImg工具,它是一个开源工具,用于标记标签。此外,完成本课程后,您将获得课程完成证书,这将为您的投资组合增值。

301

【图像处理】对象检测YOLO最新

物体检测是计算机视觉中最重要的任务之一,使机器能够识别和定位图像和视频中的物体。此任务的一个流行架构是你只看一次(YOLO)[2]。它于 2015 年提出,从那时起有多个版本,提高了物体检测的速度和准确性。在本教程中,我们将查看它的三个第一个版本。

gongdiwudu的专栏 3199

Darknet YOLO 项目使用教程

Darknet YOLO 项目使用教程 【免费下载链接】darknet YOLOv4 / Scaled-YOLOv4 / YOLO - Neural Networks for Object Detection (Windows and Linux version of Darknet ) ...

gitblog_00723的博客 471

关于开源项目ZED-YOLO的常见问题解决方案

关于开源项目ZED-YOLO的常见问题解决方案 1. 项目基础介绍及主要编程语言 项目介绍: ZED-YOLO 是一个开源项目,它结合了 ZED 相机和 YOLO(You Only Look Once)目标检测算法,用于实现3D对象检测。项目提供了C++和Python两种语言的示例,可以帮助开发者在ZED相机捕获的图像上进行实时物体检测,并获取物体的3D信息。 主要编程语言: Python C+...

gitblog_00428的博客 964

YOLO模型验证

yolo11关于模型验证详解

m0_67309719的博客 2320

yolo训练过程知识资源(持续更新

在树莓派4使用YOLO v3 Tiny进行实时对象检测 基于Darknet中的YOLO-v3训练自己的数据 Yolov3代码分析与训练自己数据集 yolov3 tiny训练自己的数据集进行物体检测 (只检测行人)

cxxxxxxxxxxxxx的博客 578
上一篇: 使用 YOLO 进行目标检测:如何提取人物图像
下一篇: 探索 KITTI 数据集:自动驾驶汽车的视觉里程计
woshicver
博客等级 码龄6年 1838粉丝 · 624原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值