个人笔记 - 拼图小游戏
2026/8/14 13:31:55 网站建设 项目流程

如何提出一个好问题

How-To-Ask-Questions-The-Smart-Way/README-zh_CN.md at main · ryanhanwu/How-To-Ask-Questions-The-Smart-Way · GitHub

1. 雷达

五分钟了解激光雷达基本参数 | 激光雷达学习笔记(1)_激光雷达参数-CSDN博客

LiDAR传感器(五)-参数 - 哔哩哔哩

激光雷达线束(数)

什么是线束?激光雷达的线数是越多越好吗?

线束是激光雷达发射的激光光束的垂直通道数量,越多越清晰。但相应的数据量大,散热差,功耗大。

自动驾驶出租车一般使用128/256线;家用车辅助驾驶96/128线/半固态(禾赛AT128);低速清扫车16/32。

“等效”线数,其实就是用少量激光器,通过高速二维扫描来实现类似高线数的扫描效果,实际上内部并没有那么多根“线”。

看激光雷达好不好,除了看线数,更要看“垂直角分辨率”。比如,一个128线雷达如果角分辨率是0.2°,未必比一个64线但角分辨率是0.1°的雷达看得更清楚。“均匀分布”比“单纯堆料”更重要。

常用名词

  • 激光雷达(LiDAR):Light Detection and Ranging 的缩写,即光检测和测距。通过发射激光束并接收反射光来测量距离,构建周围环境的三维模型。
  • 激光(Laser):激光雷达的发射光源,具有高方向性、高单色性和高亮度等特点,用于测量距离。
  • 光斑(Spot):激光束在目标物体表面的照射区域。光斑的大小和形状会影响激光雷达的测量精度。
  • 反射率(Reflectivity):物体反射激光光束的能力相对于入射光的强度的比例值,通常以百分比表示。
  • 反射强度(Intensity):激光脉冲经目标表面反射并被激光器接收到的回波能量。
  • TOF(Time of Flight):飞行时间,通过测量激光脉冲从发射到返回的时间来计算距离。超声波测距就是最早使用 TOF 原理的应用。
  • FMCW(Frequency Modulated Continuous Wave):调频连续波,通过比较发射和接收信号的频率差来测量距离。应用 FMCW 原理的 LiDAR 被称为“调频连续波激光雷达”,该技术可以实现更高的探测灵敏度和精度。
  • HDL(High Definition Lidar): 高分辨率激光雷达。
  • ROI(Region of Interest): 直译为“感兴趣区域”,又译为“精准感知区域”,指在图像或数据中需要重点关注的部分。在图像处理中,我们常常需要设置 ROI 来专注或者简化工作过程。
  • FoV(Field of View):视场角,表示传感器覆盖的角度范围(以度为单位)。通常,LiDAR 传感器的性能是在水平和垂直视场中测量的。所以 LiDAR 的主要参数包括垂直视场角(Vertical FOV )和水平视场角(Horizontal FOV)。
  • 笛卡尔坐标(Cartesian Coordinate):用于描述点云数据的坐标系统,以 X、Y、Z 轴表示。
  • 球坐标(Spherical Coordinate):另一种坐标系统,以距离、方位角和俯仰角表示点的位置。
  • 方位角(Azimuth):指激光束在水平面上的旋转角度(α),通常以正北方向为参考,范围为 0° 到 360°。它用于确定激光束在水平方向上的位置。
  • 俯仰角(Elevation):指激光束在垂直面上的倾斜角度(ε),范围通常为 -90° 到 +90°。它用于确定激光束在垂直方向上的位置。
  • RAE(Range-Azimuth-Elevation):即“距离-方位角-俯仰角”模型,这是激光雷达常用的测量模型。
  • 角度分辨率:是指激光雷达能够区分两个相邻目标的最小角度差,取决于激光雷达的波束宽度。影响角度分辨率的因素包括:
    • 天线孔径大小:孔径越大,波束越窄,角度分辨率越高。
    • 工作频率:频率越高,波长越短,波束宽度越窄,角度分辨率越高。
    • 信号处理能力:高性能的信号处理算法可以提高角度分辨率。
  • DBSD(Digital Beam Steering Device):数字波束转向设备,一种利用数字信号处理技术来精确控制光束方向的装置,广泛应用于光学通信、激光雷达、光学显示等领域。可提高扫描范围和分辨率,同时优化成本与外形。
  • 机械式激光雷达:通过机械旋转部件(电机)实现扫描的激光雷达,具有较高的精度和稳定性。
  • 固态激光雷达:无机械旋转部件的激光雷达,体积小、可靠性高。典型技术路线包括光相控阵(Optical Phased Array)和 Flash 面阵。
  • MEMS 激光雷达:采用微机电系统(MEMS)技术实现扫描的激光雷达,例如基于 MEMS 微振镜实现的激光雷达,也称为“混合固态”或“半固态”激光雷达。
  • 单线激光雷达:激光源发出的线束是单线的雷达。内部只包含一个发射-接收单元,通常更为紧凑、轻便,成本更低,常用于扫地机器人、送餐机器人。
  • 多线激光雷达:由多个发射器和接收器组成,通过电机的旋转,获得多条线束(例如 32 线、64 线、128 线等)。可以同时扫描多个方向,从而实现对目标物体更为精细的探测和识别,主要应用于无人驾驶领域。
  • 人眼安全:是指激光雷达在工作时,其发射的激光不会对人眼造成伤害。激光雷达的人眼安全标准主要基于国际电工委员会(IEC)发布的 IEC 60825-1 标准,该标准将激光安全划分为 7 个等级,数字越小,安全性越高。汽车和机器人中使用的激光雷达通常能达到 Class 1 最高安全等级。
  • 激光波长:激光雷达的激光波长是其核心参数之一,影响其性能、成本和安全性。目前市场上常见的激光雷达波长主要有 905nm 和 1550nm,它们各有优缺点,适用于不同的应用场景。
    • 905nm 激光雷达:广泛应用于中短距离的场景,如机器人导航、室内环境监测等。
    • 1550nm 激光雷达:更适合自动驾驶、复杂环境监测等对探测距离和安全性要求较高的场景。
  • 激光回波(Laser Beam Return / Laser Echo):是激光发射脉冲与目标物相互作用后会产生一个回波信号,而部分激光脉冲会继续前进与光程中的其他目标物体作用产生更多的回波信号,这些回波信号即激光回波。
  • 回波强度(Return Intensity):是指激光脉冲经目标表面反射并被激光器接收到的回波能量,又称为后向散射强度或能量。
  • 多回波(Multi-Return):是指一束激光在传播过程中,因遇到多个反射面或介质而产生多个返回信号的现象,常用于激光雷达中以获取更丰富的环境信息。
  • 点云(Point Cloud):由大量离散点组成的集合,包含三维坐标(X、Y、Z)以及反射强度等信息。原始点云经过预处理后通常以标准的二进制文件交换格式(LAS 或者 PCD 文件)存储,每个点除了包含 X、Y、Z 坐标信息,还包括点分类编号、回波强度值、回波编号、回波数目、扫描角度和颜色(RGB)等信息。
  • 点云密度(Point Cloud Density):单位面积上点的个数。它是描述激光雷达数据的一个重要指标,单位为:点/米²(point/m²)。影响点云密度的因素包括激光发射频率、角度分辨率、激光器-目标之间距离、入射角、目标材质及其表面反射率等。
  • 点云特征(Point Cloud Feature):点云数据中能够真实反映地物表面及边缘处特征的点、线、面等几何特征,是进行地物分类、识别和建模的重要参考。
    • 从尺度上,点云特征可分为局部特征描述和全局特征描述。局部特征如法线、曲率等几何形状特征,全局特征如点的拓扑特征,都属于点云特征的描述和提取范畴。
    • 从统计特征上,点云特征表现为点云密度,局部范围(如网格化后)内点云高程的均值、方差,不同地物表面点云的强度信息等。
  • 点云滤波(Point Cloud Filtering):通过自动或人机交互方式从点云数据中分离出地面点和非地面点的技术。一般认为,点云滤波是点云分类的预处理过程,高精度的点云滤波是基于点云进行数字高程模型(Digital Elevation Model,简称 DEM)生产的一道重要工序。
  • 点云分类(Point Cloud Classification):从点云中分离出一个或多个地物类别的点并对其进行类别标记的技术。根据分类前是否需要采样训练,可以分为监督分类(supervised classification)和无监督分类(unsupervised classification)。
  • 点云分割(Point Cloud Segmentation):是依据一定的相似性原则,将同类点聚集的技术。
  • 点云拟合(Point Cloud Fitting):是由离散的三维点坐标计算特征模型参数的技术。
  • 点云简化(Point Cloud Simplification):又称“基于点云的表面简化”。
  • 点云精化(Point Cloud Refinement):是提高点云数据质量或视觉效果的处理技术,常用于利用点云生成三维模型,或者对点云进行可视化渲染。
  • 点云去噪(Point Cloud Denoising):是降低和去除测量过程的点云数据表面噪声与离群点的技术。
  • 点云配准(Point Cloud Registration):是将两个或更多坐标系中的大容量三维空间数据点集转换到统一坐标系统中的数学计算过程,其关键是同名特征的获取和坐标转换参数的稳健计算。
  • 脉冲测量(Pulse Measurement):是通过测量发射和接收激光脉冲的时间差确定传感器和目标之间距离的方法。
  • 激光扫描(Laser Scanning):是主动、快速测量空间坐标的技术。
  • 离散回波激光雷达(Discrete Return LiDAR):是指记录有限次回波信号的激光雷达系统,通常记录首次回波、中间回波、末次回波。
  • 全波形激光雷达(Full Waveform LiDAR):是指按照回波返回时间序列,能够以很小采样间隔对激光回波信号进行连续数字化记录的激光雷达系统,可详细记录光斑范围内所有探测目标的垂直结构信息。
  • 波形分解(Waveform Decomposition):是通过特定算法对激光雷达波形进行处理,从中分离出光斑内各目标地物的回波信号,以提取其空间信息的过程。
  • 波形特征提取(Waveform Feature Extraction):是指激光雷达系统能够记录发射脉冲的能量分布(波形)和目标散射返回的能量分布(波形),利用波形采样点的能量分布,计算各种反映信号能量分布特征的度量参数,然后利用这些参数来提取相应的地物特征。
  • 半波能量高度(Height of Median Energy, HOME):是一种用于描述全波形激光雷达数据的特征参数,指波形能量一半所对应的高度位置到地面波峰位置的距离,取决于波形能量一半的高度和地面波峰的确定。
  • 激光雷达百分位高度(LiDAR Height Percentile):是激光雷达估算植被结构参数常用的变量,与植被高度及生物量密切相关。
  • 激光截获指数(Laser Interception Index, LII):是指植被冠层回波数与总回波数的比值,常用来反映植被的覆盖度。
  • 有序点云:点云数据以规则的网格或矩阵形式排列,通常由深度图还原而成,点的顺序与图像的行列结构类似,便于快速查找相邻点信息。
  • 无序点云:点云中的点没有特定的顺序,点的排列是随机的,点的顺序可以随意交换而不影响点云的整体信息。
  • 深度图(Depth Map):一种图像,其中每个像素值表示该像素对应物体与传感器之间的距离,通常用于表示场景的深度信息,可由激光雷达、立体视觉等技术生成。
  • 三维重建:通过从多个视角获取的深度图或其他图像数据,重建出场景的三维模型,用于虚拟现实、增强现实和自动驾驶等领域。
  • PCL(Point Cloud Library):一个开源的、跨平台的库,用于处理三维点云。
  • PCD(Point Cloud Data):点云数据的文件格式之一,常用于 PCL 库。
  • LAS:点云数据的另一种标准二进制文件格式。
  • PCAP:一种文件格式,用于存储网络数据包捕获信息,常用于记录和分析激光雷达或传感器的原始数据流。
  • VTK(Visualization Toolkit):一个开源的、跨平台的可视化工具包,用于三维计算机图形学、图像处理和可视化。
  • LidarView:由 Kitware 开发的开源软件,用于实时接收、记录、可视化和处理 3D 激光雷达数据,基于 ParaView 和 VTK 技术。支持 Velodyne、Ouster、Opsys 等多种激光雷达传感器。
  • CloudCompare:一款开源的三维点云和网格处理软件,支持点云可视化、过滤、配准、分割等操作,适用于大规模点云数据处理。
  • ROS(Robot Operating System):一个开源的机器人软件框架,提供硬件抽象、通信机制和工具链,用于简化机器人应用程序的开发。
  • Foxglove Studio:一个开源的、跨平台的机器人数据可视化和调试工具,支持实时监控和分析机器人系统的传感器数据、控制指令和状态信息。
  • SLAM(Simultaneous Localization and Mapping):即同时定位与地图构建,是机器人和无人驾驶领域的核心技术之一,通过传感器数据实时估计机器人或无人系统的位姿,并构建环境地图。
  • OpenGL(Open Graphics Library):一个跨语言、跨平台的应用程序编程接口(API),用于渲染二维和三维矢量图形。
  • OpenCV(Open Source Computer Vision Library):一个开源的计算机视觉库,包含数百种计算机视觉算法,支持图像处理、视频分析、对象检测等功能。
  • Eigen:一个高效的 C++ 模板库,用于线性代数、矩阵和向量运算,广泛应用于科学计算。
  • FLANN(Fast Library for Approximate Nearest Neighbors):一个用于快速近似最近邻搜索的库,支持多种数据类型和距离度量,广泛应用于计算机视觉和机器学习。
  • 高反:指高反射率物体对激光雷达信号的强烈反射。高反射率物体(如金属表面、玻璃等)会导致激光雷达接收到的回波信号过强,可能影响测量精度或导致误判。
  • 串扰:指激光雷达系统中不同激光发射通道或接收通道之间的相互干扰。这种干扰可能会影响测量数据的准确性和可靠性,尤其是在多线激光雷达或多传感器系统中。
  • 拖尾:指激光雷达接收到的回波信号在时间上出现延迟或扩散的现象。这种现象可能由目标物体的表面特性或激光雷达自身的光学系统不完善导致,会影响点云数据的质量。
  • 鬼影:指在激光雷达点云数据中出现的虚假反射点或异常信号。这些信号并非来自实际目标物体,而是由于光学系统中的反射、折射或散射等现象引起的。
  • APD(雪崩光电二极管):一种高灵敏度的光电探测器,用于激光雷达中接收反射光信号。APD 具有高增益和快速响应的特点,能够提高激光雷达的探测灵敏度。
  • SPAD(单光子雪崩二极管):一种能够检测单个光子的高灵敏度光电探测器,适用于低光强环境下的激光雷达系统。
  • SiPM(硅光电倍增管):一种基于硅材料的高灵敏度光电探测器,结合了 APD 和 SPAD 的优点,具有高增益和低噪声的特点,适用于激光雷达的高精度探测。
  • 测远能力:指激光雷达对低反射率目标物(通常为 10% 反射率)的最远探测距离。
  • 最近测量距离:指激光雷达能够输出可靠探测数据的最近距离,在这个距离以内的区域则称为“盲区”。
  • 精度:指测量结果中随机误差大小的程度,反映测量结果的离散程度。精度越高,表示测量值越集中,误差越小。
  • 准度:指测量值或预测值与实际值之间的接近程度,反映测量结果的正确性。准度越高,表示测量值越接近真实值。精度反映的是测量值的重复性和一致性,而准度反映的是测量值的准确性。两者都是衡量激光雷达性能的重要指标。

