查看原文
其他

anchor-free对象检测网络CornerNet详解

gloomyfish OpenCV学堂 2020-02-04

点击上方蓝字关注我们

微信公众号:OpenCV学堂
关注获取更多计算机视觉与深度学习知识

以前的对象检测网络

主要是两类对象检测方法

一类是以Faster-RCNN/Mask-RCNN为代表的two-stage检测器,第一阶段通过RPN网络产生大量的推荐区域,第二阶段通过对这些区域分类输出实现对象检测。这类方法的共同点就是算法精度比较高但是速度比较慢。

另外一类是以SSD/YOLO为代表的one-stage检测器,它们把对象检测问题当成简单的回归问题进行处理,通过CNN网络从输入图像中学习分类属性与位置信息,这类方法通常准确率(mAP)都比较低但是相比two-stage的网络速度比较快,

这两类对象检测网络,都是是通过生成或者定义各种比例的anchor来为实现对象检测服务。

关键点对的对象检测网络-CornerNet

CornerNet网络的特点:

1.CornerNet是一个真正意义上的anchor-free的网络,它把anchor box简单表示为左上角与右下角一个关键点对,

2.使用一个新池化层corner pooling,帮助网络更好的寻找角点

3.在识别精度超过现存的one-stage的网络,达到SOTA。


CornerNet网络结构

Cornet网络使用Hourglass网络作为backbone网络,后面跟随两个预测模型,分别预测box的左上角点与右下角点,每个模型包含corner pooling模块,然后池化特征预测heatmaps、embeddings、Offsets。

Heatmap的每个通道都是一个二值mask,预测每个对象关键点对位置信息,而且每个角点都跟其它的角点做一个距离预测作为embeddings vector,然后相似的嵌入或者属于同一个box的它们之间的距离是小的,这样就会生成anchor box,得到预测的结果。

训练预测两个嵌入的相似性即可得到最终的anchor-box。为了得到更好的检测框,网络也预测anchor-box的offset,这样可以生成调整后的最终检测框。最后网络在输出的对象检测框的基础上通过NMS处理就得到了最终的检测框。


对每个角点,都有个正确标注位置信息,其它都是负样本,为了平衡正负样本的比例,作者只对正样本指定半径周围负样本考虑在训练环节,图示如下:


Corner-pooling详解

首先看下图

分别在水平与垂直放心求最大值,然后再叠加,得到输出的结果,需要特别方向是自底向上,从右到左。更详解的图解如下:

如果是求右下角点,则方向相反。


预测模型

预测模型结构如下:

从backbone网络出来是接残差block,不过这里是把卷积替换成Corner-Pooling模块,然后紧跟一个3x3卷积之后进行多路输出。


测试结果:

论文

https://arxiv.org/pdf/1808.01244.pdf

代码:

https://github.com/princeton-vl/CornerNet

参考:

https://opencv.org/latest-trends-of-object-detection-from-cornernet-to-centernet-explained-part-i-cornernet/

推荐阅读

OpenCV加速与优化,让代码执行速度飞起来

教程 | OpenCV4.1.2中实时高效的二维码识别模块

Qt实用技巧:使用OpenCV库操作摄像头拍照、调节参数和视频录制

干货 | GIMP中的Noise Reduction算法原理及快速实现

逆天啦!OpenCV4.1.2 CPU上人脸检测居然能跑到700+ FPS

CPU上跑深度学习模型,FPS也可以达100帧

网络模型量化与推理加速框架OpenVINO最新版本SDK演示

如何编译OpenCV4.1.0支持OpenVINO推断引擎加速支持

10分钟学会 OpenCV CUDA编程

OpenVINO深度学习推理框架 开发技术系列文章汇总

首发 | OpenVINO开发配套视频教程发布了

OpenCV4 | 如何一行代码搞定SSD模型推理与结果解析

    您可能也对以下帖子感兴趣

    文章有问题?点此查看未经处理的缓存