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

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坐标的预测都是同时完成,它们共享前一层的参数。实验表明,解耦合检测头能加快模型收敛速度、提高检测精度,同时也会带来一点额外的参数量和计算成本。

相关推荐
回眸&啤酒鸭2 分钟前
【回眸】OpenSwarm 多智能体协作系统实战指南
大数据·前端·人工智能
博图光电11 分钟前
Libra 27105相关技术参数
人工智能·数码相机
IT_陈寒35 分钟前
SpringBoot自动配置差点让我加班到凌晨
前端·人工智能·后端
yumgpkpm1 小时前
Acceldata ODP(Open Data Platform)3.3.6.4(RHEL9)保姆级完整安装手册
大数据·人工智能·hive·hadoop·kafka·hbase·cloudera
程序员cxuan1 小时前
腾讯又来一王炸,开源版 WorkBuddy 太夯了!
人工智能·后端·程序员
邓工说电1 小时前
智慧断路器安全吗?数据加密、离线保护与合规认证全解读
大数据·数据库·人工智能·智能断路器·炜晔科技
阿里云大数据AI技术1 小时前
Lance 数据检索怎么选,当然阿里云 Milvus 向量湖
人工智能
出海客1 小时前
跨境电商多语言客服知识库怎么建:资料结构、检索边界与人工升级
大数据·人工智能
xsd202411181 小时前
从自主导航到视觉读表:一台工业巡检机器人的全栈技术链路拆解
人工智能
袁哥大话安全1 小时前
巡隐WEBSHELL扫描软件
人工智能·安全·web