2. 模型

Agent

会感知、会思考、会行动的智能体。

Agent = 大模型(大脑) + 记忆系统(记忆) + 工具(手脚) + 反馈循环(学习)

CrewAI龙虾等就属于Agent。

Model library

https://github.com/CVHub520/X-AnyLabeling/blob/main/docs/en/model_zoo.md

害,想知道当前的主流模型进度,最好的方法就是捡现成的 :D

板端部署

【YOLOv8部署至RK3588】模型训练→转换RKNN→开发板部署_yolov8转rknn-CSDN博客

开发板

RK:来自中国芯片公司瑞芯微(Rockchip),是目前国内消费电子和AIoT领域最常见的SoC品牌之一。

X3M:来自地平线(Horizon Robotics),这是一家专注于AI芯片的公司,它的芯片型号以“X3”打头,后面跟着的“M”、“E”等字母代表这个系列里的不同配置版本。

瑞芯微不自己进行开发,他们只卖芯片。一些下游模组厂拿到芯片后,将芯片设计成核心板SOM(把RK3588芯片、内存(LPDDR4/5)、存储(eMMC)等焊在一张小板上,做成一个巴掌大的“计算核心”)或开发板(在核心板基础上,再加上各种接口(USB、HDMI、网口、GPIO引脚等),做成一块完整的、拿到手就能通电玩起来的板子)。大部分的下游厂商是直接做成了开发板。使用的话选现成生态的开发板比较省力。

