Rotated_IoU

在这里插入图片描述

介绍

https://github.com/lilanxiao/Rotated_IoU

该报告是用于2D / 3D对象检测的IoU损失的非官方实现。 它包含Pytorch函数,该函数使用GPU计算定向矩形的相交面积。

注意

CUDA扩展最近进行了修改,以涵盖一些极端情况。 请考虑更新代码并重新编译扩展。

检查清单

 pytorch函数查找定向矩形的交点
 pytorch函数检查一个矩形的角是否位于另一个矩形中
 CUDA扩展为两个矩形的相交多边形的逆时针排序顶点
 Pytorch函数使用上述函数计算矩形的面积相交
 测试用例
 旋转的2d / 3d GIoU和DIoU损失
 演示以验证反向传播
 验证对象检测中的2d / 3d IoU丢失

要求

代码已在Ubuntu 18.04上进行了测试。 需要以下依赖

cudatoolkit=10.2
pytorch=1.5         # newer version should work as well
numpy
matplotlib
argparse

用法

首先,编译CUDA扩展。

cd cuda_op
python setup.py install

在这里插入图片描述
然后,运行演示以验证Pytorch功能和CUDA扩展。

cd ..
python demo.py

该演示训练了一个网络,该网络使用N组box角,并预测每个旋转盒子的x,y,w,h和角度。 为了进行反向传播,将预测的box参数和GT转换为box角的坐标。 交叉区域IOU是使用具有CUDA扩展名的Pytorch函数计算的。 然后,可以计算出GIoU LossDIoU Loss该演示首先生成数据,然后进行训练

您应该会看到一些类似以下的信息:

... generating 819200 boxes, please wait...
... generating 81920 boxes, please wait...
data saved in:  ./data
[Epoch 1: 10/200] train loss: 0.6721  mean_iou: 0.3703
[Epoch 1: 20/200] train loss: 0.4931  mean_iou: 0.5211
[Epoch 1: 30/200] train loss: 0.4532  mean_iou: 0.5546
[Epoch 1: 40/200] train loss: 0.4249  mean_iou: 0.5805
[Epoch 1: 50/200] train loss: 0.4361  mean_iou: 0.5713
[Epoch 1: 60/200] train loss: 0.4148  mean_iou: 0.5910
[Epoch 1: 70/200] train loss: 0.4272  mean_iou: 0.5803
[Epoch 1: 80/200] train loss: 0.4283  mean_iou: 0.5801
[Epoch 1: 90/200] train loss: 0.4203  mean_iou: 0.5879

请注意,train loss 下降,mean_iou增大,这表明函数是可微的。

GIoU和DIoU

此存储库为旋转的边界框实现了GIoU LossDIoU Loss。 在演示中,可以选择它们

python demo.py --loss giou      
python demo.py --loss diou      # [default]

这两种损失都需要两个box中最小的一个box。注意:有不同的选择来确定封闭box。

  1. 轴对齐框:封闭框是轴对齐的。这个版本简单快速,但理论上不是最优的。
  2. 旋转框(近似):封闭框也会旋转。利用主成分分析法PCA估计旋转包围box的大小。计算比较简单,但结果不准确。在演示中,这个方法似乎很有效。
  3. 旋转框(精确):实际最小的包围框。由于采用了残酷的力搜索来获得最小包围盒,计算量大。

三种类型的封闭box可通过以下方式选择:

python demo.py --enclosing aligned      # simple and naive. bad performance.
python demo.py --enclosing pca          # approximated smallest box. slightly worse performance.
python demo.py --enclosing smallest     # [default]. smallest box. best performance.

致谢

本文启发了计算相交面积的想法:

@INPROCEEDINGS{8886046,
    author={D. {Zhou} and J. {Fang} and X. {Song} and C. {Guan} and J. {Yin} and Y. {Dai} and R. {Yang}},
    booktitle={2019 International Conference on 3D Vision (3DV)}, 
    title={IoU Loss for 2D/3D Object Detection}, 
    year={2019},
    pages={85-94},}

CUDA扩展的一些代码从以下位置进行了修改:

@article{pytorchpointnet++,
    Author = {Erik Wijmans},
    Title = {Pointnet++ Pytorch},
    Journal = {https://github.com/erikwijmans/Pointnet2_PyTorch},
    Year = {2018}
}
  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值