目标检测与分割:深度学习在视觉中的应用

news2025/5/26 11:52:28

🔍 PART 1:目标检测(Object Detection)

1️⃣ 什么是目标检测?

目标检测是计算机视觉中的一个任务,目标是让模型“在图像中找到物体”,并且判断:

  • 它是什么类别(classification)

  • 在哪里(localization)

输出通常是:一个或多个 bounding box + 对应类别

🧠 举例:看一张街景图,目标检测系统会输出:

[
  {"class": "car", "bbox": [50, 80, 200, 300]},
  {"class": "person", "bbox": [210, 100, 250, 300]}
]

2️⃣ 传统方法演变史

(1)R-CNN(Region-based CNN)

关键词:提候选区域 + 独立分类器

🛠️ 步骤:
  1. 使用 Selective Search 等方法,生成 2000+ 候选框(region proposals)

  2. 对每个框裁剪、resize,送入 CNN 提取特征(如 AlexNet)

  3. 用 SVM 对特征进行分类(猫狗车人等)

  4. 用边框回归器微调预测框的位置

✅ 优点:
  • 检测准确率高,首次将 CNN 引入目标检测

  • 引领了后续目标检测研究方向

❌ 缺点:
  • 每张图像跑 2000 多次 CNN,速度慢如蜗牛

  • 整个流程是分步骤训练,不能端到端训练

  • 中间特征要保存,占用大量磁盘空间


(2)Fast R-CNN

关键词:共享特征图 + ROI Pooling + 单阶段训练

🔁 改进方法:
  • 整张图只跑一次 CNN,生成特征图

  • 使用 ROI Pooling 从特征图中裁剪候选框区域

  • 在一个网络中同时做分类 + 边框回归

✅ 优点:
  • 更快、更省内存

  • 可端到端训练(使用 Softmax + Smooth L1 Loss)

❌ 缺点:
  • 仍然依赖外部模块(如 Selective Search)来生成候选框


(3)Faster R-CNN

关键词:自带 RPN(Region Proposal Network)

Faster R-CNN 把“提候选框”的模块也变成一个神经网络,称为 RPN。

🚀 模型结构:

图像 → CNN → 特征图
             ↘→ RPN 生成候选框
             ↘→ ROI Pooling → 分类 + 回归

🧠 RPN 工作方式: 

  • 用卷积滑窗在特征图上滑动

  • 每个滑窗预测:

    • 是不是物体?(二分类)

    • 如果是,框在哪里?(坐标回归)

✅ 总结优点:
  • 全模型端到端训练(backprop 到最前面)

  • 精度高,速度比前两者快

  • 成为基准检测器(benchmark)

❌ 缺点:
  • 实时性差(约 7 FPS)

  • 对小物体不敏感(因层次深、特征粗)


3️⃣ YOLO(You Only Look Once)

关键词:单阶段、速度极快、端到端预测

YOLO 不再分“提框”和“分类”两步,而是一次性直接输出所有框和类别

🧠 工作原理:
  1. 把输入图像划分为 S×S 网格

  2. 每个格子负责预测若干个 bounding box + 置信度 + 类别概率

  3. 最后筛选 + NMS(非极大值抑制)去掉重复框

✅ 优点:
  • !(可达 45–155 FPS)

  • 训练和预测都是端到端的

  • 特别适合实时场景,如无人车、机器人

❌ 缺点:
  • 精度不如 Faster R-CNN(特别是小物体)

  • 对重叠目标不够敏感(因为格子限制)


4️⃣ SSD(Single Shot Detector)

关键词:多层多尺度预测、一次性输出

  • 相比 YOLO,SSD 在不同尺度的 feature maps 上都进行预测

  • 每个位置使用多个 aspect ratio 的 anchor box

✅ 特点:
  • 保留 YOLO 的速度

  • 提升对小物体、多物体的适应能力

  • 应用广泛,如移动端部署


5️⃣ RetinaNet(高精度 + 快)

关键词:Focal Loss + Feature Pyramid Network

  • 面对的问题:正负样本极度不平衡(99% 都是背景框)

  • 引入 Focal Loss,使容易分类的样本损失变小,专注难样本

  • 同时使用 FPN(从低层和高层抽取特征)

✅ 优势:
  • 精度接近 Faster R-CNN,速度接近 SSD

  • 成为很多工业检测系统的首选


✅ 小结对比表