SOC

瑞芯微RK3588 SoC,是瑞芯微出厂的RK3588开发板,SOC是System on Chip的缩写,中文叫“片上系统”。传统的电脑主板上有分开的 CPU(处理器)、GPU(显卡芯片)、内存芯片、声卡芯片、网卡芯片。而SoC 就是把所有这些核心部件的功能,全部“塞进”一颗指甲盖大小的芯片里

一块SOC中包含

  • CPU(中央处理器):负责逻辑运算和系统调度(相当于大脑的“决策层”)。

  • GPU(图形处理器):负责图像渲染和显示(相当于“视觉皮层”)。

  • NPU(神经网络处理单元):专门负责AI人工智能推理计算(相当于“直觉区”,这是智能设备的关键)。

  • ISP(图像信号处理器):专门处理摄像头传回来的原始图像数据。

  • 以及内存控制器、视频编解码器、各种接口控制器(USB/PCIe/以太网)等。

训练

激活函数一般都是使用Relu,不使用Silu,计算快耗能小,虽然Silu精度更高但总体收益不大。

这里的1x64x80x80,1x4x80x80,1x1x80x80可见图中详细描述。其中第一个的64没有介绍,是64个不同的探测器,每一个探测器(每一层)都只看一个特征,比如某一层只学习边缘轮廓,某一层只学习颜色,某一层只学习纹理,某一层只学习几何形状...一共有64个这样的层,叠在一起就可以进行更复杂的组合和推理。至于为什么是64,而不是10,20,32?因为硬件效率不够。大多数的NPU(比如RK3588)和GPU的内存访问单元宽度是固定的,一次处理64位或128位。如果通道数是64,刚好对齐硬件位宽,没有浪费。如果通道数是10,20,硬件每次仍然要读64位,浪费空间浪费资源。虽然不影响结果,设成10也能正常跑,就是又慢功耗又高。

