Yolo v11目标检测实战1:对象分割和人流跟踪(附源码)

news2024/10/3 15:09:25

一、运行效果演示

多目标跟踪

二、基本理论和核心概念

2.1 对象分割

对象分割是指将图像中的每个像素标记为属于某一特定对象或背景的过程。对于YOLO来说,对象分割是其功能的一个扩展,通过添加额外的分支来预测每个检测框内的像素级掩码,从而实现对检测到的对象进行精确分割。这种能力使得YOLO能够提供比单纯边界框更精细的结果,有助于更好地理解场景,并支持需要精确轮廓的应用,如医学影像分析、自动驾驶等。

在YOLO11中,对象分割通常依赖于一些先进的技术,例如注意力机制来聚焦于重要的区域,以及轻量化的网络设计以保持高性能的同时减少计算开销。这使得YOLO能够在保持高效率的同时,也具备了强大的对象分割能力。

2.1 多目标跟踪

多目标跟踪
多目标跟踪是在视频序列中持续地识别并跟随多个移动物体的技术。它结合了目标检测与运动估计的方法,在连续帧之间维持同一对象的身份信息。YOLO通过集成像DeepSORT这样的跟踪算法,可以在检测的基础上进一步实现实时的多目标跟踪。该过程一般包括以下几个步骤:

初始化:利用YOLO模型检测当前帧中的所有感兴趣目标。
特征提取:从检测到的目标中提取特征向量,这些特征可以是外观信息(如颜色直方图)或是深层神经网络学到的表示。
数据关联:基于前一帧的状态预测当前帧中目标的位置,并使用某种距离度量方法(比如马氏距离)将新检测到的目标与已有轨迹相关联。
更新轨迹:一旦建立了正确的匹配关系,则根据新的观测结果更新相应轨迹的状态信息;对于未能成功匹配的新检测结果,则可能意味着出现了新的目标,需创建新的轨迹。

三、环境部署

3.1 安装环境要求

在开始之前,请确保你的系统满足以下基本要求:

操作系统:Windows 10/11
Python 版本:Python 3.10
PyTorch: PyTorch 2.4 
CUDA 和 cuDNN(可选但推荐):11.8
其他依赖库:OpenCV, NumPy, Pillow 等

显卡:RTX3090


3.20安装步骤

以下是详细的安装步骤,假设你已经安装了 Python 和 pip。

1. 创建虚拟环境(推荐但非必须):
为了保持项目的独立性,建议使用 virtualenv 或 venv 创建一个 Python 虚拟环境。

python3 -m venv yolov11_env
source yolov11_env/bin/activate  # 在 Windows 上使用 `yolov11_env\Scripts\activate`

2. 安装 PyTorch:
根据你的系统配置选择合适的 PyTorch 版本。你可以从 PyTorch 官方网站 获取最新的安装命令。 如果你有 CUDA 支持,可以使用如下命令安装 PyTorch 和 torchvision:

pip install torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu113

如果没有 CUDA 支持,可以使用 CPU 版本:

pip install torch torchvision torchaudio


3. 克隆 YOLO11 仓库:
假设 YOLO11 已经开源并且托管在 GitHub 上,你可以通过以下命令克隆仓库到本地。

git clone ultralytics/ultralytics: Ultralytics YOLO11 🚀 (github.com)
cd yolov11


4.安装依赖库:
通常,项目会提供一个 requirements.txt 文件来列出所有必需的依赖库。你可以使用以下命令来安装这些依赖库。

pip install -r requirements.txt

四、核心部分源码:

from collections import defaultdict

import cv2

from ultralytics import YOLO
from ultralytics.utils.plotting import Annotator, colors

# Dictionary to store tracking history with default empty lists
track_history = defaultdict(lambda: [])

# Load the YOLO model with segmentation capabilities
model = YOLO("../checkpoints/yolo11n-seg.pt")

# Open the video file
cap = cv2.VideoCapture("../inputs/007.mp4")

# Retrieve video properties: width, height, and frames per second
w, h, fps = (int(cap.get(x)) for x in (cv2.CAP_PROP_FRAME_WIDTH, cv2.CAP_PROP_FRAME_HEIGHT, cv2.CAP_PROP_FPS))

# Initialize video writer to save the output video with the specified properties
out = cv2.VideoWriter("../outputs/seg-tracking.avi", cv2.VideoWriter_fourcc(*"MJPG"), fps, (w, h))

