深度学习Tricks,第一时间送达

论文题目:《Alpha-IoU: A Family of Power Intersection over Union Losses for Bounding Box Regression》

论文地址:  https://arxiv.org/abs/2110.13675v2

1.论文简介:

文中,作者将现有的基于IoU Loss推广到一个新的Power IoU系列 Loss,该系列具有一个Power IoU项和一个附加的Power正则项,具有单个Power参数α。称这种新的损失系列为α-IoU Loss。在多目标检测基准和模型上的实验表明,α-IoU损失:

  • 可以显著地超过现有的基于IoU的损失;

  • 通过调节α,使检测器在实现不同水平的bbox回归精度方面具有更大的灵活性;

  • 对小数据集和噪声的鲁棒性更强。

实验结果表明,α(α>1)增加了high IoU目标的损失和梯度,进而提高了bbox回归精度。

power参数α可作为调节α-IoU损失的超参数以满足不同水平的bbox回归精度,其中α >1通过更多地关注High IoU目标来获得高的回归精度(即High IoU阈值)。

α对不同的模型或数据集并不过度敏感,在大多数情况下,α=3表现一贯良好。α-IoU损失家族可以很容易地用于改进检测器的效果,在干净或嘈杂的环境下,不会引入额外的参数,也不增加训练/推理时间。

2.相应代码:

def bbox_alpha_iou(box1, box2, x1y1x2y2=False, GIoU=False, DIoU=False, CIoU=False, EIoU=False, alpha=3, eps=1e-9):# Returns tsqrt_he IoU of box1 to box2. box1 is 4, box2 is nx4box2 = box2.T# Get the coordinates of bounding boxesif x1y1x2y2:  # x1, y1, x2, y2 = box1b1_x1, b1_y1, b1_x2, b1_y2 = box1[0], box1[1], box1[2], box1[3]b2_x1, b2_y1, b2_x2, b2_y2 = box2[0], box2[1], box2[2], box2[3]else:  # transform from xywh to xyxyb1_x1, b1_x2 = box1[0] - box1[2] / 2, box1[0] + box1[2] / 2b1_y1, b1_y2 = box1[1] - box1[3] / 2, box1[1] + box1[3] / 2b2_x1, b2_x2 = box2[0] - box2[2] / 2, box2[0] + box2[2] / 2b2_y1, b2_y2 = box2[1] - box2[3] / 2, box2[1] + box2[3] / 2# Intersection areainter = (torch.min(b1_x2, b2_x2) - torch.max(b1_x1, b2_x1)).clamp(0) * \(torch.min(b1_y2, b2_y2) - torch.max(b1_y1, b2_y1)).clamp(0)# Union Areaw1, h1 = b1_x2 - b1_x1, b1_y2 - b1_y1 + epsw2, h2 = b2_x2 - b2_x1, b2_y2 - b2_y1 + epsunion = w1 * h1 + w2 * h2 - inter + eps# change iou into pow(iou+eps) 加入α次幂# alpha iouiou = torch.pow(inter / union + eps, alpha)beta = 2 * alphaif GIoU or DIoU or CIoU or EIoU:# 两个框的最小闭包区域的width和heightcw = torch.max(b1_x2, b2_x2) - torch.min(b1_x1, b2_x1)  # convex (smallest enclosing box) widthch = torch.max(b1_y2, b2_y2) - torch.min(b1_y1, b2_y1)  # convex heightif CIoU or DIoU or EIoU:  # Distance or Complete IoU https://arxiv.org/abs/1911.08287v1# 最小外接矩形 对角线的长度平方c2 = cw ** beta + ch ** beta + eps  # convex diagonalrho_x = torch.abs(b2_x1 + b2_x2 - b1_x1 - b1_x2)rho_y = torch.abs(b2_y1 + b2_y2 - b1_y1 - b1_y2)# 两个框中心点之间距离的平方rho2 = (rho_x ** beta + rho_y ** beta) / (2 ** beta)  # center distanceif DIoU:return iou - rho2 / c2  # DIoUelif CIoU:  # https://github.com/Zzh-tju/DIoU-SSD-pytorch/blob/master/utils/box/box_utils.py#L47v = (4 / math.pi ** 2) * torch.pow(torch.atan(w2 / h2) - torch.atan(w1 / h1), 2)with torch.no_grad():alpha_ciou = v / ((1 + eps) - inter / union + v)# return iou - (rho2 / c2 + v * alpha_ciou)  # CIoUreturn iou - (rho2 / c2 + torch.pow(v * alpha_ciou + eps, alpha))  # CIoU# EIoU 在CIoU的基础上# 将预测框宽高的纵横比损失项 拆分成预测框的宽高分别与最小外接框宽高的差值# 加速了收敛提高了回归精度elif EIoU:rho_w2 = ((b2_x2 - b2_x1) - (b1_x2 - b1_x1)) ** betarho_h2 = ((b2_y2 - b2_y1) - (b1_y2 - b1_y1)) ** betacw2 = cw ** beta + epsch2 = ch ** beta + epsreturn iou - (rho2 / c2 + rho_w2 / cw2 + rho_h2 / ch2)# GIoU https://arxiv.org/pdf/1902.09630.pdfc_area = torch.max(cw * ch + eps, union)  # convex areareturn iou - torch.pow((c_area - union) / c_area + eps, alpha)  # GIoUelse:return iou  # torch.log(iou+eps) or iou