这个80*80是怎么得到的:如果是640*640的图像,步长是8,特征图就是80*80大小,对应大检测框。每次移动八个像素,把这些内容合成一个新的像素,最后拼起来变成一个80*80的。

检测头尺寸为80(小检测框,语义弱,需要辅助),40(中型,空间信息和语义信息相对平衡),20(检测大目标,并为80和40的检测头提供语义【通过FPN融合】)。下采样倍数分别为8,16,32。

FPN

  • 语义下传:20×20的高层语义 → 上采样 → 融合到40×40和80×80,帮小目标头识别物体类别

  • 细节上传:80×80的浅层细节 → 下采样 → 融合到40×40和20×20,帮大目标头精确定位边界

Netron

不能加载bin文件。Netron需要同时知道网络结构和权重才能绘制。bin文件只有权重,没有结构。

  • 推理框架(如PyTorch/ONNX):像是“菜谱+食材包”,里面既有菜的做法(网络结构图),也有处理好的材料(权重)。吃之前得先看菜谱,按步骤来。

  • 板端的.bin文件:像是“炒好的菜”。硬件NPU不需要知道这道菜是怎么做的、放了什么调料,它只需要接收已经按特定顺序排列好的数字(最终权重和参数),然后直接进行计算。

YOLOV8 - 模型结构分析

