计算机视觉一些面试基础整理(持续更新)

1.IOU的原理及伪代码实现:

图像示例

原理:

IoU(Intersection over Union)是目标检测中常用的评价指标,用于衡量预测边界框(Bounding Box)与真实边界框之间的重叠程度。IoU 的计算方式是通过目标框的交集面积除以它们的并集面积。

IoU 的数学定义如下:

IoU(Intersection over Union)是目标检测中常用的评价指标,用于衡量预测边界框与真实边界框之间的重叠程度。IoU 的计算方式是通过目标框的交集面积除以它们的并集面积。

以下是 IoU 的伪代码:

python 复制代码
def calculate_iou(boxA, boxB):
    # boxA 和 boxB 分别表示两个边界框,每个边界框是一个四元组 (x, y, w, h),表示左上角坐标和宽高
    # 计算交集的坐标
    xA = max(boxA[0], boxB[0])
    yA = max(boxA[1], boxB[1])
    xB = min(boxA[0] + boxA[2], boxB[0] + boxB[2])
    yB = min(boxA[1] + boxA[3], boxB[1] + boxB[3])
    # 计算交集和并集的面积
    intersection_area = max(0, xB - xA + 1) * max(0, yB - yA + 1)
    boxA_area = (boxA[2] + 1) * (boxA[3] + 1)
    boxB_area = (boxB[2] + 1) * (boxB[3] + 1)
    union_area = boxA_area + boxB_area - intersection_area
    # 计算 IoU
    iou = intersection_area / union_area
    
    return iou

2.非极大值抑制(NMS)

NMS是一种用于去除冗余边界框的技术,通常用于目标检测任务。其基本原理是在一系列具有置信度得分的边界框中,选择置信度最高的边界框,然后移除与该边界框重叠度过高的其他边界框,以保留最具代表性的框。

NMS 的伪代码简要阐述如下:

输入: 一组边界框 boxes,每个边界框对应的置信度得分 scores,以及两个阈值 conf_threshold(置信度阈值)和 iou_threshold(IoU 阈值)。

按照置信度得分排序: 将边界框按照其置信度得分从高到低进行排序,得到排序后的索引列表 sorted_indices。

初始化结果列表: 创建一个空列表 selected_indices 用于存储最终选定的边界框的索引。

循环选择边界框: 从排序后的列表中选择置信度最高的边界框,将其索引加入 selected_indices 中。然后,计算该边界框与剩余边界框的 IoU(交并比),移除与该边界框重叠度过高的其他边界框。

迭代过程: 重复上述步骤,直到排序后的列表中没有边界框。

输出: 返回 selected_indices,即最终选定的边界框的索引列表。

python 复制代码
def non_max_suppression(boxes, scores, conf_threshold=0.5, iou_threshold=0.5):
    # boxes: 边界框坐标列表 [(x1, y1, x2, y2), ...]
    # scores: 对应边界框的置信度列表 [score1, score2, ...]
    # conf_threshold: 置信度阈值
    # iou_threshold: IoU 阈值

    selected_indices = []
    
    # 按照置信度对边界框进行排序
    sorted_indices = sorted(range(len(scores)), key=lambda i: scores[i], reverse=True)

    while len(sorted_indices) > 0:
        # 选出置信度最高的边界框
        best_box_index = sorted_indices[0]
        selected_indices.append(best_box_index)

        # 计算最高置信度边界框与其它边界框的 IoU
        other_indices = sorted_indices[1:]
        indices_to_remove = []
        for idx in other_indices:
            iou = calculate_iou(boxes[best_box_index], boxes[idx])
            if iou > iou_threshold:
                indices_to_remove.append(idx)

        # 移除与最高置信度边界框重叠度过高的边界框
        for idx in indices_to_remove:
            sorted_indices.remove(idx)

        # 移除已处理的最高置信度边界框
        sorted_indices = sorted_indices[1:]

    return selected_indices

3.decoupled head"解耦头"

在目标检测中,Decouple Head的实现主要是将目标位置和类别信息的提取分开处理。

具体来说,Decouple Head会将特征图分成不同的分支,每个分支负责提取目标位置或类别信息。这些分支分别进行训练,然后对提取的特征进行融合,生成最终的检测结果。

Decoupled Head的优势在于可以更好地处理不同尺度和精细度的语义信息。通过将像素级的预测与特征提取分开,可以更好地利用底层和高层特征之间的语义信息,从而提高分割的准确性和细节保留能力。

yolox和之前的yolo系列的分类头的区别,对于由backbone得到的特征图,经过一系列降维后,在之前的yolo系列中,关于分类的概率和bbox坐标的预测都是同时完成,它们共享前一层的参数。实验表明,解耦合检测头能加快模型收敛速度、提高检测精度,同时也会带来一点额外的参数量和计算成本。

相关推荐
ASKED_20192 小时前
从排序到生成:腾讯广告算法大赛 2025 baseline解读
人工智能·算法
阿杰学AI2 小时前
AI核心知识115—大语言模型之 自监督学习(简洁且通俗易懂版)
人工智能·学习·ai·语言模型·aigc·监督学习·自监督学习
IT_陈寒2 小时前
为什么我的JavaScript异步回调总是乱序执行?
前端·人工智能·后端
Zzj_tju2 小时前
大语言模型技术指南:Transformer 为什么能成为基础架构?核心模块与参数怎么理解
人工智能·语言模型·transformer
gorgeous(๑>؂<๑)2 小时前
【CVPR26-韩国科学技术院】令牌扭曲技术助力多模态大语言模型从邻近视角观察场景
人工智能·语言模型·自然语言处理
AC赳赳老秦3 小时前
OpenClaw email技能:批量发送邮件、自动回复,高效处理工作邮件
运维·人工智能·python·django·自动化·deepseek·openclaw
用户7824520807793 小时前
一些容易混淆的点(个人记录)
人工智能
胡志辉3 小时前
OpenClaw 教程:新 Mac 从 0 配到国产 AI、飞书微信和无人值守
人工智能·神经网络
机器之心3 小时前
全球第一,13个SOTA!我们找到了龙虾界掌管GUI的神
人工智能·openai
AI问答工程师3 小时前
Meta Muse Spark 的"思维压缩"到底是什么?我用 Python 复现了核心思路(附代码)
人工智能·python