Soup's Blog

Back

面试问题记录

记录在求职过程中的一些面试问题
}

面试技术问答#


问题1:YOLOv8模型相比较之前的算法有哪些改进?#

  1. 采用了更高效的骨干网络(Backbone)与颈部网络(Neck)
    YOLOv8 使用 C2f 模块替代 YOLOv5 中的 C3 模块。C2f 基于 Cross Stage Partial 结构,引入更多分支和残差连接,增强梯度流动,同时保留更丰富的浅层特征信息,从而提升小目标检测能力。

  2. 采用无锚框(Anchor-Free)检测头
    与 YOLOv3/v5 等依赖预定义锚框不同,YOLOv8 直接预测目标中心点及其宽高,无需聚列生成先验框。这简化了训练流程,降低了对数据集分布的依赖,提高了模型泛化能力和训练稳定性。


问题2:简述一下行人检测跟踪算法如何实现?#

  1. 目标检测阶段
    使用预训练的 YOLOv8 模型(如 yolov8s.pt)对视频每一帧进行推理,输出所有行人的边界框、类别(person)及置信度。

  2. 目标跟踪阶段(DeepSORT)
    将检测结果输入 DeepSORT 跟踪器:

    • 利用卡尔曼滤波预测目标下一帧位置;
    • 提取外观 Re-ID 特征进行跨帧匹配;
    • 为每个行人分配唯一 ID,减少 ID 切换(ID Switch)。
  3. 撞线计数逻辑

    • 在图像中预设一条计数线(如水平线 y = line_y);
    • 对每个 track_id,记录其边界框中心点 (cx, cy) 的历史轨迹;
    • 若中心点从线一侧跨越到另一侧(例如 cy_prev < line_y ≤ cy_curr),则判定为一次有效穿越;
    • 根据跨越方向区分”进入”或”离开”,实现双向计数,并通过状态管理避免重复计数。

问题3:简述一下如何利用卡尔曼滤波预测目标位置?#

卡尔曼滤波通过融合运动模型与观测数据,实现对目标状态的最优估计:

  1. 状态建模
    定义状态向量 X=[x,y,r,h,vx,vy,vr,vh]T\mathbf{X} = [x, y, r, h, v_x, v_y, v_r, v_h]^T,其中 (x,y)(x, y) 为中心坐标,r=w/hr = w/h 为宽高比,hh 为高度,vv 为对应速度。

  2. 预测阶段
    基于匀速运动模型,通过状态转移矩阵 F\mathbf{F} 预测下一时刻状态:Xpred=FXprev\mathbf{X}_{\text{pred}} = \mathbf{F} \mathbf{X}_{\text{prev}},并更新协方差矩阵 P\mathbf{P} 表示不确定性。

  3. 更新阶段
    当新一帧检测结果到来时,将其作为观测值:

    • 计算预测值与观测值的残差;
    • 通过卡尔曼增益动态融合两者;
    • 更新状态向量 X\mathbf{X} 和协方差 P\mathbf{P},得到更精确的当前估计。
  4. 循环执行
    每帧重复”预测 → 更新”流程,实现稳定连续跟踪。


问题4:解释多头注意力的优点,自注意力和注意力的区别,以及 Focal Loss 与交叉熵的公式。#

  1. 多头注意力的优点
    多头机制允许模型在多个子空间中并行学习不同类型的依赖关系(如位置、语义、语法等)。每个头拥有独立参数,相当于从不同视角理解输入,显著增强模型表达能力与泛化性能。

  2. 自注意力 vs 注意力

    • 注意力(Attention):建立两个不同序列之间的关联(如查询序列与键值序列),常用于编码器-解码器架构,可理解为”查字典”。
    • 自注意力(Self-Attention):在同一序列内部计算元素间的相关性,用于捕捉全局上下文,可理解为”照镜子”。
  3. 损失函数公式

    • 二分类交叉熵(Binary Cross-Entropy)L=[ylog(p)+(1y)log(1p)]\mathcal{L} = -\left[ y \log(p) + (1 - y) \log(1 - p) \right]
    • Focal Loss(聚焦难样本,缓解类别不平衡): FL(pt)=αt(1pt)γlog(pt)\text{FL}(p_t) = -\alpha_t (1 - p_t)^\gamma \log(p_t) 其中 ptp_t 为真实类别的预测概率,αt\alpha_t 为类别平衡因子,γ\gamma 为聚焦参数(通常取 2)。