data为14个类的onnx,512x512的大小。data下的3为输入通道数(RGB),如果输入是灰度,这里将会是1。

Conv卷积,Clip裁剪。交替出现是ReLU6激活函数的实现方式。

W:输出通道(卷积核数量)*输入通道*核高*核宽 B:偏置

第一层Conv:16个3×3的卷积核,去扫描RGB三通道的输入图像。每个核会提取一种特征(比如边缘、颜色),所以输出变成了16个通道。

第二层Conv:用32个3×3的卷积核,对上一层输出的16个通道进行再处理。注意每个新核的深度变成了16(为了匹配输入),输出通道数则增加到32个。可以被更复杂的核捕捉到更抽象的模式(比如拐角、纹理组合)。通道数翻倍,是模型在学习更复杂的特征。

第三层Conv:输入和输出通道数都是32,但卷积核大小是1×1。这个层不提取空间信息(不看周围的像素),而是像一个“特征融合器”。它把32个通道在同一位置的值,通过加权求和的方式混合起来,生成一个新的32通道特征图。这种1×1卷积常用于调整通道数增加非线性,而计算量远小于3×3卷积。

Clip(min=0, max=6):小于0的数变成0,大于6的数变成6,剩下保持不变。

Clip后的结果被分成了三个部分。这样做的目的:将后处理逻辑嵌入到模型计算图中。便于部署,可以被NPU加速。

  • 第一部分:负责预测边界框的回归参数(通常是4个值:中心点x偏移、中心点y偏移、宽度、高度)。对应Slice后直接Concat的部分。

