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

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

相关推荐
皓741几秒前
服饰电商行业知识管理的创新实践与知识中台的重要性
大数据·人工智能·科技·数据分析·零售
985小水博一枚呀38 分钟前
【深度学习滑坡制图|论文解读3】基于融合CNN-Transformer网络和深度迁移学习的遥感影像滑坡制图方法
人工智能·深度学习·神经网络·cnn·transformer
AltmanChan39 分钟前
大语言模型安全威胁
人工智能·安全·语言模型
985小水博一枚呀43 分钟前
【深度学习滑坡制图|论文解读2】基于融合CNN-Transformer网络和深度迁移学习的遥感影像滑坡制图方法
人工智能·深度学习·神经网络·cnn·transformer·迁移学习
数据与后端架构提升之路1 小时前
从神经元到神经网络:深度学习的进化之旅
人工智能·神经网络·学习
爱技术的小伙子1 小时前
【ChatGPT】如何通过逐步提示提高ChatGPT的细节描写
人工智能·chatgpt
深度学习实战训练营2 小时前
基于CNN-RNN的影像报告生成
人工智能·深度学习
昨日之日20064 小时前
Moonshine - 新型开源ASR(语音识别)模型,体积小,速度快,比OpenAI Whisper快五倍 本地一键整合包下载
人工智能·whisper·语音识别
浮生如梦_4 小时前
Halcon基于laws纹理特征的SVM分类
图像处理·人工智能·算法·支持向量机·计算机视觉·分类·视觉检测
深度学习lover4 小时前
<项目代码>YOLOv8 苹果腐烂识别<目标检测>
人工智能·python·yolo·目标检测·计算机视觉·苹果腐烂识别