编辑丨GiantPandaCV 【导语】前段时间纯粹为了论文凑字数做的一个工作,本文不对CenterNet原理进行详细解读,如果对CenterNet原理不了解,建议简单读一下原论文然后对照本文代码理解( 对原版CenterNet目标检测代码进行了极大程度精简)。 未编译DCN的主干网 DLADCN(原始CenterNet) ? 原始CenterNet 前言 基本想法就是直接修改CenterNet的head部分,但是是直接在长宽图上加一层通道表示角度,还是多引出一 路feature-map呢? R-CenterNet网络结构图 代码说明 代码主要分为五个部分: {R-CenterNet} |-- backbone -- |-- dlanet.py -- |-- dlanet_dcn.py
作者扩展了CenterNet的思想,使其能够工作在具有金字塔结构的网络中,这使得CenterNet可以在多分辨率特征图中检测目标。 ResNet-50)下,MR-CenterNet将目标的AP提高了4.8%。由于MR-CenterNet框架的通用性强,能够为CenterNet应用更强的Backbone。 CenterNet-RT实现了精度和速度之间的良好平衡,在其他典型方法中仍然具有竞争力。CenterNet(即SR-CenterNet)执行速度较慢,推断速度小于7fps。 进一步在MR-CenterNet的基础上提出了CenterNet-RT,实现了在30.5FPS下43.2% AP的结果。 这种准确性与SR-CenterNet(HG-104)不相上下,但推理速度比SR-CenterNet快约6倍。
本文主要解读CenterNet如何加载数据,并将标注信息转化为CenterNet规定的高斯分布的形式。 1. YOLOv3和CenterNet流程对比 CenterNet和Anchor-Based的方法不同,以YOLOv3为例,大致梳理一下模型的框架和数据处理流程。 CenterNet部分详解 ? 设输入图片为 , W代表图片的宽,H代表高。CenterNet的输出是一个关键点热图heatmap。 其中R代表输出的stride大小,C代表关键点的类型的个数。 CenterNet官方版本实际上是在CornerNet的基础上改动得到的,有很多祖传代码。 CenterNet也延续了这个bug,CenterNet作者回应说这个bug对结果的影响不大,但是根据issue的讨论来看,有一些人通过修正这个bug以后,可以让AR提升1-3个百分点。
【GiantPandaCV导语】这是CenterNet系列的最后一篇。本文主要讲CenterNet在推理过程中的数据加载和后处理部分代码。最后提供了一个已经配置好的数据集供大家使用。 代码注释在:https://github.com/pprp/SimpleCVReproduction/tree/master/CenterNet 1. eval部分数据加载 由于CenterNet是生成了一个 在CenterNet中由于不需要非极大抑制,速度比较快。但是CenterNet如果在测试的过程中加入了多尺度测试,那就会调用soft nms将不同尺度的返回的框进行抑制。 CenterNet示意图(图源medium) 上图是CenterNet的结构图,使用的是PlotNeuralNet工具绘制。 数据集 之前在CenterNet系列第一篇PyTorch版CenterNet训练自己的数据集中讲解了如何配置数据集,为了更方便学习和调试这部分代码,笔者从github上找到了一个浣熊数据集,这个数据集仅有
CenterNet在MSCOCO数据集上获得了47%的mAP值,是One-Stage目标检测算法中的精度最高的。 因此,让网络具有具有感知物体内部的能力非常重要,所以CenterNet额外预测目标内部的点来添加这一能力。 ? 在这里插入图片描述 CenterNet 下面的Figure2是CenterNet的结构图。 ? 下面的Table3是CenterNet 与 CornerNet 的单独对比,可以看出在MS COCO数据集上CenterNet消除大量误检框,尤其是在小物体上。 ? 在这里插入图片描述 下面的Figure6展示了CenterNet和CornerNet的对比结果。(a) 和 (b) 表明 CenterNet 能有效去除小尺度的错误目标框。
iantPandaCV导语 本文主要讲解CenterNet的loss,由偏置部分(reg loss)、热图部分(heatmap loss)、宽高(wh loss)部分三部分loss组成,附代码实现。 下面是CenterNet中核心loss公式: 这个和Focal loss形式很相似, 和 是超参数,N代表的是图像关键点个数。 举个例子(CenterNet中默认 ): 的情况下, 如果 ,那么loss= ,这就是一个很大的loss值。 如果 , 那么loss= , 这个loss就比较小。 2.4 CenterNet Loss 整体的损失函数是以上三者的综合,并且分配了不同的权重。 其中 3.
CenterNet中主要提供了三个骨干网络ResNet-18(ResNet-101), DLA-34, Hourglass-104,本文从结构和代码对hourglass进行讲解。 本文对应代码位置在:https://github.com/pprp/SimpleCVReproduction/tree/master/Simple_CenterNet 1. Ground Truth Heatmap 在开始讲解骨干网络之前,先提一下上一篇文章中有几位群友私聊我的问题:CenterNet为什么要沿用CornerNet的半径计算方式? 查询了CenterNet论文还有官方实现的issue,其实没有明确指出为何要用CornerNet的半径,issue中回复也说是这是沿用了CornerNet的祖传代码。 CenterNet论文详解可以点击【目标检测Anchor-Free】CVPR 2019 Object as Points(CenterNet) 整个网络就梳理完成了,笔者简单画了一下nstack为2时的
这篇centernet对应的是"Objects as Points",不是另外一篇"CenterNet- Keypoint Triplets for Object Detection"。 CenterNet相比One Stage和Two Stage算法的区别 那CenterNet相比于之前的one-stage和two-stage的目标检测有什么区别? 之所以设置为4是因为centernet没有采用FPN结构,因此所有中心点要在一个Feature map上出,因此分辨率不能太低。 看下图可以比较直观的看出centernet的建模方法 ? 在整个训练的流程中,CenterNet学习了CornerNet的方法。 这个损失函数是Focal Loss的修改版,适用于CenterNet。
被CenterNet, FairMOT等框架所采用,其效果很不错,准确率和模型复杂度平衡的也比较好。 CenterNet中使用的DLASeg是在DLA-34的基础上添加了Deformable Convolution后的分割网络。 1. 实现 这部分代码复制自CenterNet官方实现,https://github.com/pprp/SimpleCVReproduction/blob/master/CenterNet/nets/dla34 Reference https://arxiv.org/abs/1707.06484 https://github.com/pprp/SimpleCVReproduction/blob/master/CenterNet
CenterNet+ deepsort实现多目标跟踪 首先使用CenterNet训练自己的检测数据集,可以检测人、动物、鱼大等多种自定义类别,然后再把训练好的预训练模型传入deepsort算法进行多目标跟踪 试验结果表明centernet精度和速度方面都具有更好的优势。 下面一张图概括且很好的展示了deepsort的算法: Centernet+deepsort代码 https://github.com/kimyoon-young/centerNet-deep-sort pip install -r requirments.txt 快速启动 CENTERNET_PATH = 'CENTERNET_ROOT/CenterNet/src/lib/' to e.g) CENTERNET_PATH = '/home/kyy/centerNet-deep-sort/CenterNet/src/lib/' 运行demo python demo_centernet_deepsort.py
链接如下 https://github.com/see--/keras-centernet 2 网络结构 顾名思义,CornerNet以检测框的两个角点为基础进行物体的检测,而CenterNet以检测框的中心为基础进行物体位置的检测 CenterNet和CornerNet的网络结构类似,如下为CornerNet的网络结构。 ? 基于Hourglass backbone的CenterNet结构如下图所示 ? 另外在CornerNet中还有一个创新点,为Corner Pooling的提出,在CenterNet中被剔除了。 那么结合CenterNet的结构图 ? 5 总结 总的来说,CenterNet要比CornerNet学起来更加简单点,而且比CornerNet更实用,应用范围也更广!
简介 CenterNet的论文是《Objects as Points》,其实从名字就可以很直观的看出,CenterNet是将目标检测问题看做对于目标中心点的检测,它是继CornerNet之后的又一个Anchor-free 方法,它们之间也有比较多的相似之处,区别在于CornerNet是找目标的角点,而CenterNet是找目标的中心点。 Other no NMS CenterNet的结构是可以不做NMS的,本质上其实也是因为no Anchor,这意味着没有大量的先验预设框,不需要过NMS进行滤除,这让CenterNet的后处理变得比较简单 CenterNet性能评价 ? 比,所以综合效率和性能,CenterNet还是很不错的。
CenterNet(Objects as points)已经有一段时间了,之前这篇文章-【目标检测Anchor-Free】CVPR 2019 Object as Points(CenterNet)中讲解了 CenterNet的原理,可以回顾一下。 这篇文章是基于非官方的CenterNet实现,https://github.com/zzzxxxttt/pytorch_simple_CenterNet_45,这个版本的实现更加简单,基于官方版本(https 克隆项目 CenterNet_ROOT=/path/to/clone/CenterNet git clone https://github.com/zzzxxxttt/pytorch_simple_CenterNet pytorch1.1.0 or 1.0.0, 将$CenterNet_ROOT/lib/DCNv2_new 重命名为 $CenterNet_ROOT/lib/DCNv2.
但是centernet原版的代码我初看时有点吃力,但也没有重构的想法,过了一些时日后我找到了centernet-better和centernet-better-plus,于是把他们的代码白嫖了过来然后自己完善一下 如果你想基于centernet做一些学术研究,你同样也可以在centerX的projects里面重构自己的代码,和centerX里面centernet的codebase并不冲突,可以快速定位bug。 centerX各个模块 基础实现 这个方面没有什么好说的,也没有做到和其他框架的差异化,只是在detectron2上对基础的centernet进行了复现而已,而且大部分代码都是白嫖自centernet-better 和centernet-better-plus,就直接上在COCO上的实验结果吧。 其中笔者还找到了centernet的tensorRT前向版本(后续笔者把它称为centerRT),在里面用cuda写了centernet的后处理(包括3X3 max pool和topK后处理)。
前言 前天发了一个推文【目标检测Anchor-Free】CVPR 2019 CenterNet,讲解的是CenterNet: Keypoint Triplets for Object Detection 这篇论文提出的网络也被叫作CenterNet,和前面介绍的CenterNet重名了,注意加以区别。论文原文见附录。 摘要:目标检测往往是在图像上将目标以矩形框的形式标出。 这个模型被论文叫做CenterNet,这个模型是端到端可微的,更简单,更快速,更准确。 下面的Figure2展示了使用CenterNet目标检测器检测目标的一个可视化效果。 ? 在这里插入图片描述 网络设计 网络结构 CenterNet的网络结构如Figure6所示。对于2D目标检测任务来说,CenterNet输入分辨率的图像,预测个目标中心点坐标和个中心点的偏置。
CenterNet从名字就可以很直观的看出,CenterNet是将目标检测问题看做对于目标中心点的检测,它是继CornerNet之后的又一个Anchor-free方法,它们之间也有比较多的相似之处,区别在于 CornerNet是找目标的角点,而CenterNet是找目标的中心点。 Other no NMS CenterNet的结构是可以不做NMS的,本质上其实也是因为no Anchor,这意味着没有大量的先验预设框,不需要过NMS进行滤除,这让CenterNet的后处理变得比较简单 关于下采样 此外还有一个很有意思的地方,centernet主干网络的在设计的时候,下采样倍率普遍比较小,CenterNet的倍率是4,CornerNet的下采样倍率是5,而Anchor base的方法, 比,所以综合效率和性能,CenterNet还是很不错的。
0.引子 笔者很喜欢CenterNet极简的网络结构,CenterNet只通过FCN(全卷积)的方法实现了对于目标的检测与分类,无需anchor与nms等复杂的操作高效的同时精度也不差。 下面要引出写此篇博文的了,在研习CenterNet时看到了CenterNet与YoloV3的对比,在速度与精度都实现了超越,其实针对这个结论笔者还是略带怀疑态度的。 ? 所以笔者对CenterNet针对YoloV3速度的提升还是有些怀疑的,YoloV3可以说目前是工业上最常用也是最好用的目标检测算法,如果真的如CenterNet的论文结论所述,CenterNet同时也具备结构简单使用方便的特点 针对上述情况,笔者打算做一下对比实验,测试在相同的硬件与环境的条件下,来测试CenterNet与YoloV3的精度与速度的测试,其实为了简化实验,这里只测试在相同尺寸下CenterNet与YoloV3的速度对比 YoloV3输出照片 2.CenterNet 1.最大边放缩 320 运行:~/CenterNet/src$ python demo.py ctdet --demo ..
为了解决CornerNet缺乏目标内部信息的问题,提出了CenterNet使用三元组进行目标检测,包含一个中心关键点和两个角点。 从实验结果来看,CenterNet相对于CornerNet只增加了少量推理时延,但带来了将近5个点的AP提升undefined 来源:晓飞的算法工程笔记 公众号 论文: CenterNet: Keypoint 为了解决这个问题,论文提出CenterNet,在角点对的基础上加入中心关键点组成三元组进行检测,既能捕捉目标的边界信息也能兼顾目标的内部信息。 于是,论文提出高效的替代方案CenterNet,在CornerNet的角点对上再加入一个目标内部点组成三元组,以最低的成本捕捉目标的内部信息。 从实验结果来看,CenterNet相对于CornerNet只增加了少量推理时延,但带来了将近5个点的AP提升。
本文为CenterNet作者发表的,论文提出anchor-free/two-stage目标检测算法CPN,使用关键点提取候选框再使用两阶段分类器进行预测。 [1240] 论文将高召回率CornerNet和CenterNet作为实验目标,结果如上表所示。主干网络的加强能够带来准确率的提升,但仍然有很多的误检。
CenterNet 2019 年 4 月,中科院联合牛津、华为在 CornerNet 的基础上提出了新的 anchor-free 物体检测方法 CenterNet,构建三元组进行物体检测(后文简称 CenteNet-Triplets 与此同时,得克萨斯奥斯汀大学和伯克利也提出了同名的 CenterNet(后文简称 CenterNet-Keypoint),取得了最佳的速度-准确性权衡。 CenterNet-Triplets 整体架构图 CenterNet-Triplets 是在 CornerNet 的基础上发展而来,其架构如图 7 所示。 CenterNet-Keypoint 示意图。 虽提出时间十分相近,但 CenterNet-Keypoint 却与 CenterNet-Triplets 思路不尽相同(图 8)[9]。 CenterNet-Triplets 在 MSCOCO 上结果比较。 ? 表 3. CenterNet-Keypoint 在 MSCOCO 上结果比较。
扫码关注腾讯云开发者
领取腾讯云代金券