很难在不一样的目标检测器之间进行公平的比较。对于哪一个模型是最好的?这个问题是没有直接的答案。对于现实生活中的应用,咱们选择平衡准确性和速度。除了检测器类型外,咱们还须要了解影响性能的其余选择:算法
最糟糕的是,技术发展如此之快,以致于任何比较都很快变得过期。在这里,咱们总结了各个论文的结果,所以您能够完整分析和对比它们。而后,咱们根据Google Research中总结得出一篇综述。经过在一种状况下提出多种观点,咱们但愿咱们能够更好地了解性能指标。网络
在本节中,咱们总结了相应论文报告的性能。随时快速浏览本节。app
这是PASCAL VOC 2012测试集的结果。咱们对表明Faster R-CNN性能的最后3行感兴趣。第二列表明RPN网络制定的RoI数量。第三列表明使用的训练数据集。第四列是测量精度的平均平均精度(mAP)。ide
mAP:https://medium.com/@jonathan_hui/map-mean-average-precision-for-object-detection-45c121a31173PASCAL VOC 2012测试集的结果VOC 2012 for Faster R-CNNMS COCO上的结果
COCO for Faster R-CNN使用PASCAL VOC 2007测试集在K40 GPU上计时,以毫秒为单位。
性能
PASCAL VOC 2012测试集的结果VOC 2012 for R-FCN(对某些结果使用了多尺度的训练和测试。)测试
MS COCO上的结果COCO for R-FCN优化
这是使用300×300和512×512输入图像的PASCAL VOC 200七、2012和MS COCO的结果。SSD(SSD300 和SSD512 对小对象应用数据加强以改善mAP。)ui
性能:阿里云
Speed is measure with a batch size of 1 or 8 during inference(此处的YOLO是指比YOLOv2或YOLOv3慢的v1)spa
MS COCO的结果:COCO for SSD
PASCAL VOC 2007测试集的结果。VOC 2007 for YOLOv2(咱们在此处添加了VOC 2007测试,由于它具备针对不一样图像分辨率的结果。)
PASCAL VOC 2012测试集的结果。VOC 2012 for YOLOv2MS COCO上的结果。
COCO for YOLOv2
MS COCO上的结果
COCO for YOLOv3YOLOv3的性能
YOCO2在COCO上的性能
MS COCO上的结果。COCO for FPN
MS COCO上的结果
COCO for RetinaNetMS COCO测试开发上的速度(ms)与准确性(AP)。COCO for RetinaNet
并排比较不一样论文的结果是不明智的。这些实验是在不一样的设置下完成的。尽管如此,咱们仍是决定将它们绘制在一块儿,以便至少您对它们的大体位置有一个大体了解。可是请注意,咱们绝对不要直接比较这些数字。
对于如下呈现的结果,使用PASCAL VOC 2007和2012数据对模型进行了训练。mAP是使用PASCAL VOC 2012测试仪测量的。对于SSD,该图表显示了300×300和512×512输入图像的结果。对于YOLO,其结果为288×28八、416×461和544×544图像。同一模型的高分辨率图像具备更好的mAP,但处理速度较慢。*表示应用了小目标数据加强。
**表示结果是根据VOC 2007测试集测得的。之因此包含这些内容,是由于YOLO论文并无许多VOC 2012测试结果。因为VOC 2007的结果整体上比2012年更好,所以咱们添加了R-FCN VOC 2007的结果做为交叉参考( cross reference)。
输入图像分辨率和特征提取器会影响速度。如下是相应论文报告的最高和最低FPS。可是,下面的结果可能会有很大的误差,特别是在不一样的mAP下进行测量。
在最近几年中,许多结果都是使用COCO目标检测数据集专门测量的。COCO数据集很难进行对象检测,一般检测器的mAP会低得多。这是一些关键检测器的比较。
FPN和Faster R-CNN *(使用ResNet做为特征提取器)具备最高的精度(mAP @ [.5:.95])。RetinaNet使用ResNet构建在FPN之上。所以,RetinaNet实现的最高mAP是结合金字塔特征的效果,特征提取器的复杂性和focal loss的综合影响。可是,请注意,这不是苹果与苹果的比较(apple-to-apple comparison)。稍后咱们将展现Google调查,以便进行更好的比较。可是最好先查看每一个模型的声明。
Single shot detectors 使用较低分辨率的图像时,每秒帧数(FPS)使人印象深入,但以准确性为代价。这些论文试图证实它们能够击败基于区域的探测器(region based detectors)的准确性。可是,因为高分辨率图像一般用于此类声明,所以结论性较差。所以,他们的状况正在发生变化。另外,应用了不一样的优化技术,这使得很难隔离每一个模型的优势。实际上,single shot and region based detectors 如今在设计和实现上愈来愈类似。可是有些保留,咱们能够说:
若是不须要实时速度,基于区域的检测器(如Faster R-CNN)将显示出较小的精度优点。Single shot detectors在这里用于实时处理。可是应用程序须要验证它是否知足其准确性要求。
实测视频已上传到b站【30分钟时长】https://www.bilibili.com/video/av75557343/
Google Research提供了一份调查报告,研究Faster R-CNN,R-FCN和SSD的速度和准确性之间的权衡。(本文不涉及YOLO。)它使用MS COCO数据集进行训练,从而在TensorFLow中从新实现了这些模型。它创建了一个更加受控的环境,并使权衡比较变得更加容易。它还引入了MobileNet,该技术能够以较低的复杂度实现高精度。
最重要的问题不是哪一个检测器最好。可能没法回答。真正的问题是,哪一种检测器以及哪一种配置能够为咱们提供您的应用所需的速度和准确性之间的最佳平衡。如下是准确性与 速度权衡(时间以毫秒为单位)。
一般,Faster R-CNN更准确,而R-FCN和SSD更快。
使用带有300 proposals的Inception Resnet进行Faster R-CNN,可在全部测试案例中以1 FPS提供最高的准确性。在针对实时处理的模型中,MobileNet上的SSD具备最高的mAP。该图还帮助咱们找到最佳交易点,以实现良好的速度回报。
使用残差网络(Residual Network)的R-FCN模型在准确性和速度之间取得了很好的平衡,若是咱们将proposals数量限制为50个,则使用Resnet的Faster R-CNN能够达到相似的性能。
本文研究了特征提取器的准确性如何影响检测器的准确性。Faster R-CNN和R-FCN均可以利用更好的特征提取器,但对于SSD来讲意义不大。(x轴是每一个特征提取器分类时top 1%的准确率。)
对于大物体,即便使用简单的提取器,SSD的性能也很好。使用更好的提取器,SSD甚至能够匹配其余探测器的精度。可是与其余方法相比,SSD在小物体上的性能要差得多。
例如,SSD在检测下表中的瓶子时有问题,而其余方法则能够。
更高的分辨率能够显着改善小物体的目标检测能力,同时也能够帮助大物体。当在两个维度上将分辨率下降两倍时,准确度平均下降15.88%,但预测时间(inference time)也平均下降27.4%。
所生成的proposals数量能够显着影响Faster R-CNN(FRCNN),而不会大大下降准确性。例如,使用Inception Resnet,使用50个proposals而不是300个proposals时,Faster R-CNN能够将速度提升3倍。准确性降低仅4%。因为R-FCN的每一个ROI的工做量要少得多,所以速度提升的意义远不那么重要。
这是使用不一样特征提取器的不一样模型的GPU时间。
尽管许多论文使用FLOPS(浮点运算的数量)来衡量复杂性,但不必定反映准确的速度。模型的密度(sparse v.s. dense model)会影响所需的时间。具备讽刺意味的是,密度较小的模型一般平均须要更长的时间才能完成每一个浮点运算。在下图中,大多数密集模型的斜率(FLOPS和GPU比率)大于或等于1,而较浅模型小于1。也就是说,即便总体执行时间较短,密度较小的模型效果也不佳。可是,该缘由还没有获得本文的充分研究。
MobileNet具备最小的占用空间。它须要少于1Gb(总)的内存。
2016年COCO目标检测挑战赛的获胜做品是使用Resnet和Inception ResNet的五个Faster R-CNN模型的集合。它在COCO测试仪上的mAP @ [.5,.95]达到41.3%,而且在定位小物体方面取得了显着改进。
Google Research论文的一些主要发现:
本文为 AI算法与图像处理 翻译,如需转载,可扫描下方二维码后回复转载。因为推文限制,部分图片并不是高清,若有须要能够后台回复 “ 20191114”获取,已按编号顺序更改命名,方便使用!
conda安装的国内镜像配置,实现快速下载
anaconda的全部的软件包所有在国外,安装起来很麻烦,关键是下载速度慢,并且常常中断,因此须要配置国内安装的镜像,下载速度就很快了。
1、conda换国内源
1.1 查看源
命令
conda config --show-sources
显示结果
==> /home/xxx/.condarc <==
channels:复制代码
- https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/
- defaults复制代码
这里有两个源,一个是清华的源,另外一个是默认的源
1.2 添加源(这里以添加清华源为例,固然也能够选择其余的源)
命令
conda config --add channels
操做:
#添加清华的源
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/复制代码
运行成果后,使用显示源查看是否添加成功(conda config --show-sources)
1.3 其余可选的源(还有更多的能够网上搜索,这里不一一列举)
中科大的源
conda config –add channels https://mirrors.ustc.edu.cn/anaconda/pkgs/free/
阿里云的源
conda config --add channels http://mirrors.aliyun.com/pypi/simple/复制代码
1.4 移除源
命令
conda config --remove channels
操做
conda config --remove channels 'https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/'
复制代码
本文由博客一文多发平台 OpenWrite 发布!