建设网站答辩情况,腾讯云wordpress建站教程,杭州工程招标网,网站 不稳定交并比(Intersection-over-Union#xff0c;IoU)#xff0c;目标检测中使用的一个概念#xff0c;我们在进行目标检测算法测试时#xff0c;重要的指标#xff0c;是产生的预测框(candidate bound)与标记框(ground truth bound)的交叠率#xff0c;即它们的交集与并集的比…交并比(Intersection-over-UnionIoU)目标检测中使用的一个概念我们在进行目标检测算法测试时重要的指标是产生的预测框(candidate bound)与标记框(ground truth bound)的交叠率即它们的交集与并集的比值。最理想情况是完全重叠即比值为1。通常我们所说的目标检测检测的框是规则的矩形框计算IOU也非常简单一般两种方法两个矩形的宽之和减去组合后的矩形的宽就是重叠矩形的宽同比重叠矩形的高。右下角的最小值减去左上角的最大值就是重叠矩形的宽同比高。上述规则四边形(矩形)IOU计算方式一的 Python实现def calculate_regular_iou(rec1, rec2):computing IoU:param rec1: (y0, x0, y1, x1), which reflects(top,left, bottom,right):param rec2: (y0, x0, y1, x1):return: scala valueofIoUS_rec1 (rec1[2] - rec1[0]) * (rec1[3] - rec1[1])S_rec2 (rec2[2] - rec2[0]) * (rec2[3] - rec2[1])sum_area S_rec1 S_rec2left_line max(rec1[1], rec2[1])right_line min(rec1[3], rec2[3])top_line max(rec1[0], rec2[0])bottom_line min(rec1[2], rec2[2])if left_line right_line ortop_line bottom_line:return0else:intersect (right_line - left_line) * (bottom_line - top_line)return(intersect/ (sum_area -intersect)) * 1.0if __name__ __main__:# (top,left, bottom,right)rect1 [551, 26, 657, 45]rect2 [552, 27, 672, 46]iou calculate_regular_iou(rect1, rect2)上述规则四边形(矩形)IOU计算方式二的 Python 实现def compute_regular_iou_other(rec1, rec2):computing IoU:param rec1: (y0, x0, y1, x1), which reflects(top,left, bottom,right):param rec2: (y0, x0, y1, x1):return: scala valueofIoUareas1 (rec1[3] - rec1[1]) * (rec1[2] - rec1[0])areas2 (rec2[3] - rec2[1]) * (rec2[2] - rec2[0])leftmax(rec1[1],rec2[1])rightmin(rec1[3],rec2[3])topmax(rec1[0], rec2[0])bottom min(rec1[2], rec2[2])w max(0,right-left)h max(0, bottom -top)returnw*h / (areas2 areas1 - w*h)if __name__ __main__:# (top,left, bottom,right)rect1 [551, 26, 657, 45]rect2 [552, 27, 672, 46]iou compute_regular_iou_other(rect1, rect2)但是对于不规则四边形就不能通过上述这两种方式来计算这里可以使用Python的 Shapely 库实现Python 实现如下import numpyasnpimport shapelyfromshapely.errors import TopologicalErrorfromshapely.geometry import Polygon,MultiPointdef to_polygon(quadrilateral)::param quadrilateral: 四边形四个点坐标的一维数组表示[x,y,x,y....]:return: 四边形二维数组, Polygon四边形对象# 四边形二维数组表示quadrilateral_array np.array(quadrilateral).reshape(4, 2)# Polygon四边形对象会自动计算四个点最后四个点顺序为左上 左下 右下 右上 左上quadrilateral_polygon Polygon(quadrilateral_array).convex_hullreturnquadrilateral_array, quadrilateral_polygondef calculate_iou(actual_quadrilateral, predict_quadrilateral)::param actual_quadrilateral: 预测四边形四个点坐标的一维数组表示[x,y,x,y....]:param predict_quadrilateral: 期望四边形四个点坐标的一维数组表示[x,y,x,y....]:return:# 预测四边形二维数组, 预测四边形 Polygon 对象actual_quadrilateral_array, actual_quadrilateral_polygon to_polygon(actual_quadrilateral)# 期望四边形二维数组, 期望四边形 Polygon 对象predict_quadrilateral_array, predict_quadrilateral_polygon to_polygon(predict_quadrilateral)# 合并两个box坐标变为8*2 便于后面计算并集面积union_poly np.concatenate((actual_quadrilateral_array, predict_quadrilateral_array))# 两两四边形是否存在交集inter_status actual_quadrilateral_polygon.intersects(predict_quadrilateral_polygon)# 如果两四边形相交则进iou计算if inter_status:try:# 交集面积inter_area actual_quadrilateral_polygon.intersection(predict_quadrilateral_polygon).area# 并集面积 计算方式一#union_area poly1.area poly2.area - inter_area# 并集面积 计算方式二union_area MultiPoint(union_poly).convex_hull.area# 若并集面积等于0,则iou 0if union_area 0:iou 0else:# 第一种计算的是: 交集部分/包含两个四边形最小多边形的面积iou float(inter_area) / union_area# 第二种 交集 / 并集(常见矩形框IOU计算方式)# ioufloat(inter_area) /(poly1.areapoly2.area-inter_area)exceptshapely.errors.TopologicalError :print(shapely.errors.TopologicalError occured, iou set to 0)iou 0else:iou 0returniouif __name__ __main__:actual_quadrilateral [908, 215, 934, 312, 752, 355, 728, 252]predict_quadrilateral [923, 308, 758, 342, 741, 262, 907, 228]iou calculate_iou(actual_quadrilateral, predict_quadrilateral)print(iou)避坑指南运行代码抛出 WinError 126 错误在使用Python中的使用 import shapely 时不会报错但是在使用 from shapely.geometry import Polygon,MultiPoint 会报错报错的详细信息如下图报错的主要原因就出现在 geos_c.dll 这里看了网上很多文章大部分说是由于 geos_c.dll 文件缺失导致报错。尝试在网上找了几个 geos_c.dll 文件放到 C:\Windows\System32 下仍然没有解决问题。最终解决方案通过 pip uninstall Shapely 卸载原来安装的 Shapely 然后 在 https://www.lfd.uci.edu/~gohlke/pythonlibs/#shapely如上图这里下载对应版本的whl文件安装安装这个whl 就可以解决该问题。whl文件下载404错误在 https://www.lfd.uci.edu/~gohlke/pythonlibs/#shapely 下载制定版本的whl时出现404错误。如下。此时改用 chrome 浏览器重新尝试下载即可解决。【责任编辑未丽燕 TEL(010)68476606】点赞 0