购买idc网站服务器,小程序制作多少钱,效果建网站的公,龙华企业网站建设之前的博客也有对YOLO11的损失函数进行过源码分析#xff0c;可以参考#xff1a;YOLOv11小白的进击之路#xff08;六#xff09;创新YOLO的iou及损失函数时的源码分析_yolov11的损失函数是什么-CSDN博客最近在做小目标检测的时候注意到了NWD损失函数#xff0c;这里对其…之前的博客也有对YOLO11的损失函数进行过源码分析可以参考YOLOv11小白的进击之路六创新YOLO的iou及损失函数时的源码分析_yolov11的损失函数是什么-CSDN博客最近在做小目标检测的时候注意到了NWD损失函数这里对其源码进行分析结合YOLO11更改损失函数后在我自己的数据集上有一定的提升但是效果并不是很明显可能我的数据集目标尺寸并没有特别小这里留待之后讨论。
NWD
NWD是一种用于目标检测的损失函数通过将边界框建模为高斯分布并计算两个分布之间的Wasserstein距离来衡量相似性。具体步骤包括 边界框参数化将边界框 R(cx,cy,w,h)中心点坐标和宽高转换为高斯分布其中均值为中心点 (cx,cy)协方差矩阵由宽高 (w,h)决定。 Wasserstein距离计算衡量两个分布之间的差异公式为 W2∥c1−c2∥2∥w1−w2∥2∥h1−h2∥2W2∥c1−c2∥2∥w1−w2∥2∥h1−h2∥2其中 c为中心点w,h 为宽高。 归一化相似度通过指数归一化将距离转换为相似度值 NWDexp(−W/C)其中 C常数。 优势
NWD相较于传统IoU交并比的改进主要体现在 对小目标更友好对小尺度目标的检测更稳定避免因像素级偏差导致的IoU剧烈波动。 处理不重叠框的能力即使两个边界框完全不重叠NWD仍能有效度量相似性而IoU此时为0无法提供梯度。 尺度不变性对目标尺寸变化不敏感更适合多尺度检测任务。 应用场景 小目标检测如卫星图像、医学影像中的微小物体检测。 密集场景检测在目标重叠或遮挡严重时NWD能更平滑地优化模型
源码分析
def wasserstein_loss(pred, target, eps1e-7, constant12.8):rImplementation of paper Enhancing Geometric Factors intoModel Learning and Inference for Object Detection and InstanceSegmentation https://arxiv.org/abs/2005.03572_.Code is modified from https://github.com/Zzh-tju/CIoU.Args:pred (Tensor): Predicted bboxes of format (x_min, y_min, x_max, y_max),shape (n, 4).target (Tensor): Corresponding gt bboxes, shape (n, 4).eps (float): Eps to avoid log(0).Return:Tensor: Loss tensor.b1_x1, b1_y1, b1_x2, b1_y2 pred.chunk(4, -1)b2_x1, b2_y1, b2_x2, b2_y2 target.chunk(4, -1)w1, h1 b1_x2 - b1_x1, b1_y2 - b1_y1 epsw2, h2 b2_x2 - b2_x1, b2_y2 - b2_y1 epsb1_x_center, b1_y_center b1_x1 w1 / 2, b1_y1 h1 / 2b2_x_center, b2_y_center b2_x1 w2 / 2, b2_y1 h2 / 2center_distance (b1_x_center - b2_x_center) ** 2 (b1_y_center - b2_y_center) ** 2 epswh_distance ((w1 - w2) ** 2 (h1 - h2) ** 2) / 4wasserstein_2 center_distance wh_distancereturn torch.exp(-torch.sqrt(wasserstein_2) / constant)
我们现将参数分解
b1_x1, b1_y1, b1_x2, b1_y2 pred.chunk(4, -1)
b2_x1, b2_y1, b2_x2, b2_y2 target.chunk(4, -1) 目的将预测框pred和真实框target的坐标拆分成左上角x1, y1和右下角x2, y2。 chunk(4, -1)沿最后一个维度即列方向将每个框的4个坐标拆分成4个变量。例如pred的格式是(x_min, y_min, x_max, y_max)拆分成4个张量后分别对应这四个坐标值。
再计算框的宽高
w1, h1 b1_x2 - b1_x1, b1_y2 - b1_y1 eps
w2, h2 b2_x2 - b2_x1, b2_y2 - b2_y1 eps 目的计算预测框和真实框的宽度w和高度h。 eps为了防止宽高为0时出现数值不稳定例如除零错误加上一个极小值eps默认为1e-7。
计算中心点坐标
b1_x_center, b1_y_center b1_x1 w1 / 2, b1_y1 h1 / 2
b2_x_center, b2_y_center b2_x1 w2 / 2, b2_y1 h2 / 2 目的通过左上角坐标和宽高计算预测框和真实框的中心点坐标。
计算中心点距离
center_distance (b1_x_center - b2_x_center)**2 (b1_y_center - b2_y_center)**2 eps 目的计算两个框中心点的欧氏距离的平方。
计算宽高距离
wh_distance ((w1 - w2)**2 (h1 - h2)**2) / 4 目的计算两个框宽高差异的平方并除以4对应高斯分布协方差矩阵的推导。
合并得到Wasserstein距离
wasserstein_2 center_distance wh_distance 目的将中心点距离和宽高距离相加得到最终的Wasserstein距离平方。 数学依据 将边界框建模为高斯分布后两个分布的Wasserstein距离平方可以分解为 其中协方差矩阵 ΣΣ 由宽高决定。
最后归一化损失值
return torch.exp(-torch.sqrt(wasserstein_2) / constant) 目的将Wasserstein距离转换为相似度值取值范围0~1作为损失函数。 步骤 开平方torch.sqrt(wasserstein_2) 得到真正的Wasserstein距离 WW。 归一化通过指数函数归一化公式为 NWDexp(−W/C)其中 C 是归一化常数 损失值NWD越大表示两个框越相似因此损失函数需要最小化 1−NWD。这里我们直接返回相似度值实际使用时可以用 1 - NWD 作为损失。
最后
欢迎一起交流探讨 ~ 砥砺奋进共赴山海
文章推荐YOLOv11小白的进击之路二从YOLO类-DetectionModel类出发看YOLO代码运行逻辑..._if isinstance(m, detect,afpn4head): # includes all-CSDN博客
YOLOv11小白的进击之路七训练输出日志解读以及训练OOM报错解决办法_yolo日志-CSDN博客