2025年4月 问题汇总
- 什么是大模型?
背景:引入了Transformer架构的神经网络模型,通过大量文本数据训练这些模型,使它们能够通过阅读大量文本来深入理解语言规则和模式,就像让计算机阅读整个互联网一样。
大语言模型,Large Language Model ,即LLM ,指包含数百亿(或更多)参数的语言模型。
典型的大语言模型的应用:ChatGPT
LLM在诸多领域有所应用,例如
- 在自然语言处理领域,它可以帮助计算机更好地理解和生成文本,包括写文章、回答问题、翻译语言等。
- 在信息检索领域,它可以改进搜索引擎,让我们更轻松地找到所需的信息。
- 在计算机视觉领域,研究人员还在努力让计算机理解图像和文字,以改善多媒体交互
LLM最显著的特征:涌现能力
上下文学习【 content text】:上下文学习能力是由 GPT-3 首次引入的。这种能力允许语言模型在提供自然语言指令或多个任务示例的情况下,通过理解上下文并生成相应输出的方式来执行任务,而无需额外的训练或参数更新。
指令遵循:通过使用自然语言描述的多任务数据进行微调,也就是所谓的指令微调,LLM 被证明在同样使用指令形式化描述的未见过的任务上表现良好。这意味着LLM能够根据任务指令执行任务,而无需事先见过具体示例,这展示了其强大的泛化能力。
逐步推理:小型语言模型通常难以解决涉及多个推理步骤的复杂任务,例如数学问题。然而,LLM通过采用 "思维链" 推理策略,可以利用包含中间推理步骤的提示机制来解决这些任务,从而得出最终答案。据推测,这种能力可能是通过对代码的训练获得的。
多模态支持: 一些LLM已经扩展到支持多模态数据,包括文本、图像和语音。这意味着它们可以理解和生成不同媒体类型的内容,实现更多样化的应用。
多领域应用: LLM已经被广泛应用于文本生成、自动翻译、信息检索、摘要生成、聊天机器人、虚拟助手等多个领域,对人们的日常生活和工作产生了深远的影响。
预训练和微调: LLM采用了预训练和微调的学习方法。它们首先在大规模文本数据上进行预训练(无标签数据),学会了通用的语言表示和知识,然后通过微调(有标签数据)适应特定任务,从而在各种NLP任务中表现出色。
什么是多模态大模型?
AI边缘如何落地?落地为什么困难?
大模型应用开发流程是什么?
Transformer架构?
名词解释
数据来源:作者:信鑫 链接:https://juejin.cn/post/7485691461296652338 来源:稀土掘金
名词 | 解释 |
---|---|
AI Agent | 通俗理解:AI智能体、像人类一样思考决策。在 LLM 语境下,AI Agent 是某种能自主理解意图、规划决策、执行复杂任务的智能体。Agent 并非 ChatGPT 升级版,它不仅告诉你“如何做”,更会帮你去做。如果 Copilot 是副驾驶,那么 Agent 就是主驾驶。类似人类“做事情”的过程,Agent 的核心功能,可以归纳为三个步骤的循环:感知(Perception)、规划(Planning)和行动(Action)。 |
Copilot | Copilot 是指一种基于人工智能的辅助工具,通常与特定的软件或应用程序集成,旨在帮助用户提高工作效率。Copilot 系统通过分析用户的行为、输入、数据和历史记录,提供实时建议、自动化任务或增强功能,帮助用户做出决策或简化操作 |
MCP | Model Context Protocol(模型上下文协议)是一个开放协议,它规范了应用程序,如何为 LLMs 提供上下文。可以将 MCP 想象为 AI 应用的 USB-C 端口。就像 USB-C 提供了一种标准方式,让你的设备连接到各种外设和配件,MCP 也提供了一种标准方式,让你的 AI 模型连接到不同的数据源和工具。 |
LLM | 大语言模型,Large Language Model ,即LLM ,指包含数百亿(或更多)参数的语言模型。 |
Prompt | 大模型LLM的输入: Prompt 类似于一种任务,最初是NLP的输入模板 |
Completion | 大模型LLM的输出:Completion |
人工智能AI | |
机器学习ML | |
深度学习DL | 深度学习是机器学习的一个子领域,深度学习算法必须超过三层神经网络算法。 |
神经网络CNN | CNN通过卷积和池化操作有效地处理高维图像数据,降低计算复杂度,并提取关键特征进行识别和分类。卷积神经网络构成了深度学习算法的支柱 ,神经网络由四个主要部分组成:输入、权重、偏差或阈值、输出。 |
循环神经网络RNN | RNN即:Recurrent Neural Network |
Transformer架构 |
AI∈ML∈DL∈CNN 属于包含的关系。
概念解释
概念 | 解释 |
---|---|
级联效应 | 单个更改可能会对网络中的其他神经元产生影响 |
反向传播(Backpropagation) | 从输出到输入以相反的方向移动,允许我们计算和归因与每个神经元相关的误差,并适当地调整和拟合算法. |
卷积操作(Convolution) | |
池化操作 | |
激活函数 |
神经网络结构——CNN、RNN、LSTM、Transformer :参考资料https://cloud.tencent.com/developer/article/2398345
AI 应用落地困难?
主要方面:
- 数据
数据需要经过清洗、标注等操作之后才能喂给大模型,60%的工作都在这里。
- 应用
模型和企业的业务融合比较困难。数据流和业务场景需要拆分融合。
- 算力
算力成本高
开发流程:
数据工程->模型训练->算力调度->硬件适配->应用开发
问题以及解决方案:
- 数据如何高效、准确的处理呢? 自动化、切片
- 模型和应用怎么开发? 低代码平台,提高开发效率、降低开发成本和难度
- 算力? 资源池、智能调度引擎
边缘设备部署AI模型应用
RKNN-Toolkit-Lite2 为 Rockchip NPU 平台提供 Python 编程接口,帮助用户部署 RKNN 模型,加速 AI 应用的落地。
通过以上相关名词了解,我已经对基于大模型应用的开发有了基本的了解。不妨通过在实践中不断深入了解相关机制。
尝试1——本地调用豆包多模态大模型,实现对视频内容解释。
1、如何调用大模型的API?
采用 open AI 的SDK
from openai import OpenAI
client = OpenAI(
api_key ="yous api key", #切换为自己申请的api key
base_url = "https://ark.cn-beijing.volces.com/api/v3", //
)
completion = client.chat.completions.create(
model = "deepseek-r1-250120", # 换成你的大模型id
messages = [
{"role": "system", "content": "你是人工智能助手"},
{"role": "user", "content": "常见的十字花科植物有哪些?"},
],
)
调用该 API 会返回一个 ChatCompletion 对象,其中包括了回答文本、创建时间、ID等属性。我们一般需要的是回答文本,也就是回答对象中的 content 信息。
大概类似于下面这种形式
{
"choices": [
{
"finish_reason": "stop",
"index": 0,
"message": {
"content": "回答内容... ...",
"role": "assistant"
}
}
],
"created": 1695112507,
"id": "chatcmpl-80QUFny7lXqOcfu5CZMRYhgXqUCv0",
"model": "gpt-3.5-turbo-0613",
"object": "chat.completion",
"usage": {
"completion_tokens": 9,
"prompt_tokens": 19,
"total_tokens": 28
}
}
我们可以打印一下【回答的内容】,可以根据回答内容,即结果 做出一些分析。
print(completion.choices[0].message.content)
2、利用豆包的多模态大模型,对视频进行分析
豆包官网相关文档:https://www.volcengine.com/docs/82379/1362931
通过问deepseek,如何利用大模型对视频内容进行分析?
了解到,大模型目前无法直接对视频进行分析,要对视频进行抽帧提取生成图片,然后对图片进行分析,最终理解视频的内容。
代码流程:
- 视频文件读取:从本地路径读取视频文件。
- 对视频进行抽帧,可以支持 2 种策略:
CONSTANT_INTERVAL
:固定时间间隔抽帧,如 1s 一帧,时间间隔可以调整。EVEN_INTERVAL
:固定总帧数均匀抽帧,如不管视频时长,总共抽 20 帧,抽取的总帧数可以调整。
- 压缩帧图像:为了降低网络传输时延,以及减少 token 用量,将图像等比例压缩至 640*480 以内。
- 请求视觉理解模型(请求大模型分析图片):组装请求体,包含提示词(Prompt)及所有帧图像的 Base64。(Prompt工程)。并使用方舟
ChatCompletion
接口调用模型服务。
那么问题就来了:
如何对视频进行抽帧呢?
答:使用Open CV
压缩图片怎么做到的?
调整图片大小,
答:
def resize(image):
"""
调整图片大小以适应指定的尺寸。
参数:
image (numpy.ndarray): 输入的图片,格式为numpy数组。
返回:
numpy.ndarray: 调整大小后的图片。
"""
# 获取图片的原始高度和宽度
height, width = image.shape[:2]
# 根据图片的宽高比确定目标尺寸
if height < width:
target_height, target_width = 480, 640
else:
target_height, target_width = 640, 480
# 如果图片尺寸已经小于或等于目标尺寸,则直接返回原图片
if height <= target_height and width <= target_width:
return image
# 计算新的高度和宽度,保持图片的宽高比
if height / target_height < width / target_width:
new_width = target_width
new_height = int(height * (new_width / width))
else:
new_height = target_height
new_width = int(width * (new_height / height))
# 调整图片大小
return cv2.resize(image, (new_width, new_height))
提示词工程?Prompt如何设计?
答:这个还是看经验吧,有不少优化Prompt的AI工具可以借鉴学习。
问题:FunctionCall 和MCP
FunctionCall 允许模型在对话过程中调用外部 API 或执行特定功能,使其不仅仅是被动的文本生成器,而能主动执行任务。并不是真的写程序去定义一个函数,而仅仅是用文字来描述一个函数
简单来说就是MCP适合复杂场景、Function Calling适合简单场景。而且MCP具有上下文。s
前情提要
Open CV 是干什么的?
Open CV ,即Open Computer Vision Library,开源的跨平台的计算机视觉和机器学习软件库。提供了例如Python等语言的接口,实现了图像处理和计算机视觉方面的很多通用算法。
Open CV官网:https://opencv.org/
Open CV中文手册:apachecn.github.io/opencv-doc-zh/
Open CV的GUI功能
图像方面的简单使用:
#读取一张图片 cv.imread()
#第一个参数:图像路径
#第二个参数:是一个 flag,指定了应该读取图像的方式。也可以简单的传递-1,0,1。例如 0就是以灰度方式读取图像
img = cv.imread('xxx.jpg', 0)
#显示图像 cv.imshow()
cv.imshow('image', img)
#保存图像 cv.imwrite()
cv.imwrite('xxx.png',img)
#等待键盘响应,指定参数毫秒内,键盘响应则程序继续。0秒则一直等待键盘响应。
cv.waitKey(0)
#简单的销毁所创建的所有窗口
cv.destroyAllWindows()
视频方面的简单使用:。。。
Python3 基础
numpy 跟图像有什么关系?
numpy是干什么的?
numpy是一个开源的Python科学计算库,它提供了高性能的多维数组对象和用于处理数组的工具。numpy是Numerical Python的简称,它是Python科学计算的基础库之一。
numpy的核心功能是numpy(N-dimensional array),即多维数组对象。ndarray可以存储相同类型的元素,并提供了对数组中元素进行高效操作的函数。numpy还提供了许多数学函数和线性代数运算、傅里叶变换、随机数生成等功能。
兼容深度学习框架(如TensorFlow和PyTorch)和图像处理库(如PIL和OpenCV),通常支持numpy 数组作为输入。将图像img转换为numpy 数组,使得它们能够直接与这些库进行交互。
open CV中图像的表示,img类型是numpy,是个3维矩阵,(B,G,R)
pandas 是什么?
Pandas是一个基于numpy的开源库,专为结构化数据(如表格、时间序列)设计,主要功能包括:
数据清洗:处理缺失值、重复值、异常值等。 数据操作:支持类似SQL的查询、合并、排序、切片等操作。 数据分析:提供统计计算(均值、方差等)、分组聚合、时间序列分析等功能。 数据导入/导出:支持CSV、Excel、SQL、JSON等多种格式。
pytorch 是干什么的?
PyTorch是一个用于机器学习和深度学习的开源深度学习框架,基于Torch的深度学习框架,提供灵活的张量计算和自动求导功能。
nvidia的解释:https://www.nvidia.cn/glossary/pytorch/
知乎上简单的介绍:https://zhuanlan.zhihu.com/p/24116037112
中文官网翻译:https://pytorch.ac.cn/
CUDA是干什么的??
N卡的计算平台,加快矩阵等的运算,提供响应的API接口,与pytorch等深度学习框架、机器学习框架融合。
CUDA(Compute Unified Device Architecture)是 NVIDIA 提供的**并行计算平台和编程模型,**允许开发者使用 GPU 进行通用计算(即不仅仅用于图形渲染)。
CUDNN是干什么的???
和CUDA类似,都是N卡提供的不同工具库,
CUDNN(CUDA Deep Neural Network library)是 NVIDIA 提供的一个专门用于深度学习的 GPU 加速库,构建在 CUDA 之上。
特性 | CUDA | CUDNN |
---|---|---|
定义 | 通用 GPU 加速计算平台 | 深度学习专用的 GPU 加速库 |
功能 | 提供 GPU 的底层计算能力 | 提供深度学习操作的高效实现 |
用途 | 科学计算、图像处理、视频编码等通用任务 | 深度学习框架的底层加速 |
依赖关系 | 独立存在,可用于各种 GPU 加速任务 | 构建在 CUDA 之上,依赖 CUDA 提供的能力 |
优化方向 | 通用计算优化 | 针对深度学习任务的优化 |
支持的操作 | 矩阵运算、向量运算、数据传输等 | 卷积、池化、激活函数、反向传播等深度学习操作 |
使用场景 | 各种需要 GPU 加速的任务 | 深度学习模型的训练和推理 |
- CUDA 提供 GPU 的基本支持。
- CUDNN 提供深度学习操作的优化实现
Transformer架构是干什么的?
Transformer架构,即编码器-解码器。
Transformer架构的核心是注意力机制,从文本的上下文信息中找到需要注意的关键信息。
两个核心组件:Encoder,Decoder
Transformer通过自注意力机制和并行化架构,成为大模型实现语义理解、生成与推理的核心基础。其设计平衡了表达力与计算效率,使得GPT-4等模型能够处理复杂语言任务,是当前AI突破性进展的技术支柱
尝试2——深度学习,基于YOLOv8/v11+DeepSort汽车、行人追踪,
项目地址:https://github.com/Sharpiless/YOLOv11-DeepSort
本地Demo测试样例:
img:【】
深度学习资料参考:
动手学深度学习 李沐的课程笔记:https://github.com/Miraclelucy/dive_into_deep_learning,其b站有课程直播回访。
这个项目将《动手学深度学习》(Dive into Deep Learning)原书中的MXNet实现改为PyTorch,https://github.com/ShusenTang/Dive-into-DL-PyTorch,
动手学深度学习 原版官方仓库地址,https://github.com/d2l-ai/d2l-zh
问题:YOLO是干什么的?
GitHub Copilot回答:
YOLO(You Only Look Once) 是一种实时目标检测算法,广泛应用于计算机视觉领域。它的核心思想是将目标检测问题转化为一个单一的回归问题,通过一次神经网络的前向传播同时预测目标的类别和位置。
YOLO 的特点
实时性:
- YOLO 的设计目标是高效和快速,能够在实时场景中运行。
- 它通过单次网络推理完成检测,而不是像传统方法那样需要多次区域提取和分类。
端到端训练:
- YOLO 是一个端到端的神经网络模型,可以直接从输入图像到输出检测结果进行训练和推理。
全局推理:
- YOLO 在整个图像上进行预测,能够捕获全局上下文信息,减少了对目标的误检。
统一框架:
- YOLO 将目标检测任务统一为一个单一的神经网络模型,简化了检测流程。
YOLO 的工作原理
输入图像划分为网格:
- 将输入图像划分为
S x S
的网格,每个网格负责检测其中心落在该网格内的目标。
- 将输入图像划分为
每个网格预测多个边界框:
- 每个网格预测
B
个边界框,每个边界框包含以下信息:- 边界框的中心坐标
(x, y)
。 - 边界框的宽度和高度
(w, h)
。 - 置信度分数(目标存在的概率和边界框的准确性)。
- 边界框的中心坐标
- 每个网格预测
类别预测:
- 每个网格还预测目标属于某个类别的概率分布。
损失函数:
- YOLO 使用一个多任务损失函数,包括:
- 边界框的回归损失。
- 分类损失。
- 置信度损失。
- YOLO 使用一个多任务损失函数,包括:
YOLO 的优缺点
优点:
- 速度快:
- YOLO 是实时目标检测的代表算法,适合高帧率应用。
- 简单高效:
- 单一网络结构,易于部署和优化。
- 全局信息:
- YOLO 在整个图像上进行预测,减少了误检。
缺点:
- 小目标检测效果较差:
- 由于网格划分的限制,小目标可能会被忽略。
- 定位精度有限:
- 边界框的预测精度可能不如基于区域提取的方法(如 Faster R-CNN)。
YOLO 的应用场景
- 自动驾驶:
- 检测车辆、行人、交通标志等。
- 视频监控:
- 实时检测和跟踪入侵者或异常行为。
- 无人机:
- 检测地面目标,如车辆、建筑物或动物。
- 医疗影像:
- 检测病灶区域,如肿瘤或病变。
- 工业检测:
- 检测生产线上的缺陷或异常。
总结
YOLO 是一种高效的实时目标检测算法,因其速度快、结构简单而被广泛应用。随着版本的不断演化,YOLO 在检测精度和速度上都得到了显著提升,成为目标检测领域的重要工具。
YOLO访问官网
阅读博客
观看bilibili视频
最新YOLOV11模型 支持的计算机视觉任务:
物体检测
实例分割
图像分类
姿势估计
定向物体检测
物体追踪
问题:什么是跟踪和检测?
GitHub Copilot回答:
跟踪(Tracking) 和 检测(Detection) 是计算机视觉中的两个不同任务,尽管它们经常结合使用,尤其是在多目标跟踪(MOT)任务中。以下是两者的主要区别:
1. 定义
检测(Detection)
- 目标:在单帧图像中找到目标的位置,并标注其类别。
- 输出:目标的边界框(Bounding Box)、类别(Class)和置信度(Confidence)。
- 典型任务:
- 检测图像中的行人、车辆、动物等。
- 目标检测算法如 YOLO、Faster R-CNN、SSD 等。
- 特点:
- 每一帧图像都是独立处理的。
- 不考虑目标在时间上的连续性。
跟踪(Tracking)
- 目标:在视频的多帧中,跟踪目标的运动轨迹,并为每个目标分配唯一的 ID。
- 输出:目标的边界框、类别、置信度以及唯一的跟踪 ID。
- 典型任务:
- 跟踪视频中的行人或车辆。
- 多目标跟踪算法如 DeepSort、SORT、ByteTrack 等。
- 特点:
- 需要结合时间信息,考虑目标在多帧之间的关联。
- 依赖于检测结果,通常需要目标检测器提供输入。
2. 工作流程
检测的工作流程
- 输入一张图像。
- 使用目标检测器(如 YOLO)检测图像中的目标。
- 输出每个目标的边界框、类别和置信度。
跟踪的工作流程
- 输入视频帧序列。
- 对每一帧使用目标检测器检测目标。
- 使用跟踪算法(如 DeepSort)将检测结果与上一帧的跟踪结果进行关联。
- 输出每个目标的边界框、类别、置信度和唯一的跟踪 ID。
3. 依赖关系
- 检测是跟踪的基础:
- 跟踪通常依赖检测结果来初始化目标。
- 如果检测器性能较差,跟踪的效果也会受到影响。
- 跟踪补充检测:
- 跟踪可以在检测器漏检时,通过预测目标位置来补充检测结果。
4. 应用场景
检测的应用
- 静态图像分析:
- 安防监控中检测入侵者。
- 自动驾驶中检测车辆、行人和交通标志。
- 视频中的单帧分析:
- 视频帧中检测特定目标(如人脸、物体)。
跟踪的应用
- 视频分析:
- 多目标跟踪(如交通监控中跟踪车辆和行人)。
- 体育比赛分析(如跟踪球员或球的运动轨迹)。
- 行为分析:
- 跟踪目标的运动轨迹,用于行为预测或异常检测。
5. 算法对比
特性 | 检测(Detection) | 跟踪(Tracking) |
---|---|---|
输入 | 单帧图像 | 视频帧序列 |
输出 | 边界框、类别、置信度 | 边界框、类别、置信度、跟踪 ID |
时间维度 | 不考虑时间 | 需要考虑时间关联 |
依赖 | 独立运行 | 依赖检测结果 |
典型算法 | YOLO、Faster R-CNN、SSD | DeepSort、SORT、ByteTrack |
6. 示例
检测示例
- 输入图像:
- 一张街道图像。
- 输出:
- 检测到 3 辆车和 2 个行人,分别标注边界框和类别。
跟踪示例
- 输入视频:
- 一段街道监控视频。
- 输出:
- 跟踪每辆车和每个行人的运动轨迹,并为每个目标分配唯一的 ID。
总结
- 检测 是在单帧图像中找到目标的位置和类别。
- 跟踪 是在多帧视频中跟踪目标的运动轨迹,并保持目标的身份一致性。
- 两者通常结合使用,检测提供目标位置,跟踪负责在时间维度上关联目标。
问题:如何使用YOLO呢?
下面来简单的使用一下YOLO官方给的实例。
step1:配置环境
pip install ultralytics
step2:测试YOLOv11官方模型
from ultralytics import YOLO
# Load a model
model = YOLO("yolo11n.pt") # load an official model
# predict on an image
results = model.predict(source="https://ultralytics.com/images/bus.jpg",show=True,save=True, project='results', name='test')
# Print results
results[0].show()
step3:了解背后原理 【后续任务】
... ...
问题:如何使用GPU来训练模型???
需要安装CUDA、CUDNN
安装教程:https://blog.csdn.net/qq_62844901/article/details/143701527
#例如在YOLO中,会自动检索能否使用GPU计算,可以直接指定model,参数device=‘cuda’,这样就可以使用GPU进行训练了。(还可以设置其他的参数,例如用几个核心等等... ...)
model = YOLO('yolo11l.pt', device='cuda') # 强制使用 GPU
问题:CUDA和CUDNN安装配置完成后,运行YOLO出现版本报错
pytorch安装命令
pip3 install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu124
运行yolo预测时,出现错误:
NotImplementedError: Could not run 'torchvision::nms' with arguments from the 'CUDA' backend. ... ...
报错分析:
torchvision::nms,即torchvision这个包出现了错误。
通过pip list查看所安装的包
pip list
发现torchvision的版本与其他版本不一致
卸载后重新安装即可
pip uninstall torchvision
pip3 install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu124
出现以上问题的原因,推测,执行pytorch安装命令时,卸载torch的本地安装包时没有卸载干净导致的。
问题:DeepSort是干什么的呢?
DeepSort 是一种基于深度学习的多目标跟踪(Multi-Object Tracking, MOT)算法,它是 SORT(Simple Online and Realtime Tracking)的改进版本。
DeepSort 在 SORT 的基础上,引入了深度学习模型,用于目标的外观特征提取,从而显著提升了跟踪的准确性,尤其是在目标遮挡或外观相似的情况下。
问题:DeepSort是怎么工作的呢?
DeepSort 的工作流程
- 目标检测:
- 使用目标检测器(如 YOLO、Faster R-CNN 等)检测每一帧中的目标。
- 输出检测框的坐标、类别和置信度。
- 特征提取:
- 对每个检测框,使用深度神经网络提取外观特征。
- 轨迹预测:
- 使用卡尔曼滤波器预测每个跟踪轨迹的下一位置。
- 数据关联:
- 通过匈牙利算法,将检测框与现有的跟踪轨迹进行匹配。
- 数据关联的代价矩阵由运动信息(如马氏距离)和外观特征相似度共同决定。
- 轨迹更新:
- 对匹配的轨迹进行更新,包括位置、速度和外观特征。
- 对未匹配的检测框,初始化新的轨迹。
- 对未匹配的轨迹,增加未匹配计数,若超过阈值则删除轨迹
项目代码
项目目录介绍
configs目录
deep_sort . yaml
# REID_CKPT:特征提取权重的目录路径。
# MAX_DIST:最大余弦距离,用于级联匹配,如果大于该阈值,则忽略。
# MIN_CONFIDENCE:检测结果置信度阈值,大于该值就留下来。
# NMS_MAX_OVERLAP:非极大抑制阈值,设置为1代表不进行抑制。
# MAX_IOU_DISTANCE:最大IOU阈值。
# MAX_AGE:最大寿命,也就是经过MAX_AGE帧没有追踪到该物体,就将该轨迹变为删除态。
# N_INIT:最高检测次数,如果超过该次数(检测框与预测框匹配成功),就由不确定态转为确定态。
# NN_BUDGET:最大保存特征帧数,如果超过该帧数,将进行滚动保存。
deep_sort/deep 目录(特征提取网络)
- checkpoint/ckpt.t7:这是一个特征提取网络的权重文件,特征提取网络训练好了以后会生成这个权重文件,方便在目标追踪的时候提取目标框中的特征,在目标追踪的时候避免ID switch(即ID的来回乱跳)。
- evaluate.py:计算特征提取模型精确度。
- feature_extractor.py:提取对应bounding box中的特征, 得到一个固定维度的特征,作为该bounding box的代表,供计算相似度时使用。
- model.py:特征提取网络模型,该模型用来提取训练特征提取网络权重。
- original_model.py:特征提取网络模型,该模型用来提取训练特征提取网络权重。
- train.py:训练特征提取网络的文件
- test.py:测试训练好的特征提取网络的性能的文件
deep_sort/sort目录
- detection.py:保存通过目标检测的一个检测框框,以及该框的置信度和获取的特征;同时还提供了框框的各种格式的转化方法。
- iou_matching.py:计算两个框框之间的IOU。
- kalman_filter.py:卡尔曼滤波器的相关代码,主要是利用卡尔曼滤波来预测检测框的轨迹信息。
- linear_assignment.py:利用匈牙利算法匹配预测的轨迹框和检测框最佳匹配效果。
- nn_matching.py:通过计算欧氏距离、余弦距离等距离来计算最近领距离。
- preprocessing.py:非极大抑制代码,利用非极大抑制算法将最优的检测框输出。
- track.py:主要储存的是轨迹信息,其中包括轨迹框的位置和速度信息,轨迹框的ID和状态,其中状态包括三种,一种是确定态、不确定态、删除态三种状态。
- tracker.py:保存了所有的轨迹信息,负责初始化第一帧,卡尔曼滤波的预测和更新,负责级联匹配,IOU匹配。
deep_sort/deep_sort.py
deepsort的整体封装,封装成一个Class DeepSort,实现一个deepsort追踪的一个整体效果。
deep_sort/utils 目录
这里最主要有一些各种各样的工具python代码,例如画框工具,日志保存工具等等。
- asserts.py:判断文件、运行环境是否存在。
- drwa.py:绘制在图片上的内容。
- evaluation.py:自动化地评估多目标跟踪算法的性能,通过计算如MOTA(多目标跟踪精度)、IDF1(身份匹配F1分数)、召回率和精确度等关键指标,来衡量算法在处理视频序列时的效果。
- io.py:保存文件的信息。
- json_logger.py:用于实时目标检测的自定义日志记录机制,它能够将检测结果以JSON格式保存。
- log.py:日志信息。
- parser.py:解析YAML配置文件。
- tools.py:用于检查文件是否为视频文件和测量和打印函数执行所需的时间。
作者:已注销 链接:https://juejin.cn/post/7368283009483751459 来源:稀土掘金 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
初始化跟踪器
cfg = get_config()
cfg.merge_from_file("deep_sort/configs/deep_sort.yaml")
deepsort = DeepSort(cfg.DEEPSORT.REID_CKPT,
max_dist=cfg.DEEPSORT.MAX_DIST, min_confidence=cfg.DEEPSORT.MIN_CONFIDENCE,
nms_max_overlap=cfg.DEEPSORT.NMS_MAX_OVERLAP, max_iou_distance=cfg.DEEPSORT.MAX_IOU_DISTANCE,
max_age=cfg.DEEPSORT.MAX_AGE, n_init=cfg.DEEPSORT.N_INIT, nn_budget=cfg.DEEPSORT.NN_BUDGET,
use_cuda=True)
... ...
总结:通过这个项目,YOLO+DeepSort结合能做什么?
将YOLO用于车辆检测,其输出的边界框和车辆特征可以作为DeepSort的输入。
这种无缝集成的方式使得YOLO+DeepSort系统在多目标车辆跟踪中表现出色。
问题:小目标检测陷入困境?
解决方案:
参考博客地址:https://juejin.cn/post/7278973100074565692?searchId=2025041821015130A1614C2E96E01C6889
近期总结:
深度学习路线:了解深度学习基本概念->学习使用Pytorch->了解深度学习底层原理