方法速度精度优势
R-CNN思想开创,流程复杂
Fast R-CNN较慢特征共享,训练简单
Faster R-CNN非常高RPN 端到端
YOLO非常快一般实时场景首选
SSD非常快中高多尺度处理,小目标好
RetinaNet快 + 准很高焦点损失 + 多层检测

 

🧠 Part 2:语义分割 & 实例分割


🔍 1️⃣ 什么是语义分割(Semantic Segmentation)?

就是要让模型对图像中的“每一个像素”做出分类。

换句话说,它不再是识别整张图里有没有狗,而是要把“狗的每个像素”标出来。


📷 举个例子:

一张图片里有:

  • 天空

  • 建筑

  • 一辆车

  • 一只狗

那么语义分割模型就要把:

  • 所有天空像素 → 标记为 class 0

  • 所有建筑像素 → class 1

  • 所有车的像素 → class 2

  • 所有狗的像素 → class 3

结果输出是一张和原图一样大小的图片,每个像素是一个类别编号(mask)


🎯 用处有哪些?

应用场景解释
自动驾驶车道线、人、车、障碍物像素级分割
医学图像分析脑肿瘤、器官、血管等结构分割
卫星遥感地表分类(农田、建筑、道路)

🧱 2️⃣ 怎么实现语义分割?——FCN

🏗️ FCN:Fully Convolutional Network

🧠 思想:

我们不能再用全连接层(FC),因为它把图像“压成一维向量”了。

所以我们把原来分类网络的 FC 层去掉,全部换成卷积层!


✅ FCN 架构:

  1. 编码器部分(像 VGG、ResNet):提取图像高级语义特征(但大小变小)

  2. 上采样部分(Upsampling / Transposed Conv):把特征图“放大回原图大小”

  3. 像素级预测层:对每个像素输出分类结果(比如 softmax over 21 类)


📐 下采样 → 上采样:
  • 原图输入:512×512

  • 编码器卷积后:32×32(高层抽象)

  • 上采样恢复回 512×512,每个像素分类!


🚧 问题:上采样后信息模糊

FCN 中的上采样有时候会“糊掉”细节,比如边缘不清晰、物体轮廓不完整。


🧬 3️⃣ U-Net:更强的语义分割网络

U-Net 是专为医学图像设计的分割网络,结构长得像字母 “U”。


🧱 U-Net 结构:

编码器部分(左边)解码器部分(右边)
多层卷积 + Pooling多层转置卷积 + 上采样
把图像越压越小,提取特征把特征图还原成原图尺寸

🌉 核心创新点:Skip Connections(跳跃连接)

  • 将编码器中每层的特征图 直接连接到解码器的对应层

  • 这样就把 低层的边缘细节 + 高层的语义信息融合起来了!

🔍 好处:
  • 保留边界、轮廓信息

  • 不会因为上采样而“糊”掉小物体

  • 极其适合小样本学习,医学图像超常用!


👨‍👩‍👧 4️⃣ 什么是实例分割(Instance Segmentation)?

和语义分割的区别在于:

  • 语义分割:你知道哪些像素是“人”,但不知道有几个“人”

  • 实例分割:你不仅知道哪些像素是“人”,还知道是第1个人、第2个人…

比如:

  • 语义分割 → 把 3 个苹果都标为 class=apple

  • 实例分割 → 给 3 个苹果不同 mask(Apple1, Apple2, Apple3)


🧰 实例分割的代表:Mask R-CNN

Mask R-CNN 是在 Faster R-CNN 的基础上加了“像素级掩膜预测”的分支。


🧠 Mask R-CNN = Faster R-CNN + Mask head

架构如下:
输入图像 →
→ CNN backbone 提取特征 →
→ RPN 生成候选框 →
→ ROIAlign → 分类 & 回归(原来 Faster R-CNN 的输出)
→ + 额外的 Mask 分支 → 输出 28×28 的像素掩膜

💡 关键技术:ROIAlign

ROI Pooling 是把框中的区域裁剪为固定大小。但它会导致像素 misalignment(对不齐)。

ROIAlign 使用双线性插值方法保留空间对齐关系,大幅提升 mask 的像素级精度


✅ 小结表:语义分割 vs 实例分割

特征语义分割实例分割
每个像素分类?
能区分实例?❌ 所有人都一样✅ 每个对象单独编号
适用模型FCN, U-NetMask R-CNN
应用场景自动驾驶、遥感、医学图智能标注、COCO竞赛

 

🎓 PART 3:训练技巧与优化方法(Training & Regularization)