YOLO的回归输出通常格式为(B, 4, H, W),也就是在通道维度的前4个位置。Slice操作就是把这4个通道切出来,Concat操作则把不同尺度(80×80, 40×40, 20×20)的回归参数在维度上拼到一起,方便统一处理。

  • 第二部分:负责预测目标类别概率。它对应你提到的需要走ShapeGather等操作的部分,这是为了根据类别数量(你的是14类)动态地处理数据。

ShapeConstantGatherAddDivMul等,是ONNX模型在导出时,将动态的、与类别数相关的操作固化成静态计算图的结果。

  1. Shape + Gather:这两个操作组合,通常是为了动态获取当前特征图的宽(W)和高(H)。因为不同的输入尺寸(如你用的512×512)会导致特征图的W和H不同,模型需要实时知道这个值。

  2. Add, Div, Mul:这些是归一化操作。模型输出的原始置信度和类别分数,通常通过Sigmoid函数映射到0~1之间。但在ONNX里,Sigmoid常被拆解成Add(加一个偏置)、Div(除以一个常数)、Mul(乘以一个常数)的组合。这里的“卷积和裁切”(通常是1×1卷积加Clip),就是对这部分数据进行最终的通道调整,将其映射到类别数量(14类)的维度上。

  • 第三部分:负责预测目标置信度(即这个框里有没有物体)。它通常也会被单独切分出来。

对于第二部分,由于类别数(14)是固定的,其处理流程相对确定。而第三部分的关键在于,Shape操作捕捉了特征图的动态尺寸(H和W),Gather从中提取出具体数值,再通过AddDivMul等操作,为特征图上的每一个网格点(共H×W个)计算出它对应的“偏移基准”

这个“偏移基准”就是每个网格点在原图上的实际坐标(比如第一个网格点对应原图(0,0),第二个对应(8,0)等等)。它存在的目的是为了与第一部分回归出的“相对偏移量”结合,最终算出在原图上的绝对坐标。

attributes(属性)

  • dilations:膨胀系数(默认为1,即标准卷积),(1,1)是表示两个方向上都不膨胀,均为标准卷积。

  • group:分组卷积数

  • kernel_shape:卷积核大小(如 [1, 1])

  • pads:填充方式(如 [1, 1, 1, 1])

    • 输出尺寸 = (输入尺寸 - 核大小 + 2×填充) ÷ 步长 + 1

    • [2, 2, 2, 2]:(若步长为1且核大小为3)上下左右各补2圈0。输出尺寸 = 输入尺寸 + 2

      • (输入尺寸 - 3 + 2×2) ÷ 1 + 1 = (输入尺寸 + 1) + 1 = 输入尺寸 + 2

  • strides:步长(如 [1, 1])

    • 卷积核每次移动1个像素

模型训练各步骤意义

为什么数据输入必须是512*512,640*640这种,为什么不能是其它大小的图像

模型的head、backbone、neck的作用是什么

1. backbone:

特征提取器,从原始图像中提取语义特征

由一系列卷积层(Conv)、激活函数和池化层堆叠而成。浅层卷积提取边缘、颜色等细节;深层卷积提取物体形状、部件等高级语义。这就像人类看一幅画,先看到线条和色块,再看到物体和场景。

  • 为什么不能只用全连接层(FC)?全连接层参数量巨大,会丢失图像的空间位置信息,且无法处理不同尺寸的输入。

  • 为什么要有“深度”?更深的网络(更多的层)能学习更复杂的特征,但也会带来梯度消失和计算量大的问题。残差连接(ResNet)和C2f模块(YOLOv8中的)就是为了解决深层网络训练困难而设计的。

2. neck:

特征融合器,解决目标检测中的尺度问题(图像中物体大小不一)。它把骨干网络不同层(不同分辨率)的特征图融合起来,让每一层都既包含细节信息(位置),又包含语义信息(类别)。

