建站公司如何月入十万,厦门旅游网站,山东网页设计公司,怎样建移动网站前言
损失函数是用来评价模型的预测值和真实值一致程度#xff0c;损失函数越小#xff0c;通常模型的性能越好。不同的模型用的损失函数一般也不一样。损失函数主要是用在模型的训练阶段#xff0c;如果我们想让预测值无限接近于真实值#xff0c;就需要将损失值降到最低…前言
损失函数是用来评价模型的预测值和真实值一致程度损失函数越小通常模型的性能越好。不同的模型用的损失函数一般也不一样。损失函数主要是用在模型的训练阶段如果我们想让预测值无限接近于真实值就需要将损失值降到最低在这个过程中就需要引入损失函数而损失函数的选择又是十分关键。尤其是在目标检测中损失函数直接关乎到检测效果是否准确其中IOU损失函数目前主要应用于目标检测的领域其演变的过程如下IOU -- GIOU -- DIOU --CIOU损失函数每一种损失函数都较上一种损失函数有所提升下面来具体介绍这几种损失函数。
1 IoUIntersection over Union
1.1 IoU简介 UnitBox: An Advanced Object Detection Network IoU全称Intersection over Union交并比。IoU是一种测量在特定数据集中检测相应物体准确度的一个标准。只要是在输出中得出一个预测范围(bounding boxes)的任务都可以用IoU来进行测量。
IoU算法是使用最广泛的算法大部分的检测算法都是使用的这个算法。在目标识别中我们的预测框与实际框的某种比值就是IoU。 1.2 IoU公式 1.3 优点
IOU能够直观地反映出目标检测结果与真实情况之间的匹配程度。IOU具有尺度不变性由于IOU是基于重叠度量的它不受目标尺度和形状变换的影响这使得IOU适用于各种不同尺度和形状的目标检测任务。
1.4 缺点
当预测框和目标框不相交时即IOU0时不能反映两个目标之间距离的远近此时损失函数不可导IOU Loss 无法优化。当两个检测框大小相同两个IOU也相同IOU_Loss无法精确的反映两个框的重合度大小。 1.5 IoU代码
def IoU(box1, box2):b1_x1, b1_y1, b1_x2, b1_y2 box1b2_x1, b2_y1, b2_x2, b2_y2 box2xx1 np.maximum(b1_x1, b2_x1)yy1 np.maximum(b1_y1, b2_y1)xx2 np.minimum(b1_x2, b2_x2)yy2 np.minimum(b1_y2, b2_y2)w np.maximum(0.0, yy2 - yy1)h np.maximum(0.0, xx2 - xx1)inter w * hIoU inter/((b1_x2-b1_x1)*(b1_y2-b1_y1) (b2_x2-b2_x1)*(b2_y2-b2_y1) - inter)print(IoU: , IoU)if __name__ __main__:box1 np.array([100, 100, 210, 210])box2 np.array([150, 150, 230, 220])IoU(box1, box2)
2 GIoU Generalized Intersection over Union: A Metric and A Loss for Bounding BoxRegression 2.1 GIoU简介
通过上述分析当预测框和真实框不相交时IoU值为0导致很大范围内损失函数没有梯度。针对这一问题提出了GIoU作为损失函数。GIoU比IoU多了一个‘Generalized’能在更广义的层面上计算IoU。当检测框和真实框没有出现重叠的时候IoU的loss都是一样的因此GIoU就引入了最小封闭形状CC可以把AB包含在内在不重叠情况下能让预测框尽可能朝着真实框前进这样就可以解决检测框和真实框没有重叠的问题 。 2.2 GIoU公式
算法公式及其解释其实想法也很简单但这一步很难假如现在有两个box AB我们找到一个最小的封闭形状C让C可以把AB包含在内然后再计算C中没有覆盖A和B的面积占C总面积的比值最后用A与B的IoU减去这个比值GIoU计算公式如下 2.3 优点
GIOU_Loss中增加了相交尺度的衡量方式缓解了单纯IOU_Loss时的尴尬但是依然没有完全解决IoU存在的问题
2.4 缺点
对每个预测框与真实框均要去计算最小外接矩形计算及收敛速度受到限制状态1、2、3都是预测框在目标框内部且预测框大小一致的情况这时预测框和目标框的差集都是相同的因此这三种状态的GIoU值也都是相同的这时GIoU退化成了IoU无法区分相对位置关系。 2.5 GIoU代码
def GIoU(box1, box2):b1_x1, b1_y1, b1_x2, b1_y2 box1b2_x1, b2_y1, b2_x2, b2_y2 box2# IOUxx1 np.maximum(b1_x1, b2_x1)yy1 np.maximum(b1_y1, b2_y1)xx2 np.minimum(b1_x2, b2_x2)yy2 np.minimum(b1_y2, b2_y2)inter_w np.maximum(0.0, yy2 - yy1)inter_h np.maximum(0.0, xx2 - xx1)inter inter_w * inter_hUnion (b1_x2-b1_x1)*(b1_y2-b1_y1) (b2_x2-b2_x1)*(b2_y2-b2_y1) - inter# GIOUC_xx1 np.minimum(b1_x1, b2_x1)C_yy1 np.minimum(b1_y1, b2_y1)C_xx2 np.maximum(b1_x2, b2_x2)C_yy2 np.maximum(b1_y2, b2_y2)C_area (C_xx2 - C_xx1) * (C_yy2 - C_yy1)IOU inter / UnionGIOU IOU - abs((C_area-Union)/C_area)print(GIOU:, GIOU)if __name__ __main__:box1 np.array([100, 100, 210, 210])box2 np.array([150, 150, 230, 220])GIoU(box1, box2)
3 DIoU Distance-IoU Loss: Faster and Better Learning for Bounding Box Regression 3.1 简介
好的目标框回归函数应该考虑三个重要几何因素重叠面积、中心点距离长宽比。针对IoU和GIoU存在的问题作者从两个方面进行考虑
一如何最小化预测框和目标框之间的归一化距离二如何在预测框和目标框重叠时回归的更准确
针对第一个问题提出了DIoU_LossDistance_IoU_Loss从而使收敛速度更快性能更好。 3.2 DIoU公式 其中,分别表示预测框和真实框的中心点且表示两个中心点间的欧式距离表示能够同时包含预测框和真实框的最小闭包区域的对角线距离。 3.3 优点
DIOU在与目标框重叠时仍然可以为边界框提供移动方向;DIOU可以直接最小化两个目标框的距离因此比GIOU收敛快得多DIOU还可以替换普通的IOU评价策略应用于NMS中使得NMS得到的结果更加合理和有效。
3.4 缺点
DIoU考虑了重叠面积和中心点距离当目标框包裹预测框的时候直接度量2个框的距离因此DIoU收敛的更快但并没有考虑到长宽比。 比如上面三种情况目标框包裹预测框本来DIOU_Loss可以起作用。但预测框的中心点的位置都是一样的因此按照DIOU_Loss的计算公式三者的值都是相同的。
3.5 DIoU代码
def DIoU(box1, box2):b1_x1, b1_y1, b1_x2, b1_y2 box1b2_x1, b2_y1, b2_x2, b2_y2 box2# IOUxx1 np.maximum(b1_x1, b2_x1)yy1 np.maximum(b1_y1, b2_y1)xx2 np.minimum(b1_x2, b2_x2)yy2 np.minimum(b1_y2, b2_y2)inter_w np.maximum(0.0, xx2 - xx1)inter_h np.maximum(0.0, yy2 - yy1)inter inter_w * inter_hUnion (b1_x2 - b1_x1)*(b1_y2 - b1_y1) (b2_x2 - b2_x1)*(b2_y2 - b2_y1) - inter# DISTANCEC_xx1 np.minimum(b1_x1, b2_x1)C_yy1 np.minimum(b1_y1, b2_y1)C_xx2 np.maximum(b1_x2, b2_x2)C_yy2 np.maximum(b1_y2, b2_y2)C_area (C_xx2 - C_xx1) * (C_yy2 - C_yy1)center_b_x (b1_x1b1_x2)/2center_b_y (b1_y1b1_y2)/2center_gtb_x (b2_x1b2_x2)/2center_gtb_y (b2_y1b2_y2)/2center_distance (center_gtb_x-center_b_x)**2 (center_gtb_y-center_b_y)**2c_distance (C_xx2 - C_xx1)**2 (C_yy2 - C_yy1)**2IOU inter/UnionDIOU IOU - center_distance /c_distanceprint(DIOU:, DIOU)if __name__ __main__:box1 np.array([100, 100, 210, 210])box2 np.array([150, 150, 230, 220])DIoU(box1, box2)
4 CIoU Distance-IoU Loss: Faster and Better Learning for Bounding Box Regression 4.1 简介
DIoU考虑了重叠面积和中心点距离当目标框包裹预测框的时候直接度量2个框的距离因此DIoU收敛的更快但并没有考虑到长宽比。针对这个问题又提出了CIOU_Loss不对不说科学总是在解决问题中不断进步
CIoU就是在DIoU的基础上增加了检测框尺度的loss增加了长和宽的loss使得目标框回归更加稳定不会像IoU和GIoU一样出现训练过程中发散等问题。
4.2 CIoU公式 是用来衡量长宽比一致性的参数定义如下 4.3 优点
形状不变性 CIOU 损失函数在设计上考虑了目标框的形状信息通过引入修正因子使得损失对于不同形状的目标框更具鲁棒性。这使得模型更容易捕捉目标的准确形状。对定位精度的敏感性 CIOU 损失函数对目标框的位置预测更为敏感因为它考虑了目标框的对角线距离。这有助于提高目标检测模型在定位目标时的精度。全面性 CIOU 损失函数综合考虑了位置、形状和方向等多个因素使得模型更全面地学习目标框的特征。这有助于提高模型在复杂场景中的性能。
4.4 缺点 如果预测框和gt框的长宽比是相同的那么长宽比的惩罚项恒为0不合理观察CIoU中w, h相对于v的梯度发现这两个梯度是一对相反数也就是说w和h不能同时增大或减小这显然也不够合理的。
4.5 代码
def CIoU(box1, box2):b1_x1, b1_y1, b1_x2, b1_y2 box1b2_x1, b2_y1, b2_x2, b2_y2 box2# IOUxx1 np.maximum(b1_x1, b2_x1)yy1 np.maximum(b1_y1, b2_y1)xx2 np.minimum(b1_x2, b2_x2)yy2 np.minimum(b1_y2, b2_y2)inter_w np.maximum(0.0, xx2 - xx1)inter_h np.maximum(0.0, yy2 - yy1)inter inter_w*inter_hUnion (b1_x2-b1_x1)*(b1_y2-b1_y1) (b2_x2-b2_x1)*(b2_y2-b2_y1) - interIOU inter/UnionC_xx1 np.minimum(b1_x1, b2_x1)C_yy1 np.minimum(b1_y1, b2_y1)C_xx2 np.maximum(b1_x2, b2_x2)C_yy2 np.maximum(b1_y2, b2_y2)# DISTANCEcenter_b_x (b1_x1 b1_x2)/2center_b_y (b1_y1 b1_y2)/2center_gtb_x (b2_x1 b2_x2)/2center_gtb_y (b2_y1 b2_y2)/2C_area (C_xx2-C_xx1)*(C_yy2-C_yy1)Distance (center_gtb_x-center_b_x)**2 (center_gtb_y-center_b_y)**2Distance_area Distance/C_area**2# aspect ratiopred_w b1_y2 - b1_y1pred_h b1_x2 - b1_x1gt_w b2_y2 - b2_y1gt_h b2_x2 - b2_x1v (4/(np.pi)**2)*(np.arctan(gt_w/gt_h) - np.arctan(pred_w/pred_h))**2alpha v/((1-IOU) v)CIOU IOU - Distance_area - alpha*vprint(CIOU:, CIOU)if __name__ __main__:box1 np.array([100, 100, 210, 210])box2 np.array([150, 150, 230, 220])CIoU(box1, box2)