while True:
    # Read a frame from the video
    ret, im0 = cap.read()
    if not ret:
        print("Video frame is empty or video processing has been successfully completed.")
        break

    # Create an annotator object to draw on the frame
    annotator = Annotator(im0, line_width=2)

    # Perform object tracking on the current frame
    results = model.track(im0, persist=True)

    # Filter out only people (class_id 0) and cars (class_id 2)
    valid_ids = [0, 2]  # Person and Car
    filtered_masks = []
    filtered_track_ids = []
    person_count = 0
    car_count = 0

    if results[0].boxes.id is not None and results[0].masks is not None:
        masks = results[0].masks.xy
        track_ids = results[0].boxes.id.int().cpu().tolist()
        class_ids = results[0].boxes.cls.int().cpu().tolist()

        # Filter by class ID and count objects
        for mask, track_id, class_id in zip(masks, track_ids, class_ids):
            if class_id == 0:  # Person
                person_count += 1
                filtered_masks.append(mask)
                filtered_track_ids.append(track_id)
            elif class_id == 2:  # Car
                car_count += 1
                filtered_masks.append(mask)
                filtered_track_ids.append(track_id)

        # Annotate each mask with its corresponding tracking ID and color
        for mask, track_id in zip(filtered_masks, filtered_track_ids):
            annotator.seg_bbox(mask=mask, mask_color=colors(track_id, True), label=str(track_id))

    # Draw the counts of people and cars on the top right corner
    text = f"Person: {person_count} | Car: {car_count}"
    font = cv2.FONT_HERSHEY_SIMPLEX
    org = (w - 400, 50)  # Position at the top right corner
    font_scale = 1
    color = (255, 255, 255)  # White color
    thickness = 2
    cv2.putText(im0, text, org, font, font_scale, color, thickness, cv2.LINE_AA)

    # Write the annotated frame to the output video
    out.write(im0)
    # Display the annotated frame
    cv2.imshow("seg-tracking", im0)

    # Exit the loop if 'q' is pressed
    if cv2.waitKey(1) & 0xFF == ord("q"):
        break

# Release resources
cap.release()
out.release()
cv2.destroyAllWindows()

五、总结

通过上述步骤,你应该能够成功地安装 YOLO11 并设置好开发环境。一旦安装完成,你就可以开始探索 YOLO11 的强大功能,包括目标检测、对象分割和多目标跟踪。如果有任何疑问或遇到问题,查阅官方文档或社区支持通常是很好的起点。祝你在使用 YOLO11 的过程中取得成功!

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

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

相关文章

Python画笔案例-073 绘制晃悠悠的海龟

1、绘制晃悠悠的海龟 通过 python 的turtle 库绘制 晃悠悠的海龟,如下图: 2、实现代码 绘制晃悠悠的海龟,以下为实现代码: """晃悠悠的海龟.py """ import time # 导入时间模块 import math # 导…

TypeScript 算法手册 【计数排序】

文章目录 1. 计数排序简介1.1 计数排序定义1.2 计数排序特点 2. 计数排序步骤过程拆解2.1 找出数组中的最大值2.2 创建计数数组2.3 统计每个数字出现的次数2.4 重建排序后的数组 3. 计数排序的优化3.1 处理负数3.2 对象数组排序案例代码和动态图 4. 计数排序的优点5. 计数排序的…

[VULFOCUS刷题]tomcat-pass-getshell 弱口令