YOLO采用的特征金字塔网络(FPN)结构,通过上采样(Upsample)让深层的大感受野特征与浅层的细节特征结合。这就像让一个团队协作:有人看得远(语义),有人看得细(位置),Neck让它们互相分享信息。

  • 为什么不能只用最后一层特征?高层特征图分辨率低,对小物体感知差;低层特征语义不足,容易误检。融合是必需的。

  • 为什么用上采样(Upsample)?为了把不同尺寸的特征图统一到相同尺寸进行融合,最常见的做法是放大较小的特征图(如使用“nearest”插值)。

3. head:

任务执行,决定了模型是用于检测、分类还是分割

  • 检测头(Detect Head)

    • 作用:预测物体的边界框(BBox)类别(Class)

    • 原理:在特征图的每个位置(或预定义的锚点)上,预测一组向量(tx, ty, tw, th, cls),分别代表框的中心偏移、宽高和类别概率。

    • 为什么输出是regcls?因为这是两个不同的任务:回归(预测框的位置)和分类(预测框内是什么)。将它们分开处理,可以让网络各自学习最优的表示。

  • 分割头(Segment Head)

    • 作用:预测每个物体的像素级掩码(Mask)

    • 原理:除了检测头预测的框和类,分割头还会为每个候选框生成一组掩码系数(mc1, mc2, ...),然后与一个共享的掩码原型(seg)进行线性组合,最终得到精确的二进制掩码。这是YOLO系列实现实例分割的高效方式(YOLACT思想)。

  • 为什么头部分为“几层”(如P3/P4/P5)?每个头负责处理不同尺度的物体。大物体(如汽车)在低分辨率、大感受野的特征图上预测(P5);小物体(如行人)在高分辨率特征图上预测(P3)。这就是head_num和不同输出头(reg1, reg2...)的含义。

  • 为什么要输出多个头?因为不同尺度的物体需要不同分辨率的特征图来检测,一个头无法兼顾所有尺度。

为什么需要模型量化

  • 作用模型压缩,将模型权重和激活值从高精度(如FP32)转换为低精度(如INT8)。

  • 原理:记录FP32数值的范围,然后将这个范围线性映射到INT8的256个整数点上。推理时,用整数运算替代浮点数运算。

  • 设计意义

    • 极速:INT8计算在CPU和专用硬件(如NPU、DSP)上比FP32快得多。

    • 小巧:模型文件大小缩减为原来的1/4。

    • 低功耗:整数运算更省电,对边缘设备(如机器人的BPU)至关重要。

  • “为什么不能不做量化”?可以,但模型会更大、更慢、更耗电。对于部署在机器人、手机等资源受限设备上的模型,量化几乎是必须的步骤。

  • 代价:精度会有轻微损失(通常<1%),但经过校准(Calibration)后,对最终任务影响很小。

量化的图片(通常被称为“校准数据集”)本质上是一个“数据映射”过程。它需要通过少量有代表性的图片,来统计模型各层激活值(Activation)的分布范围,从而计算出将高精度(FP32)数据映射到低精度(INT8)空间的最佳比例因子(Scale)和零点(Zero Point)

什么是混合精度量化

混合精度量化是一种模型优化技术,它的核心思想是:在将模型从高精度(如FP32)转换为低精度(如INT8)时,允许模型的不同部分使用不同的数值精度。简而言之,就是“对敏感部分用高精度,对非敏感部分用低精度”。

这个理论基础是建立在“神经网络的不同层对量化误差的敏感度是不同的”的基础上的。

  1. 敏感层:通常是网络的头部(Head),特别是检测头(BBox回归)和分割头(Mask生成)。这些层需要非常精细的数值来计算精确的边界框坐标或像素级掩码,对量化噪声极其敏感。强行将它们压到INT8,很容易导致预测结果发生明显偏移,置信度塌缩。

  2. 非敏感层:通常是网络的骨干(Backbone)和颈部(Neck)。这些层负责提取语义特征,对微小的数值扰动容忍度相对较高,使用INT8计算可以在精度损失很小的情况下获得大幅加速。

混合精度量化正是基于这一观察,采用差异化的策略:

  • 计算密集型且对精度不敏感的部分(如大部分卷积)使用INT8,以获得最快的速度。

  • 对精度敏感的关键部分(如检测头)保留FP16甚至FP32,以守住精度底线。

混合精度量化会略微增加推理耗时,但换来了精度的大幅提升。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询