最后,将utils/loss.py文件中的iou=bbox_iou换iou=bbox_alpha_iou即可。


目标检测算法——助力涨点 | YOLOv5改进结合Alpha-IoU相关推荐

  1. YOLOv3目标检测算法——通俗易懂的解析

    目录 YOLOv3目标检测算法 前沿 一.YOLOv3 二.损失函数 YOLOv3目标检测算法 前沿 前两篇文章我们讲了下关于YOLOv1和YOLOv2的原理,有不懂的小伙伴可以回到前面再看看: YO ...

  2. 基于Grad-CAM与KL损失的SSD目标检测算法

    基于Grad-CAM与KL损失的SSD目标检测算法 人工智能技术与咨询 来源:<电子学报>,作者侯庆山等 摘 要: 鉴于Single Shot Multibox Detector (SSD ...

  3. 学习笔记之——基于深度学习的目标检测算法

    国庆假期闲来无事~又正好打算入门基于深度学习的视觉检测领域,就利用这个时间来写一份学习的博文~本博文主要是本人的学习笔记与调研报告(不涉及商业用途),博文的部分来自我团队的几位成员的调研报告(由于隐私 ...

  4. 目标检测论文解读复现之十六:基于改进YOLOv5的小目标检测算法

    前言 此前出了目标改进算法专栏,但是对于应用于什么场景,需要什么改进方法对应与自己的应用场景有效果,并且多少改进点能发什么水平的文章,为解决大家的困惑,此系列文章旨在给大家解读最新目标检测算法论文,帮 ...

  5. 干货|基于深度学习的目标检测算法面试必备(RCNN~YOLOv5)

    点上方计算机视觉联盟获取更多干货 仅作学术分享,不代表本公众号立场,侵权联系删除 转载于:作者丨不出名的小金@知乎(已授权) 来源丨https://zhuanlan.zhihu.com/p/35406 ...

  6. YOLO目标检测算法轻量化改进的过程记录

    一.前言 本文主要记录了在毕设期间关于将目标检测算法部署至嵌入式设备(jetson nano)上的过程及对YOLO算法轻量化及精度提升的一些修改策略(改的并不多,基本都是重复组合,毕竟我是个菜鸡). ...

  7. 目标检测论文解读复现之十五:基于YOLOv5的光学遥感图像舰船 目标检测算法

    前言 此前出了目标改进算法专栏,但是对于应用于什么场景,需要什么改进方法对应与自己的应用场景有效果,并且多少改进点能发什么水平的文章,为解决大家的困惑,此系列文章旨在给大家解读最新目标检测算法论文,帮 ...

  8. 目标检测论文解读复现之五:改进YOLOv5的SAR图像舰船目标检测

    目标检测论文解读复现 文章目录 目标检测论文解读复现 前言 一.摘要 二.网络模型及核心创新点 三.应用数据集 四.实验效果(部分展示) 五.实验结论 六.投稿期刊介绍 前言 此前出了目标改进算法专栏 ...

  9. 【快速入门】YOLOv5目标检测算法

    文章目录 一.YOLOv5简介 二.网络结构 1.Input 2.Backbone 3.Neck 4.Head 三.改进方法 1.自适应锚框计算 2.自适应灰度填充 四.性能表现 五.YOLOv5入门 ...

最新文章

  1. java js关键字_js中的instanceof关键字
  2. 数据结构遍历顺序栈_链栈的初始化与遍历
  3. iis日志php,win2008 iis7开启日志按日期分割
  4. 计算机学院特色游戏,网络游戏七大特点浅析
  5. 第一百零四节,JavaScript时间与日期
  6. Vue—基础概念—指令
  7. Vue学习(增删改查、ES6模块化概念)-学习笔记
  8. activity-启动动画的设定(下面弹出出现,弹入下面消失)
  9. 慌的一批!新手妹子一个命令把公司服务器数据删没了...
  10. SAS在金融中的应用三
  11. mysql 拷贝记录吗_MySQL-复制记录和复制表
  12. 【c++】笔记:输入带空格的字符串
  13. HTML+CSS+JS实现 ❤️3D旋转魔方图片相册特效❤️
  14. 遥感图像预处理-几何校正
  15. [内附完整源码和文档] 基于Java的人事档案管理系统
  16. GBASE 8s UDR内存管理_01_mi_alloc
  17. 二叉树(1.二叉树的概念堆)
  18. MPU和MMU、MPU和MCU的区别
  19. 51单片机点阵屏实现俄罗斯方块
  20. IBUFDS、IBUFGDS和OBUFDS

热门文章

  1. 给如两个日期,计算工期
  2. Java核心技术卷一学习笔记1
  3. 梅科尔工作室-崔启凡-鸿蒙笔记3
  4. 【转载】产品经理入门案例分析——锤子手机策略
  5. android ril.java_Android-RIL流程分析
  6. UE风格化Day20-光照函数/关于相机的使用
  7. mybase修改默认的markdown样式
  8. wxPython wx.Font类的纠正 · wx.Font教程
  9. echarts图表之去掉折线图的折点圆圈,实测有效
  10. uni-app真机预览调试:关于ios系统真机调试的操作步骤