目标检测基础主要包括四方面。
1.边界框
边界框是正好能够包含物体的矩形框。
检测任务需要同时预测物体的类别和位置,通常使用边界框来表示物体的位置。
通常有两种边界框:
1:xyxy,(x1,y1,x2,y2),用两个点坐标来表示矩形框的位置,(x1,y1)表示矩形的左上角坐标,(x2,y2)表示右下角坐标。
2:xywh,(x,y,w,h),用一个中心点以及矩形框的宽度与高度来表示(x,y)表示矩形框的中心点坐标,w,h则分别表示矩形框的宽度与高度。
2.锚框
锚框是用于生成候选区域的一种技术。锚框通过先设定好大小和形状,预定义一些矩形框,分布在图像的不同位置和不同尺度上,通过锚框与图像中的实际目标进行匹配得到一系列的候选区域。
- 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)
首先是定义了一个函数draw_rectangle,用于绘制矩形框,该函数通过接受一个坐标轴对象currentAxis,边界框坐标数组bbox,以及边框线条颜色edgecolor、填充颜色facecolor等参数。函数内部使用了patches.Rectangle函数创建矩形对象,并将其添加到坐标轴中。
- # 使用xyxy格式表示物体真实框
- bbox1 = [214.29, 325.03, 399.82, 631.37]
- bbox2 = [40.93, 141.1, 226.99, 515.73]
- bbox3 = [247.2, 131.62, 480.0, 639.32]
- currentAxis=plt.gca()
- draw_rectangle(currentAxis, bbox1, edgecolor='r')
- draw_rectangle(currentAxis, bbox2, edgecolor='r')
- draw_rectangle(currentAxis, bbox3,edgecolor='r')
接着是绘制物体真实框的代码,分别定义了三个边界框的坐标数组bbox1,bbox2,bbox3。在获取当前坐标轴对象后,分别调用draw_rectangle函数在照片上绘制了三个矩形框,表示物体的真实框。
- def draw_anchor_box(center, length, scales, ratios, img_height, img_width):
- """
- 以center为中心,产生一系列锚框
- 其中length指定了一个基准的长度
- scales是包含多种尺寸比例的list
- ratios是包含多种长宽比的list
- img_height和img_width是图片的尺寸,生成的锚框范围不能超出图片尺寸之外
- """
- bboxes = []