🎯 为什么要学习训练技巧?

在深度学习中,构建一个模型不是最难的,真正让它训练成功才是挑战!

常见训练中的“坑”包括:

问题描述
过拟合 Overfitting在训练集表现很好,测试集效果很差
梯度爆炸/消失网络太深或参数初始化不当
收敛慢、震荡大学习率不合适、训练不稳定
数据不平衡有些类别样本很多,有些很少

📌 我们将介绍的核心训练技巧:

技术名用处
✅ 数据增强让数据更多样,减少过拟合
✅ 正则化(L2)限制模型复杂度
✅ Dropout训练时随机“关掉”一部分神经元
✅ Batch Normalization训练更稳定,加快收敛
✅ Early Stopping验证集不再变好时就提前终止训练
✅ 迁移学习用别人训练好的模型做自己任务

🧪 1️⃣ 正则化(Regularization)

📌 什么是正则化?

就是在损失函数中“惩罚”太复杂的模型,避免模型过拟合训练集。


🎯 目标:

  • 想让模型在新数据上也表现好(泛化能力强)

  • 而不是只会“记住”训练数据


✍️ 数学上怎么做?


💡 简单理解:

你给模型加了个“规则”:参数别乱搞太大,除非你真的很需要这么大


🎛️ 2️⃣ Dropout(随机失活)

在训练过程中,随机让部分神经元“暂时消失”。


为什么这么做?

  • 强迫模型不能依赖某个特定神经元

  • 等于模拟多个不同的子网络 → 提高泛化能力


🧠 举例:

假设某一层有 100 个神经元,设置 Dropout rate = 0.5

  • 每次前向传播,随机“屏蔽”掉 50 个神经元

在测试时:

  • 不 Dropout,而是保留全部神经元,但乘以 0.5(期望值保持一致)


✅ 效果:

  • 减少 co-adaptation(神经元之间互相依赖)

  • 显著减轻过拟合


🧪 3️⃣ Batch Normalization(BN)

在每一层之后对输出进行标准化(均值为 0,方差为 1)


✨ 为什么 BN 有用?

  • 深层网络中,分布会不断变动(叫 Internal Covariate Shift)

  • BN 让每一层的输入“保持稳定”,训练更快更稳


🎯 效果:

  • 网络可以用更大学习率

  • 收敛更快

  • 训练更不容易陷入震荡


⏱️ 4️⃣ Early Stopping(早停)

如果验证集准确率不再提升,就提前停止训练


📌 为什么?

  • 一般训练久了后,模型会开始过拟合

  • 我们使用验证集判断模型什么时候“学得刚刚好”


怎么实现?

  • 每训练一个 epoch,监控 validation loss

  • 如果连续 N 次验证都没有变好,就停!

✅ 常见参数:

EarlyStopping(monitor='val_loss', patience=5)

📸 5️⃣ 数据增强(Data Augmentation)

用各种“微小变换”生成更多样的训练数据


🤸‍♀️ 举例:

方法作用
翻转让模型识别左右翻的图像
随机裁剪学会注意局部信息
加噪声增强鲁棒性
颜色扰动提高模型对亮度/饱和度容忍
Cutout/Mixup深度增强方法

📈 数据增强效果:

  • 让模型看到“更多样的情况”

  • 减少模型对背景、位置、颜色的依赖

  • 显著提高模型在测试集的性能


🔄 6️⃣ 迁移学习(Transfer Learning)

利用别人已经训练好的模型来解决你的问题


💡 举例:

  • 用别人训练好的 ResNet50(在 ImageNet 上)来做猫狗分类

  • 你可以:

    • 冻结原始网络参数,只训练最后几层(特征提取)

    • 整体微调,重新训练所有层(fine-tune)


✅ 优点:

  • 训练更快(因为预训练模型已经学了“通用特征”)

  • 减少对大量标注数据的依赖

  • 特别适合小样本任务!


🧠 总结:常见训练技巧一览表

技术作用是否减轻过拟合
L2 正则化限制权重增长
Dropout模拟多个子网络
Batch Norm稳定训练,提高效率❌(但有辅助效果)
Early Stopping只训练到最优点
Data Augmentation提高泛化能力
Transfer Learning加速训练,提高性能✅(尤其小数据)

 


4.例题 

🧠 通俗+专业解释如下:


✅ 什么是 Transfer Learning?

迁移学习(Transfer Learning) 是指:我们不从头开始训练模型,而是使用别人已经训练好的模型来解决我们的新任务。


