美文网首页机器学习python干货python专题
目标检测算法中的真实框、预测框和锚框

目标检测算法中的真实框、预测框和锚框

作者: LabVIEW_Python | 来源:发表于2021-03-02 07:46 被阅读0次

目标检测算法中有几种标识物体位置的框,本文依次介绍:

  • 边界框,bounding box,用于标识物体的位置,常用格式有左上右下坐标,即xyxy;中心宽高,即xywh。
  • 真实框,Ground truth box, 是人工标注的位置,存放在标注文件中
  • 预测框,Prediction box, 是由目标检测模型计算输出的框
  • 锚框,Anchor box,根据数据集的对象位置类聚出来,用于预测框计算做参考;基于这个参考,算法生成的预测框仅需要在这个锚框的基础上进行“精修或微调fine-tuning”即可,这样算法可以收敛的更快,检测效果更好。

范例程序和运行结果,如下所示:

# 画图展示如何绘制边界框和锚框
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.patches as patches
from matplotlib.image import imread
import math

# 定义画矩形框的程序    
def draw_rectangle(currentAxis, bbox, edgecolor = 'k', facecolor = 'y', fill=False, linestyle='-'):
    # currentAxis,坐标轴,通过plt.gca()获取
    # bbox,边界框,包含四个数值的list, [x1, y1, x2, y2]
    # edgecolor,边框线条颜色
    # facecolor,填充颜色
    # fill, 是否填充
    # linestype,边框线型
    # patches.Rectangle需要传入左上角坐标、矩形区域的宽度、高度等参数
    rect=patches.Rectangle((bbox[0], bbox[1]), bbox[2]-bbox[0]+1, bbox[3]-bbox[1]+1, linewidth=1,
                           edgecolor=edgecolor,facecolor=facecolor,fill=fill, linestyle=linestyle)
    currentAxis.add_patch(rect)

    
plt.figure(figsize=(10, 10))

filename = 'dog.jpg'
im = imread(filename)
plt.imshow(im)

# 使用xyxy格式表示物体真实框
bbox1 = [196, 71, 308, 280]
bbox2 = [190, 66, 300, 275]
bbox3 = [247.2, 131.62, 480.0, 639.32]

currentAxis=plt.gca()

draw_rectangle(currentAxis, bbox1, edgecolor='g')
draw_rectangle(currentAxis, bbox2, edgecolor='r')

# 绘制锚框
def draw_anchor_box(center, length, scales, ratios, img_height, img_width):
    """
    以center为中心,产生一系列锚框
    其中length指定了一个基准的长度
    scales是包含多种尺寸比例的list
    ratios是包含多种长宽比的list
    img_height和img_width是图片的尺寸,生成的锚框范围不能超出图片尺寸之外
    """
    bboxes = []
    for scale in scales:
        for ratio in ratios:
            h = length*scale*math.sqrt(ratio)
            w = length*scale/math.sqrt(ratio) 
            x1 = max(center[0] - w/2., 0.)
            y1 = max(center[1] - h/2., 0.)
            x2 = min(center[0] + w/2. - 1.0, img_width - 1.0)
            y2 = min(center[1] + h/2. - 1.0, img_height - 1.0)
            print(center[0], center[1], w, h)
            bboxes.append([x1, y1, x2, y2])

    for bbox in bboxes:
        draw_rectangle(currentAxis, bbox, edgecolor = 'b')

img_height = im.shape[0]
img_width = im.shape[1]        
draw_anchor_box([252., 175.5], 100., [2.0], [0.5, 1.0, 2.0], img_height, img_width)
   
plt.show()
真实框、预测框和锚框

相关文章

  • 深度学习目标检测算法中的锚框(Anchor Box)是什么?

    深度学习目标检测算法分成基于锚框的和无锚框的,如下图所示 所谓锚框,就是目标检测算法中,以锚点为中心,由算法预定义...

  • 目标检测基础;图像风格迁移;图像分类案例 2020-02-25

    目标检测基础 目标检测和边界框 边界框 锚框 目标检测算法通常会在输入图像中采样大量的区域,然后判断这些区域中是否...

  • 目标检测算法中的真实框、预测框和锚框

    目标检测算法中有几种标识物体位置的框,本文依次介绍: 边界框,bounding box,用于标识物体的位置,常用格...

  • 锚框

    (一)锚框 如今一大类的目标检测算法是基于锚框。所谓锚框,就是有很多个规定出来的称之为锚框的区域,锚框是猜出来的(...

  • 目标检测:IOU计算

      在目标检测中,经常需要计算预测回归框和真实回归框的交并比(Intersection Over Union,IO...

  • 目标检测基础

    1. 目标检测和边界框 实际上是人工生成一系列有限个框,然后给这些框打标签 2. 锚框 目标检测算法通常会在输入图...

  • 深度学习-3

    1.目标检测基础 生成边界框 什么是锚框 对于一个检测图像,会有大量的采样区域,并调整边缘使得能够更准确预测目标的...

  • 扩展:目标检测基础

    添加边界框 锚框 目标检测算法通常会在输入图像中采样大量的区域,然后判断这些区域中是否包含我们感兴趣的目标,并调整...

  • 单发多框检测(SSD)

    (一)代码实现 单发多框检测(SSD) (1)多尺度锚框 可以先看看上一篇对目标检测算法的介绍,可能会有帮助。【目...

  • 目标检测算法

    (一)目标检测算法的介绍 (1)R-CNN 算法的核心是,首先使用启发式搜索算法来选择锚框。使用与训练模型对锚框内...

网友评论

    本文标题:目标检测算法中的真实框、预测框和锚框

    本文链接:https://www.haomeiwen.com/subject/eqkgfltx.html