Contents

计算机视觉

计算机视觉

图像分类

lenet 第一个成功应用 mnist

alexnet 精心设计网络结构

vgg 模块化,通用设计范式

googlenet 并行化

resnet 只学习输入与残差的映射

/posts/algorithm_knowledge_base/2_%E8%AE%A1%E7%AE%97%E6%9C%BA%E8%A7%86%E8%A7%89/image%2045.png

/posts/algorithm_knowledge_base/2_%E8%AE%A1%E7%AE%97%E6%9C%BA%E8%A7%86%E8%A7%89/image%2046.png

目标检测

锚框(anchor box):以每个像素为中心,生成多个缩放比和宽高比不同的边界框

yolo

YOLO的核心思想

YOLO的基本思想是将输入图像划分为网格,每个网格负责检测该区域内的目标。每个网格预测多个边界框及其对应的类别分数,经过一系列优化筛选后,输出最终的检测结果。YOLO避免了传统的区域建议步骤,使得检测速度大幅提升。

YOLO的具体工作流程

  1. 图像划分和特征提取
    • YOLO将输入图像划分为固定大小的网格(例如 7x7)。
    • 使用CNN提取图像特征并将其映射到这些网格。
  2. 边界框预测
    • 每个网格预测多个边界框及每个边界框对应的置信度分数,这些分数表示框中是否存在物体以及边界框定位的精确度。
    • 每个边界框同时预测目标类别的分数,这个分数是类别概率与置信度的乘积。
  3. 非极大值抑制(NMS)
    • YOLO使用NMS去除重叠较多的边界框,仅保留最具有代表性的检测结果。
    • 这一步可以有效减少冗余框,保持检测精度。
  4. 输出目标类别和边界框
    • YOLO直接输出最终的边界框和类别,完成目标检测任务。

YOLO的主要版本演变

  1. YOLOv1
    • 初版YOLO将图像划分为7x7网格,每个网格预测2个边界框和20个类别分数,速度较快,但在小目标检测上表现一般。
  2. YOLOv2(YOLO9000)
    • 引入Batch Normalization提高稳定性,使用锚框(Anchor Boxes)预测,能够检测9,000个类别,提高了准确率。
  3. YOLOv3
  • YOLOv3使用多尺度预测,对不同大小的目标检测更加友好,增加了网络深度和复杂度,提升了小目标的检测性能NMS
  • 多尺度特征检测
    • YOLOv3引入了FPN(特征金字塔网络)思想,能够在不同特征尺度上进行检测。这种设计特别适合检测不同大小的目标,尤其是小目标的检测。
    • 具体来说,YOLOv3在三种尺度上检测目标,分别在较低、较中和较高的特征层中进行预测。
  • Darknet-53主干网络
    • YOLOv3使用了一种新设计的卷积神经网络Darknet-53作为主干网络。Darknet-53由53层卷积层组成,相比于YOLOv2的Darknet-19更加深层,提高了特征提取能力。
    • 使用了残差块(Residual Block)结构,避免梯度消失问题,并且提升了特征表示能力。
  • 改进的分类和定位方法
    • YOLOv3采用逻辑二元交叉熵损失(Binary Cross-Entropy Loss)来预测每个类别的概率,使分类损失计算更加高效。
    • 仍然使用非极大值抑制(NMS)来移除重叠边框。
  • 锚框机制
    • YOLOv3引入了预定义的锚框,与R-CNN系列的Region Proposal方法类似,能更好地适应不同尺寸的目标。
  1. YOLOv4和YOLOv5
    • 采用了更多优化技术(如CSP、SPP模块),性能进一步提升。YOLOv5在结构设计和推理速度上有显著改进,得到了广泛应用。
  2. YOLOv7
    • 使用了先进的模型架构和特征增强模块,提升了精度和速度,在主流的COCO数据集上达到较高的检测精度。

YOLOv3 vs YOLOv5 性能对比

特性YOLOv3YOLOv5
主干网络Darknet-53自定义CSPNet(轻量化多版本可选)
主要框架Darknet(C)PyTorch(更容易上手和开发)
多尺度检测支持支持
数据增强较少Mosaic增强、混合卷积、自动学习率调整
模型复杂度较高更加轻量化(尤其是YOLOv5s)
推理速度较慢(尤其在资源受限设备上)更快
精度和召回在大多数任务中表现略逊于YOLOv5精度和召回优于YOLOv3,尤其在小目标检测中

YOLO的优缺点

  • 优点
    • 速度快:YOLO可以在一次前向传播内完成目标检测,速度极快,适合实时检测场景。
    • 端到端设计:YOLO将目标检测当作一个单一的回归问题,不需要额外的区域建议步骤。
  • 缺点
    • 定位精度有限:YOLO在边框回归方面的精度较高,但仍可能不如基于区域建议的算法(如Faster R-CNN)。
    • 小目标检测效果较差:早期版本的YOLO在小目标上表现不佳,但后续版本(如YOLOv3及以上)对此有所改进。

ssd

单发多框

多尺度检测

rcnn系列

rcnn

image%2047.png

image%2048.png

fast-rcnn

faster-rcnn

rpn区域提议网络

roi pooling 区域兴趣池化

mask-rcnn

NMS

去除重叠区域的低置信度检测框,提高检测精度

NMS基本算法的具体步骤如下:

1)依据框的分数(即目标的概率)将所有预测框排序;
2)选择最大分数的检测框M,将其他与M框重叠度大(IoU超过阈值Nt)的框抑制;
3)迭代这一过程直到所有框被检测完成。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
# NMS 算法的简化伪代码:

def nms(boxes, scores, iou_threshold):
    # boxes 是检测框列表,scores 是对应的置信度分数
    sorted_indices = sorted(range(len(scores)), key=lambda k: scores[k], reverse=True)
    keep_boxes = []
    
    while sorted_indices:
        # 选择置信度最高的框
        current_idx = sorted_indices.pop(0)
        keep_boxes.append(boxes[current_idx])

        # 计算当前框与其他框的 IoU 并删除重叠度过高的框,更新sorted_indices
        sorted_indices = [
            idx for idx in sorted_indices
            if compute_iou(boxes[current_idx], boxes[idx]) < iou_threshold
        ]
    
    return keep_boxes

图像分割

FCN 第一个端到端图像分割模型,反卷积

U-Net 对称式编解码结构,跳层连接+转置卷积

Segnet 对称式编解码结构,反池化、无跳层连接,计算效率更高

Deeplab系列 主要是ASPP模块,多个尺度上使用空洞卷积

空洞卷积增大了感受野,但是计算量不变

空洞空间金字塔池化(ASPP)

  • 设计:ASPP 模块使用多个不同空洞率的空洞卷积并行处理输入特征图。这些空洞卷积可以捕捉不同尺度的上下文信息。
  • 聚合:ASPP 将不同空洞卷积的输出特征图进行拼接(concatenation),生成具有多尺度信息的特征表示。
  • 全局特征:ASPP 通常还包括一个全局平均池化层,以获取全局上下文信息,并将其与其他特征图结合。

对全局平均池化(GAP)过程的理解_全局平均池化层是由谁在哪提出的-CSDN博客

MobileNetUnet

Unet作为基本结构,MobileNet来提取特征

点云分割

https://blog.csdn.net/u014636245/article/details/82763269

https://blog.csdn.net/weixin_43199584/article/details/104950696

1、无序性 T-Net对称函数处理

2、稀疏性 局部采样+分组提取局部特征 pointnet++

3、非结构性 使用mlp而非CNN提取特征

pointnet

CVPR2017 提出

T-Net处理无序点集,基于mlp提取特征,高层特征与浅层特征融合

缺少邻域信息、对稀疏性敏感

pointnet.jpg

各个点的操作过于独立,点的邻域信息没有得到有效利用(学位论文)

  • 基本结构:PointNet 是首个直接处理点云的深度学习模型,使用对称函数(如最大池化)来处理无序点集。
  • 特点:通过全连接层提取特征,并通过池化层生成全局特征。PointNet 可以用于分类和分割任务。
  • 分割方法:在分割任务中,PointNet 会对每个点进行分类,输出每个点的标签。

共享的mlp理解:

  • 在 PointNet 中,MLP 的权重是共享的,这意味着对于点云中的每个点,使用相同的 MLP 参数进行特征提取。换句话说,输入点云中的每个点都通过同一组权重来生成其特征表示。
  • 这种权重共享的设计确保了网络对输入点的顺序不敏感,并使得网络能够处理任意数量的输入点。

共享的 MLP 是 PointNet 网络设计中的一个核心部分,它通过共享权重来处理无序点云数据,提取每个点的特征,最终实现高效的全局特征聚合。这个设计使得 PointNet 能够在处理复杂的三维数据时,既保持了计算效率,又能够有效地捕捉几何信息。

pointnet++

通过对数据进行采样、分组的方式提取局部特征,并使用MSG(multi-scale grouping)、
MRG(multi-resolution grouping)等策略自适应的处理密度不均匀的点云数据**(学位论文)**

  • 改进:PointNet++ 是对 PointNet 的扩展,通过分层抽样和分组处理捕捉局部特征
  • 特点:在每一层中,PointNet++ 会对点云进行分层处理,使模型能够捕捉更细粒度的特征。
  • 分割方法:适用于大规模点云数据,能够有效地进行语义分割和实例分割。

硕士论文改进

1、紧凑网络 FC层——深度可分离卷积

2、结构化剪枝 减少宽度、深度的方式

3、参数量化 float32 to uint8

/posts/algorithm_knowledge_base/2_%E8%AE%A1%E7%AE%97%E6%9C%BA%E8%A7%86%E8%A7%89/image%2049.png

改进后的PointNet网络共有12层,整体可分为三个部分。
第一部分是前5层Conv1~ Conv5,主要作用是提取浅层特征,层名称后面的参数如1×1、1×9等表示的是卷积核尺寸,最后一个参数表示输出通道数,对于输入的n个点数据,每个点具有(x、y、z、r、g、b、x’、y’、z’)9个特征,经过第一个卷积层Conv1之后,每个点的特征将会被融合为1个,之后再经过卷积层Conv2~ Conv5逐级提取特征,卷积层中的其他细节还包括高和宽两个方向上的步长分别为[1,1],填充方式使用的是“VALID”类型,激活函数为修正
线性单元ReLU,这些参数设定对于其他部分的卷积操作也是一致的;

第二部分是中间三层,主要作用是全局特征筛选和增加网络表达能力,该部分对于Conv5的输出先作一个最大池化,池化时的卷积核尺寸为n×1,相当于个输出通道保留一个特征,共得到256个全局特征,接着经过两个替代了FC层的可分离卷积操作对全局特征进行非线性变换,输出128个特征值;

第三部分是最后四层,作用是对前两部分提取的浅层和全局特征进行跳层连接并输出最终分割结果,得到每一个点属于13个类别中各个类别的概率。