问题5:梯度消失和梯度爆炸及其解决方法?#

  1. 梯度消失
    反向传播中梯度逐层衰减趋近于零,导致浅层参数难以更新。
    解决方法

    • 使用 ReLU 或其变体(导数在正区恒为 1);
    • 引入残差连接(ResNet)跳过部分层;
    • 应用批归一化(BN)稳定激活分布;
    • 采用合适的权重初始化(如 He 初始化)。
  2. 梯度爆炸
    梯度逐层放大,导致参数剧烈震荡甚至数值溢出。
    解决方法

    • 梯度裁剪(限制梯度范数上限);
    • 权重正则化(L1/L2 惩罚项抑制大权重);
    • 同样可借助 BN 和良好初始化间接缓解。

问题6:在卷积神经网络计算中为什么宽高常设为奇数?#

主要为了保持空间对称性。卷积核通常为奇数尺寸(如 3×3),配合 same padding 可使输出中心与输入中心严格对齐。若输入尺寸为奇数,则经对称卷积后输出仍为奇数,便于后续操作(如池化、上采样)维持结构一致性,避免特征图偏移或信息不对齐。


问题7:解释一下 TensorRT?#

TensorRT 是 NVIDIA 推出的高性能深度学习推理优化引擎。它将训练好的模型(如来自 PyTorch 或 TensorFlow)转换为高度优化的推理引擎,核心技术包括:

  • 层融合(Layer Fusion)消除冗余计算;
  • 支持 FP16/INT8 精度量化以降低显存与计算开销;
  • 针对特定 GPU 架构自动调优 CUDA kernel;
  • 最终实现低延迟、高吞吐的推理部署,广泛应用于边缘设备与数据中心。

问题8:解释一下 FFN?#

FFN(Feed-Forward Network)是 Transformer 中的核心组件之一,位于多头注意力之后。其结构通常为两层全连接网络加非线性激活(如 GELU):

FFN(x)=GELU(xW1+b1)W2+b2\text{FFN}(x) = \text{GELU}(xW_1 + b_1)W_2 + b_2

FFN 引入非线性变换,使模型能够学习复杂的函数映射,是提升模型表达能力和实现”智能理解”的关键环节。


问题9:解释准确率、召回率等指标?#

  1. 准确率(Accuracy):所有预测中正确的比例,适用于类别均衡场景。
  2. 精确率(Precision):预测为正类的样本中真实为正类的比例,回答”我说是正类,有多大概率是真的?”
  3. 召回率(Recall):所有真实正类中被正确找出的比例,回答”真正的正类,我找出了多少?”
  4. F1 Score:精确率与召回率的调和平均,综合衡量二者。
  5. ROC 曲线与 AUC:ROC 描绘不同阈值下真正率(TPR)与假正率(FPR)的权衡;AUC 为曲线下面积,取值范围 [0.5, 1],越大越好,0.5 表示随机猜测。

问题10:大模型中的 Encoder-Decoder 与 Decoder-Only 架构分别是什么?它们的核心区别在哪里?#

Encoder-Decoder 和 Decoder-Only 是当前大语言模型的两种主流架构,其核心区别在于任务范式与训练方式的不同。

在这里插入图片描述

  • Encoder-Decoder 架构(如 T5、BART)包含两个组件:编码器负责理解输入,解码器负责生成输出。它天然适用于“输入-输出”式的任务(如翻译、摘要、问答),但要求训练数据必须明确划分为“问题-答案”对,数据准备成本较高。

  • Decoder-Only 架构(如 GPT 系列)仅包含解码器,通过“文本续写”方式进行训练:给定一段上下文,预测下一个词。这种设计使得模型可以直接利用任意连续文本(如网页、书籍)进行自回归训练,无需人工标注或结构化切分,极大提升了数据利用效率和可扩展性。

Encoder-Decoder 擅长结构化理解与转换,而 Decoder-Only 擅长开放式生成;前者依赖成对数据,后者只需原始文本即可训练


🔒 此文档需要密码访问

请输入访问密码以查看内容