💡 举个现实例子:

比如你要训练一个识别“古代陶瓷”的模型,但你没有几千张图,也没有 GPU 跑几天:

  • 你可以下载一个别人训练好的模型(如 ResNet50)

  • 然后用它来“提取图像特征”

  • 最后只在最后一两层训练自己的分类任务

  • 这就叫 迁移学习


✅ 为什么要这样做?

  • 训练 CNN 非常耗资源(数据 + 时间 + 算力)

  • 很多低层卷积层学到的特征是“通用”的(比如边缘、角、纹理)

  • 复用别人的模型能:

    • 节省时间

    • 提升小样本任务效果

    • 加快收敛速度


📌 回到选项分析:

选项内容正确与否理由
A从零开始训练每个新任务正好是迁移学习的反面
B使用预训练模型 + 微调✅ 完整迁移学习流程
C把图像转文字再学不相关,混淆概念
D合并多个 CNN 提升性能那叫集成学习,不是迁移学习

 

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

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

相关文章

杰弗里·辛顿:深度学习教父

名人说:路漫漫其修远兮,吾将上下而求索。—— 屈原《离骚》 创作者:Code_流苏(CSDN)(一个喜欢古诗词和编程的Coder😊) 杰弗里辛顿:当坚持遇见突破,AI迎来新纪元 一、人物简介 杰弗…

STM32蓝牙连接Android实现云端数据通信(电机控制-开源)

引言 基于 STM32F103C8T6 最小系统板完成电机控制。这个小项目采用 HAL 库方法实现,通过 CubeMAX 配置相关引脚,步进电机使用 28BYJ-48 (四相五线式步进电机),程序通过蓝牙连接手机 APP 端进行数据收发, OL…

第一个Qt开发的OpenCV程序

OpenCV计算机视觉开发实践:基于Qt C - 商品搜索 - 京东 下载安装Qt:https://download.qt.io/archive/qt/5.14/5.14.2/qt-opensource-windows-x86-5.14.2.exe 下载安装OpenCV:https://opencv.org/releases/ 下载安装CMake:Downl…

TCP 如何在网络 “江湖” 立威建交?

一、特点: (一)面向连接 在进行数据传输之前,TCP 需要在发送方和接收方之间建立一条逻辑连接。这一过程类似于打电话,双方在通话前需要先拨号建立连接。建立连接的过程通过三次握手来完成,确保通信双方都…

【小白训练日记——2025/4/15】

变化检测常用的性能指标 变化检测(Change Detection)的性能评估依赖于多种指标,每种指标从不同角度衡量模型的准确性。以下是常用的性能指标及其含义: 1. 混淆矩阵(Confusion Matrix) 定义:统…

数据结构——二叉树(中)

接上一篇,上一篇主要讲解了关于二叉树的基本知识,也是为了接下来讲解关于堆结构和链式二叉树结构打基础,其实无论是堆结构还是链式二叉树结构,都是二叉树的存储结构,那么今天这一篇主要讲解关于堆结构的实现与应用 堆…

02-MySQL 面试题-mk

文章目录 1.mysql 有哪些存储引擎、区别是什么?1.如何定位慢查询?2.SQL语句执行很慢,如何分析?3.索引概念以及索引底层的数据结构4.什么是聚簇索引什么是非聚簇索引?5.知道什么叫覆盖索引嘛 ?6.索引创建原则有哪些?7.什么情况下索引会失效 ?8.谈一谈你对sql的优化的经验…

#include<bits/stdc++.h>

#include<bits/stdc.h> 是 C 中一个特殊的头文件&#xff0c;其作用如下&#xff1a; 核心作用 ​​包含所有标准库头文件​​ 该头文件会自动引入 C 标准库中的几乎全部头文件&#xff08;如 <iostream>、<vector>、<algorithm> 等&#xff09;&…

在企业级部署中如何优化NVIDIA GPU和容器环境配置:最佳实践与常见误区20250414

在企业级部署中如何优化NVIDIA GPU和容器环境配置&#xff1a;最佳实践与常见误区 引言 随着AI和深度学习技术的迅速发展&#xff0c;企业对GPU加速计算的需求愈加迫切。在此过程中&#xff0c;如何高效地配置宿主机与容器化环境&#xff0c;特别是利用NVIDIA GPU和相关工具&…

Spring Boot 项目三种打印日志的方法详解。Logger,log,logger 解读。

