目标检测算法——助力涨点 | YOLOv5改进结合Alpha-IoU
深度学习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相关推荐
- YOLOv3目标检测算法——通俗易懂的解析
目录 YOLOv3目标检测算法 前沿 一.YOLOv3 二.损失函数 YOLOv3目标检测算法 前沿 前两篇文章我们讲了下关于YOLOv1和YOLOv2的原理,有不懂的小伙伴可以回到前面再看看: YO ...
- 基于Grad-CAM与KL损失的SSD目标检测算法
基于Grad-CAM与KL损失的SSD目标检测算法 人工智能技术与咨询 来源:<电子学报>,作者侯庆山等 摘 要: 鉴于Single Shot Multibox Detector (SSD ...
- 学习笔记之——基于深度学习的目标检测算法
国庆假期闲来无事~又正好打算入门基于深度学习的视觉检测领域,就利用这个时间来写一份学习的博文~本博文主要是本人的学习笔记与调研报告(不涉及商业用途),博文的部分来自我团队的几位成员的调研报告(由于隐私 ...
- 目标检测论文解读复现之十六:基于改进YOLOv5的小目标检测算法
前言 此前出了目标改进算法专栏,但是对于应用于什么场景,需要什么改进方法对应与自己的应用场景有效果,并且多少改进点能发什么水平的文章,为解决大家的困惑,此系列文章旨在给大家解读最新目标检测算法论文,帮 ...
- 干货|基于深度学习的目标检测算法面试必备(RCNN~YOLOv5)
点上方计算机视觉联盟获取更多干货 仅作学术分享,不代表本公众号立场,侵权联系删除 转载于:作者丨不出名的小金@知乎(已授权) 来源丨https://zhuanlan.zhihu.com/p/35406 ...
- YOLO目标检测算法轻量化改进的过程记录
一.前言 本文主要记录了在毕设期间关于将目标检测算法部署至嵌入式设备(jetson nano)上的过程及对YOLO算法轻量化及精度提升的一些修改策略(改的并不多,基本都是重复组合,毕竟我是个菜鸡). ...
- 目标检测论文解读复现之十五:基于YOLOv5的光学遥感图像舰船 目标检测算法
前言 此前出了目标改进算法专栏,但是对于应用于什么场景,需要什么改进方法对应与自己的应用场景有效果,并且多少改进点能发什么水平的文章,为解决大家的困惑,此系列文章旨在给大家解读最新目标检测算法论文,帮 ...
- 目标检测论文解读复现之五:改进YOLOv5的SAR图像舰船目标检测
目标检测论文解读复现 文章目录 目标检测论文解读复现 前言 一.摘要 二.网络模型及核心创新点 三.应用数据集 四.实验效果(部分展示) 五.实验结论 六.投稿期刊介绍 前言 此前出了目标改进算法专栏 ...
- 【快速入门】YOLOv5目标检测算法
文章目录 一.YOLOv5简介 二.网络结构 1.Input 2.Backbone 3.Neck 4.Head 三.改进方法 1.自适应锚框计算 2.自适应灰度填充 四.性能表现 五.YOLOv5入门 ...
最新文章
- java js关键字_js中的instanceof关键字
- 数据结构遍历顺序栈_链栈的初始化与遍历
- iis日志php,win2008 iis7开启日志按日期分割
- 计算机学院特色游戏,网络游戏七大特点浅析
- 第一百零四节,JavaScript时间与日期
- Vue—基础概念—指令
- Vue学习(增删改查、ES6模块化概念)-学习笔记
- activity-启动动画的设定(下面弹出出现,弹入下面消失)
- 慌的一批!新手妹子一个命令把公司服务器数据删没了...
- SAS在金融中的应用三
- mysql 拷贝记录吗_MySQL-复制记录和复制表
- 【c++】笔记:输入带空格的字符串
- HTML+CSS+JS实现 ❤️3D旋转魔方图片相册特效❤️
- 遥感图像预处理-几何校正
- [内附完整源码和文档] 基于Java的人事档案管理系统
- GBASE 8s UDR内存管理_01_mi_alloc
- 二叉树(1.二叉树的概念堆)
- MPU和MMU、MPU和MCU的区别
- 51单片机点阵屏实现俄罗斯方块
- IBUFDS、IBUFGDS和OBUFDS
热门文章
目录 YOLOv3目标检测算法 前沿 一.YOLOv3 二.损失函数 YOLOv3目标检测算法 前沿 前两篇文章我们讲了下关于YOLOv1和YOLOv2的原理,有不懂的小伙伴可以回到前面再看看: YO ...
基于Grad-CAM与KL损失的SSD目标检测算法 人工智能技术与咨询 来源:<电子学报>,作者侯庆山等 摘 要: 鉴于Single Shot Multibox Detector (SSD ...
国庆假期闲来无事~又正好打算入门基于深度学习的视觉检测领域,就利用这个时间来写一份学习的博文~本博文主要是本人的学习笔记与调研报告(不涉及商业用途),博文的部分来自我团队的几位成员的调研报告(由于隐私 ...
前言 此前出了目标改进算法专栏,但是对于应用于什么场景,需要什么改进方法对应与自己的应用场景有效果,并且多少改进点能发什么水平的文章,为解决大家的困惑,此系列文章旨在给大家解读最新目标检测算法论文,帮 ...
点上方计算机视觉联盟获取更多干货 仅作学术分享,不代表本公众号立场,侵权联系删除 转载于:作者丨不出名的小金@知乎(已授权) 来源丨https://zhuanlan.zhihu.com/p/35406 ...
一.前言 本文主要记录了在毕设期间关于将目标检测算法部署至嵌入式设备(jetson nano)上的过程及对YOLO算法轻量化及精度提升的一些修改策略(改的并不多,基本都是重复组合,毕竟我是个菜鸡). ...
前言 此前出了目标改进算法专栏,但是对于应用于什么场景,需要什么改进方法对应与自己的应用场景有效果,并且多少改进点能发什么水平的文章,为解决大家的困惑,此系列文章旨在给大家解读最新目标检测算法论文,帮 ...
目标检测论文解读复现 文章目录 目标检测论文解读复现 前言 一.摘要 二.网络模型及核心创新点 三.应用数据集 四.实验效果(部分展示) 五.实验结论 六.投稿期刊介绍 前言 此前出了目标改进算法专栏 ...
文章目录 一.YOLOv5简介 二.网络结构 1.Input 2.Backbone 3.Neck 4.Head 三.改进方法 1.自适应锚框计算 2.自适应灰度填充 四.性能表现 五.YOLOv5入门 ...