tomcat-pass-getshell 弱口令 启动容器,打开网站 点开manageapp,输入弱口令 tomcat/tomcat 之后在下面上传jsp大马,首先生成一个jsp马 这里我直接使用github别人生成好的 tennc/webshell: This is a webshell open source project (github.…

Image-Text Co-Decomposition for Text-Supervised Semantic Segmentation

highlighted region-word pair contrastive loss (L h c l _{hcl} hcl​) 辅助信息 mmcv环境不好满足,不建议复现

理解无监督学习、无监督图像分割

系列文章目录 文章目录 系列文章目录一、无监督学习如何学习 能不能举一个非常具体的例子,带着运算过程的例子总结 二、在图像分割中呢,具体怎样实现无监督示例:使用自编码器和k-means进行无监督图像分割1. **数据准备**2. **构建自编码器**3…

小练--盲打学成在线

免责声明:本文仅做分享! 学成在线 (olin-yi.github.io) 目录 目录构造 基础公共样式 base.css index.html 版心居中 网页制作思路 CSS 实现思路 头部整体布局 logo 导航制作技巧(nav) 搜索区域(search&am…

Leetcode 2300. 咒语和药水的成功对数

1.题目基本信息 1.1.题目描述 给你两个正整数数组 spells 和 potions ,长度分别为 n 和 m ,其中 spells[i] 表示第 i 个咒语的能量强度,potions[j] 表示第 j 瓶药水的能量强度。 同时给你一个整数 success 。一个咒语和药水的能量强度 相乘…

进程的环境

进程环境 main 函数 当内核执行 C 程序时,在调用 main 函数之前先调用一个特殊的启动例程。可执行文件会将此启动例程指定为程序的起始地址 —— 这是由连接编辑器设置,而连接编辑器是由 C 编译器调用。启动例程从内核取得命令行参数和环境变量值&…

Nodejs多版本切换工具NVM

1 nvm介绍 NVM(Node Version Manager)是一个用于管理多个Node.js版本的工具,它允许用户在同一台计算机上安装和切换不同版本的Node.js。这对于开发者来说非常有用,因为不同的项目可能需要不同版本的Node.js环境。 NVM功能特性&a…

【Spring】Spring Boot项目创建和目录介绍

1 Spring Boot 介绍 Spring 让 Java 程序更加快速、简单和安全,Spring 对于速度、简单性和生产力的关注使其成为世界上最流行的 Java 框架 Spring 官方提供了很多开源的项目,覆盖范围从 Web 开发到大数据,Spring 发展到了今天,已…

使用Mac高频重复输入时别再傻傻的复制粘贴了,让快捷短语解放你的双手

你在使用Mac的时候,常用的句子、词语、代码都还在自己手动输入吗,当你需要高频的输入同样的内容,手动输入效率太低了,我发现一款实用的工具帮你解决这个问题,快捷短语-高频输入神器,更支持iCloud云备份。 快…

记录一个chatgpt接口站的明文密码泄露漏洞

前言 前段时间看到的一个chatgpt接口网站,注册过后,习惯性的F12看下请求包和响应包,于是就有了这篇文章。 漏洞 查看登录的一系列流量,除了前端界面相关的,一共有三个请求,分别是login,getle…

msvcr110.dll丢失怎么弄,详细介绍4种可靠解决方法

1. msvcr110.dll 简介 1.1 定义及作用 msvcr110.dll 是 Microsoft Visual C 2012 Redistributable Package 的一部分,它是一个动态链接库(Dynamic Link Library)文件,对于运行使用 Visual C 2012 编译的应用程序至关重要。这个库…

如何在 DAX 中计算多个周期的移动平均线

在 DAX 中计算移动聚合很容易。但是,计算一段时间内的移动平均值时会有一些陷阱。由于其中一些陷阱是定义问题,因此我们必须小心,不要选择错误的方法。让我们看看细节。欢迎来到雲闪世界。 添加图片注释,不超过 140 字&#xff08…

算法笔记(五)——分治

文章目录 算法笔记(五)——分治快排颜色分类排序数组数组中的第K个最大元素库存管理 III 归并排序数组交易逆序对的总数计算右侧小于当前元素的个数翻转对 算法笔记(五)——分治 分治算法字面上的解释是“分而治之”,就…

mindsearch run 本地服务

bing_browser.py ~/.conda/envs/mindsearch/lib/python3.10/site-packages/lagent/actions# vim bing_browser.py 修改提示词文件 MindSearch/mindsearch/agent/mindsearch_prompt.py # flake8: noqasearcher_system_prompt_cn """## 人物简介 你是一个可以…

易贝恩副总经理朱洪泽受邀为第四届中国项目经理大会演讲嘉宾

全国项目经理专业人士年度盛会 北京易贝恩项目管理科技有限公司副总经理朱洪泽女士受邀为PMO评论主办的全国项目经理专业人士年度盛会——2024第四届中国项目经理大会演讲嘉宾,演讲议题为“从手动到智能:项目管理系统助力项目经理提升执行效率”。大会将…

python中的copy方法

记录一下python中的浅拷贝copy和深拷贝deepcopy 例题如下: import copyls [1, 2, [3, 4], 5, 6]ls1 ls.copy()ls2 lsls3 copy.deepcopy(ls)ls[2][1] 0ls.pop(1)ls.append([7, 8])print(ls1) #--------慙1慖print(ls2) #--------慙2慖print(ls3) #------…

windows10或11家庭版实现远程桌面连接控制

远程协助是一种Windows工具,允许控制者使用鼠标和键盘远程控制接受者的计算机,从某种程度上讲,这也是Win10家庭版无法远程桌面的一个有效替代方案。 步骤1. 在使用Windows远程协助之前,您需要先更改某些设置,右键单击…

yolov11模型在bdd100k数据集上的应用【代码+数据集+python环境+训练/应用GUI系统】

yolov8/9/10/11模型在bdd100k数据集上的应用【代码数据集python环境训练/应用GUI系统】 yolov8/9/10/11模型在bdd100k数据集上的应用【代码数据集python环境训练/应用GUI系统】 yolov8/9/10/11模型在bdd100k数据集上的应用【代码数据集python环境训练/应用GUI系统】 bdd100k数据…