目录 一. 打印日志的常见三种方法&#xff1f; 1.1 手动创建 Logger 对象&#xff08;基于SLF4J API&#xff09; 1.2 使用 Lombok 插件的 Slf4j 注解 1.3 使用 Spring 的 Log 接口&#xff08;使用频率较低&#xff09; 二. 常见的 Logger&#xff0c;logger&#xff0c;…

[react]Next.js之自适应布局和高清屏幕适配解决方案

序言 阅读前首先了解即将要用到的两个包的作用 1.postcss-pxtorem 自动将 CSS 中的 px 单位转换为 rem 单位按照设计稿尺寸直接写 px 值&#xff0c;由插件自动计算 rem 值 2.amfe-flexible 动态设置根元素的 font-size&#xff08;即 1rem 的值&#xff09;根据设备屏幕宽度和…

STM32H503CB升级BootLoader

首先&#xff0c;使用SWD接口&#xff0c;ST-LINK连接电脑和板子。 安装SetupSTM32CubeProgrammer_win64 版本2.19。 以下是接线和软件操作截图。

在Apple Silicon上部署Spark-TTS:四大核心库的技术魔法解析!!!

在Apple Silicon上部署Spark-TTS&#xff1a;四大核心库的技术魔法解析 &#x1f680; &#xff08;M2芯片实测&#xff5c;Python 3.12.9PyTorch 2.6.0全流程解析&#xff09; 一、核心库功能全景图 &#x1f50d; 在Spark-TTS的部署过程中&#xff0c;pip install numpy li…

VMWare 16 PRO 安装 Rocky8 并部署 MySQL8

VMWare 16 PRO 安装 Rocky8 并部署 MySQL8 一.Rocky OS 下载1.官网二.配置 Rocky1.创建新的虚拟机2.稍后安装系统3.选择系统模板4.设置名字和位置5.设置大小6.自定义硬件设置核心、运存和系统镜像7.完成三.启动安装1.上下键直接选择安装2.回车安装3.设置分区(默认即可)和 roo…

cursor如何回退一键回退多个文件的修改

当我们使用 Cursor 写代码时&#xff0c;起初可能操作得很顺利&#xff0c;但某次更改或许会让代码变得面目全非。这时候如果没有使用 Git 该怎么办呢&#xff1f;别担心&#xff0c;Cursor 已经为我们考虑到了。 具体的操作如下&#xff1a; 当我们要取消某次操作时&#xf…

基于RV1126开发板的口罩识别算法开发

1. 口罩识别简介 口罩识别是一种基于深度学习的判断人员有没有戴口罩的分类算法&#xff0c;能广泛的用于安防、生产安全等多种场景。本算法先基于人脸检测和人脸标准化获取的标准人脸&#xff0c;然后输入到口罩识别分类算法进行识别。 本人脸检测算法在数据集表现如下所示&am…

PyCharm显示主菜单和工具栏

显示主菜单 新版 PyCharm 是不显示主菜单的&#xff0c;要想显示主菜单和工具栏&#xff0c;则通过 “视图” → “外观” &#xff0c;勾选 “在单独的工具栏中显示主菜单” 和 “工具栏” 即可。 设置工具栏 此时工具栏里并没有什么工具&#xff0c;因此我们需要自定义工具…

Java工程行业管理软件源码 - 全面的项目管理工具 - 工程项目模块与功能一览

工程项目管理系统 Spring CloudSpring BootMybatisVueElementUI前后端分离构建工程项目管理系统 项目背景 随着公司的快速发展&#xff0c;企业人员和经营规模不断壮大。为了提高工程管理效率、减轻劳动强度、提高信息处理速度和准确性&#xff0c;公司对内部工程管理的提升提…

Redis 高可用集群搭建与优化实践

在分布式系统中,缓存技术用于提升性能和响应速度。 Redis 作为一款高性能的键值存储系统,广泛应用于缓存、消息队列和会话管理等场景。随着业务规模的扩大,单机 Redis 的性能和可用性逐渐无法满足需求。 因此,搭建高可用的 Redis 集群可以解决这一问题。我将详细介绍 Red…

【AI大模型】基于阿里百炼大模型进行调用

目录 一、认识阿里云百炼 模型广场 创建自己的模型 二、AI扩图示例 1、开头服务、设置秘钥 2、选择HTTP方式调用流程 3、创建任务请求示例 4、发送http请求提交任务 5、查看任务进度的流程设计 6、后端查看任务进度代码 三、总结 大家好&#xff0c;我是jstart千语…