热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

目标检测算法与YOLO

一.概述目标检测作为计算机视觉学科下一个热门研究方向,近年来和深度学习相结合,使得检测准确性和实时性均获得巨大提升。传统的目标检测算法模型主要由两部分组成,第一部分是特征提取器,第

一. 概述
目标检测作为计算机视觉学科下一个热门研究方向,近年来和深度学习相结合,使得检测准确性和实时性均获得巨大提升。传统的目标检测算法模型主要由两部分组成,第一部分是特征提取器,第二部分是分类器,这类算法的典型代表主要有三种:Haar特征+Adaboost算法,Hog特征+Svm算法,DPM算法。近年来,由于深度学习算法的不断进步,相继发展出多种基于深度学习的目标检测算法,算法也由曾经的特征提取与分类相分离发展为将特征提取和分类及目标检测边框回归融合到一个完整的卷积神经网络中。在早期的RCNN系列算法中,包括RCNN,Fast-RCNN,Faster-RCNN,之后又有人提出实时性能更为突出的YOLO系列算法,包括YOLO,YOLOv2,在此基础上研究人员又提出SSD算法。
主流的目标检测算法主要是基于深度学习模型,其可以分成两大类:
(1)two-stage检测算法,其将检测问题划分为两个阶段,首先产生候选区域(region proposals),然后对候选区域分类(一般还需要对位置精修),这类算法的典型代表是基于region proposal的R-CNN系算法,如R-CNN,Fast R-CNN,Faster R-CNN等;
(2)one-stage检测算法,其不需要region proposal阶段,直接产生物体的类别概率和位置坐标值,比较典型的算法如YOLO和SSD。

  1. 性能指标
    主要是准确度和速度。对于准确度,目标检测要考虑物体的定位准确性和分类准确度。一般情况下,two-stage算法在准确度上有优势,而one-stage算法在速度上有优势。不过,随着研究的发展,两类算法都在两个方面做改进。Google在2017年开源了TensorFlow Object Detection API,并对主流的Faster R-CNN,R-FCN及SSD三个算法在MS COCO数据集上的性能做了细致对比(见Huang et al. 2017),如下图所示。
    目标检测算法与YOLO
    近期,Facebook的FAIR也开源了基于Caffe2的目标检测平台Detectron,其实现了最新的Mask R-CNN,RetinaNet等检测算法,并且给出了这些算法的Baseline Results 。不得不说,准确度(accuracy)和速度(speed)是一对矛盾体,如何更好地平衡它们一直是目标检测算法研究的一个重要方向。
  2. 数据集
    目标检测常用的数据集包括PASCAL VOC,ImageNet,MS COCO等数据集,这些数据集用于研究者测试算法性能或者用于竞赛。
    (1)PASCAL VOC(The PASCAL Visual Object Classification)是目标检测,分类,分割等领域一个有名的数据集。从2005到2012年,共举办了8个不同的挑战赛。PASCAL VOC包含约10,000张带有边界框的图片用于训练和验证。但是,PASCAL VOC数据集仅包含20个类别,因此其被看成目标检测问题的一个基准数据集。
    (2)ImageNet在2013年放出了包含边界框的目标检测数据集。训练数据集包含500,000张图片,属于200类物体。由于数据集太大,训练所需计算量很大,因而很少使用。同时,由于类别数也比较多,目标检测的难度也相当大。2014 ImageNet数据集和2012 PASCAL VOC数据集的对比在这里。
    (3)另外一个有名的数据集是Microsoft公司(见T.-Y.Lin and al. 2015)建立的MS COCO(Common Objects in COntext)数据集。这个数据集用于多种竞赛:图像标题生成,目标检测,关键点检测和物体分割。对于目标检测任务,COCO共包含80个类别,每年大赛的训练和验证数据集包含超过120,000个图片,超过40,000个测试图片。测试集最近被划分为两类,一类是test-dev数据集用于研究者,一类是test-challenge数据集用于竞赛者。测试集的标签数据没有公开,以避免在测试集上过拟合。在COCO 2017 Detection Challenge中,旷视科技团队凭借提出的Light-Head R-CNN模型夺得冠军(AP为0.526 ),看来还是two-stage算法准确度更胜一筹。
  3. 参数指标
    (1)精确率(Precision),也叫查准率,指在测试集上所有识别目标中某个指定目标所占比例;
    (2)召回率(Recall),也叫查全率,指在测试集上某个指定目标中被正确识别的目标所占比例;
    (3)交并比(Intersection-over-Union,IoU),指预测生成的候选边框和原始标记边框之间的交叠率,即交集和并集之间的比值;平均正确率(AP)。评估定位精度IoU(Intersection over Union,介于0到1之间),其表示预测框与真实框(ground-truth box)之间的重叠程度。IoU越高,预测框的位置越准确。因而,在评估预测框时,通常会设置一个IoU阈值(如0.5),只有当预测框与真实框的IoU值大于这个阈值时,该预测框才被认定为真阳性(True Positive, TP),反之就是假阳性(False Positive,FP)

二.检测算法
1 .R-CNN(R. Girshick et al., 2014)
是基于region proposal方法的目标检测算法系列开山之作,其先进行区域搜索,然后再对候选区域进行分类。
对于一张图片,R-CNN基于selective search方法大约生成2000个候选区域,然后每个候选区域被resize成固定大小(227×227)并送入一个CNN模型中,最后得到一个4096-d的特征向量。然后这个特征向量被送入一个多类别SVM分类器中,预测出候选区域中所含物体的属于每个类的概率值。每个类别训练一个SVM分类器,从特征向量中推断其属于该类别的概率大小。
选用Selective search方法(J.R.R. Uijlings and al. 2012)来生成候选区域,Selective search 算法根据目标纹理,边缘,颜色等多种特征找到可能存在的候选框,该算法会产生接近2000个候选框,相比于穷举方式已经大大减少,最终分类仍旧采用SVM,边框预测仍采用回归方式。这是一种启发式搜索算法。它先通过简单的区域划分算法将图片划分成很多小区域,然后通过层级分组方法按照一定相似度合并它们,最后的剩下的就是候选区域(region proposals),它们可能包含一个物体。
具体是:step1:计算区域集R里每个相邻区域的相似度S={s1,s2,…}
step2:找出相似度最高的两个区域,将其合并为新集,添加进R
step3:从S中移除所有与step2中有关的子集
step4:计算新集与所有子集的相似度
step5:跳至step2,直至S为空
相似度考虑了颜色、纹理、尺寸和空间交叠这4个参数
为了提升定位准确性,R-CNN最后又训练了一个边界框回归模型。训练样本为(P,G),其中P=(Px,Py,Pw,Ph)为候选区域,而G=(Gx,Gy,Gw,Gh)为真实框,G是与P的IoU最大的真实框(只使用IoU大于0.6的样本),回归器的目标值定义为: tx=(Gx−Px)/Pw, ty=(Gy−Py)/Ph tw=log(Gw/Pw), th=log(Gh/Ph)在做预测时,利用上述公式可以反求出预测框的修正位置。
R-CNN模型的训练是多管道的,CNN模型首先使用2012 ImageNet中的图像分类竞赛数据集进行预训练。然后在检测数据集上对CNN模型进行finetuning,其中那些与真实框的IoU大于0.5的候选区域作为正样本,剩余的候选区域是负样本(背景)。共训练两个版本,第一版本使用2012 PASCAL VOC数据集,第二个版本使用2013 ImageNet中的目标检测数据集。最后,对数据集中的各个类别训练SVM分类器
总体来看,R-CNN是非常直观的,就是把检测问题转化为了分类问题,并且采用了CNN模型进行分类,但是效果却很好。最好的R-CNN模型在2012 PASCAL VOC数据集的mAP为62.4%(比第二名高出了22个百分点),在2013 ImageNet上的mAP为31.4%(比第二名高出7.1个百分点)。
2. SPP-net
SPP-net(Spatial Pyramid Pooling in Deep Convolutional Networks for Visual Recognition, He et al. 2014)提出的起因是解决图像分类中要求输入图片固定大小的问题,但是SPP-net中所提出的空间金字塔池化层(Spatial Pyramid Pooling Layer, SPP)可以和R-CNN结合在一起并提升其性能。
采用深度学习模型解决图像分类问题时,往往需要图像的大小固定(比如224×224),这并不是CNN层的硬性要求,主要原因在于CNN层提取的特征图最后要送入全连接层(如softmax层),对于变大小图片,CNN层得到的特征图大小也是变化的,但是全连接层需要固定大小的输入,所以必须要将图片通过resize, crop或wrap等方式固定大小(训练和测试时都需要)。但是实际上真实的图片的大小是各种各样的,一旦固定大小可能会造成图像损失,从而影响识别精度。为了解决这个问题,SSP-net在CNN层与全连接层之间插入了空间金字塔池化层来解决这个矛盾。
SPP层原理,假定CNN层得到的特征图大小为a×a(比如13×1313×13,随输入图片大小而变化),设定的金字塔尺度为n×n bins(对于不同大小图片是固定的),那么SPP层采用一种滑动窗口池化,窗口大小win_size=⌈a/n⌉,步为stride=⌊a/n⌋,采用max pooling,本质上将特征图均分为n×n个子区域,然后对各个子区域max pooling,这样不论输入图片大小,经过SPP层之后得到是固定大小的特征。一般设置多个金字塔级别。一般采用44,22,1*1这种类似金字塔结构的池化单元组成方式,经过这些不同大小的池化单元提取特征之后,将经过该层后输出的不同大小的池化结果组合为一维向量,该向量作为全连接层输入,因此得到的全连接层输入固定。添加具有多尺度的空间金字塔池化层可以允许多个尺寸大小不同的图片直接输入,不用经过裁剪。SPP-net只需要将图像输入CNN一次而不像RCNN需要多次重复输入图像SPP-net在ImageNet ILSVRC 2014图像分类大赛中夺得了第三名。
那么SPP-net和R-CNN有什么关系呢?在R-CNN中,由于每个候选区域大小是不同,所以需要先resize成固定大小才能送入CNN网络,SPP-net正好可以解决这个问题。继续上前一步,就是R-CNN每次都要挨个使用CNN模型计算各个候选区域的特征,这是极其费时的,不如直接将整张图片送入CNN网络,然后抽取候选区域的对应的特征区域,采用SPP层,这样可以大大减少计算量,并提升速度。基于SPP层的R-CNN模型在准确度上提升不是很大,但是速度却比原始R-CNN模型快24-102倍。这也正是接下来Fast R-CNN所改进的方向。
3. Fast R-CNN
Fast R-CNN(Fast Region-based Convolutional Network, R. Girshick 2015)的提出主要是为了减少候选区域使用CNN模型提取特征向量所消耗的时间,其主要借鉴了SPP-net的思想。
在R-CNN中,每个候选区域都要单独送入CNN模型计算特征向量,这是非常费时的,而对于Fast R-CNN,其CNN模型的输入是整张图片,然后结合RoIs(Region of Interests)pooling和Selective Search方法从CNN得到的特征图中提取各个候选区域的所对应的特征。
对于每个候选区域,使用RoI pooling层来从CNN特征图中得到一个固定长和宽的特征图(长和宽是超参数,文中选用7×7),RoI pooling的原理很简单,其根据候选区域按比例从CNN特征图中找到对应的特征区域,然后将其分割成几个子区域(根据要输出的特征图的大小),然后在每个子区域应用max pooling,从而得到固定大小的特征图,这个过程是可导的。
RoI pooling层相比SPP层看起来主要是只使用一个金字塔级别。然后RoI pooling层得到的特征图送入几个全连接层中,并产生新的特征向量,这些特征向量分别用于一个softmax分类器(预测类别)和一个线性回归器上(用于调整边界框位置)来进行检测。
在实现上是使用两个不同的全连接层,第一个全连接层有N+1个输出(N是类别总数,1是背景),表示各个类别的概率值;第二个全连接层有4N个输出,表示坐标回归值(tx,ty,tw,th),这个与R-CNN是一样的,每个类别都预测4个位置坐标值。
Fast R-CNN与R-CNN的另外的一个主要区别点是采用了softmax分类器而不是SVM分类器,而且训练过程是单管道的,最好的Fast R-CNN模型在2007 PASCAL VOC测试集上的mAp为70%,在2010 PASCAL VOC测试集上的mAP为68.8%,而在2012 PASCAL VOC测试集上的mAP为68.4%,准确度相比R-CNN略有提升,其实主要是速度更快。
4. Faster R-CNN
对于Fast R-CNN,其仍然需要selective search方法来生产候选区域,这是非常费时的。为了解决这个问题,Faster R-CNN模型(The Faster Region-based Convolutional Network, S. Ren and al. 2016)引入了RPN (Region Proposal Network)直接产生候选区域。Faster R-CNN可以看成是RPN和Fast R-CNN模型的组合体,即Faster R-CNN = RPN + Fast R-CNN。
对于RPN网络,先采用一个CNN模型(一般称为特征提取器)接收整张图片并提取特征图。然后在这个特征图上采用一个N×N(文中是3×3)的滑动窗口,对于每个滑窗位置都映射一个低维度的特征(如256-d)。然后这个特征分别送入两个全连接层,一个用于分类预测,另外一个用于回归。对于每个窗口位置一般设置k个不同大小或比例的先验框(anchors, default bounding boxes),这意味着每个位置预测k个候选区域(region proposals)。对于分类层,其输出大小是2k,表示各个候选区域包含物体或者是背景的概率值,而回归层输出4k个坐标值,表示各个候选区域的位置(相对各个先验框)。对于每个滑窗位置,这两个全连接层是共享的。因此,RPN可以采用卷积层来实现:首先是一个n×n卷积得到低维特征,然后是两个1×1的卷积,分别用于分类与回归。
最好的Faster R-CNN模型在 2007 PASCAL VOC测试集上的mAP为78.8% ,而在2012 PASCAL VOC测试集上的mAP为75.9%。论文中还在 COCO数据集上进行了测试。Faster R-CNN中的某个模型可以比采用selective search方法的Fast R-CNN模型快34倍。可以看到,采用了RPN之后,无论是准确度还是速度,Faster R-CNN模型均有很大的提升。Faster R-CNN采用RPN代替启发式region proposal的方法,这是一个重大变革,后面的two-stage方法的研究基本上都采用这种基本框架,而且和后面算法相比,Faster R-CNN在准确度仍然占据上风。
5. Yolo
YOLO(You Only Look Once: Unified, Real-Time Object Detection),是Joseph Redmon和Ali Farhadi等人于2015年提出的基于单个神经网络的目标检测系统。在2017年CVPR上,Joseph Redmon和Ali Farhadi又发表的YOLO 2,进一步提高了检测的精度和速度。
YOLO是一个可以一次性预测多个Box位置和类别的卷积神经网络,能够实现端到端的目标检测和识别,其最大的优势就是速度快。事实上,目标检测的本质就是回归,因此一个实现回归功能的CNN并不需要复杂的设计过程。YOLO没有选择滑动窗口(silding window)或提取proposal的方式训练网络,而是直接选用整图训练模型。这样做的好处在于可以更好的区分目标和背景区域,相比之下,采用proposal训练方式的Fast-R-CNN常常把背景区域误检为特定目标。

三.目标检测算法——Yolo
YOLO 的核心思想就是利用整张图作为网络的输入,直接在输出层回归 bounding box(边界框) 的位置及其所属的类别。将一幅图像分成 SxS 个网格(grid cell),如果某个 object 的中心落在这个网格中,则这个网格就负责预测这个 object,
1.输出特征向量形式
每个网格要预测 B 个 bounding box,每个 bounding box 除了要回归自身的位置之外,还要附带预测一个 confidence 值。 这个 confidence 代表了所预测的 box 中含有 object 的置信度和这个 box 预测的有多准这两重信息,其值是这样计算的:
目标检测算法与YOLO
其中如果有 object 落在一个 grid cell 里,第一项取 1,否则取 0。 第二项是预测的 bounding box 和实际的 groundtruth 之间的 IoU 值。
每一个栅格还要预测C个 conditional class probability(条件类别概率):Pr(Classi|Object)。即在一个栅格包含一个Object的前提下,它属于某个类的概率。 我们只为每个栅格预测一组(C个)类概率,而不考虑框B的数量。
每个 bounding box 要预测 (x, y, w, h) 和 confidence 共5个值,每个网格还要预测一个类别信息,记为 C 类。则 SxS个 网格,每个网格要预测 B 个 bounding box 还要预测 C 个 categories。输出就是 S x S x (5*B+C) 的一个 tensor。(条件类别概率)conditional class probability信息是针对每个网格的。 (置信度)confidence信息是针对每个bounding box的。
在测试阶段,将每个栅格的conditional class probabilities与每个 bounding box的 confidence相乘:
目标检测算法与YOLO
这样既可得到每个bounding box的具体类别的confidence score。 这乘积既包含了bounding box中预测的class的 probability信息,也反映了bounding box是否含有Object和bounding box坐标的准确度。
2.网络结构
YOLO检测网络包括24个卷积层和2个全连接层,如图所示
目标检测算法与YOLO
3 损失函数
YOLO全部使用了均方和误差作为loss函数.由三部分组成:坐标误差、IOU误差和分类误差。loss=∑i=0s2coordErr+iouErr+clsErr
简单相加时还要考虑每种loss的贡献率,YOLO给coordErr设置权重λcoord=5.在计算IOU误差时,包含物体的格子与不包含物体的格子,二者的IOU误差对网络loss的贡献值是不同的。若采用相同的权值,那么不包含物体的格子的confidence值近似为0,变相放大了包含物体的格子的confidence误差在计算网络参数梯度时的影响。为解决这个问题,YOLO 使用λnoobj=0.5修正iouErr。(此处的‘包含’是指存在一个物体,它的中心坐标落入到格子内)。对于相等的误差值,大物体误差对检测的影响应小于小物体误差对检测的影响。这是因为,相同的位置偏差占大物体的比例远小于同等偏差占小物体的比例。YOLO将物体大小的信息项(w和h)进行求平方根来改进这个问题,但并不能完全解决这个问题。
综上,YOLO在训练过程中Loss计算如下式所示:
目标检测算法与YOLO
其中有宝盖帽子符号(x,y,w,h,C,p)为预测值,无帽子的为训练标记值。1objij表示物体落入格子i的第j个bbox内.如果某个单元格中没有目标,则不对分类误差进行反向传播;B个bbox中与GT具有最高IoU的一个进行坐标误差的反向传播,其余不进行.
4. Yolo v2
(1) 相比Yolo v1的改进
 Batchnorm
Batchnorm是2015年以后普遍比较流行的训练技巧,在每一层之后加入BN层可以将整个batch数据归一化到均值为0,方差为1的空间中,即将所有层数据规范化,防止梯度消失与梯度爆炸,加入BN层训练之后效果就是网络收敛更快,并且效果更好。YOLOv2在加入BN层之后mAP上升2%。
梯度消失:因为通常神经网络所用的**函数是sigmoid函数,这个函数有个特点,就是能将负无穷到正无穷的数映射到0和1之间,并且对这个函数求导的结果是f′(x)=f(x)(1−f(x))f′(x)=f(x)(1−f(x))。因此两个0到1之间的数相乘,得到的结果就会变得很小了。神经网络的反向传播是逐层对函数偏导相乘,因此当神经网络层数非常深的时候,最后一层产生的偏差就因为乘了很多的小于1的数而越来越小,最终就会变为0,从而导致层数比较浅的权重没有更新,这就是梯度消失。
梯度爆炸:梯度爆炸就是由于初始化权值过大,前面层会比后面层变化的更快,就会导致权值越来越大,梯度爆炸的现象就发生了。
 预训练尺寸
yolov1也在Image-Net预训练模型上进行fine-tune,但是预训练时网络入口为224 x 224,而fine-tune时为448 x 448,这会带来预训练网络与实际训练网络识别图像尺寸的不兼容。yolov2直接使用448 x 448的网络入口进行预训练,然后在检测任务上进行训练,效果得到3.7%的提升。
 更细网络划分
yolov2为了提升小物体检测效果,减少网络中pooling层数目,使最终特征图尺寸更大,如输入为416 x 416,则输出为13 x 13 x 125,其中13 x 13为最终特征图,即原图分格的个数,125为每个格子中的边界框构成(5 x (classes + 5))。需要注意的是,特征图尺寸取决于原图尺寸,但特征图尺寸必须为奇数,以此保存中间有一个位置能看到原图中心处的目标。
 全卷积网络
为了使网络能够接受多种尺寸的输入图像,yolov2除去了v1网络结构中的全连层,因为全连接层必须要求输入输出固定长度特征向量。将整个网络变成一个全卷积网络,能够对多种尺寸输入进行检测。同时,全卷积网络相对于全连接层能够更好的保留目标的空间位置信息。
 新基础网络
可以看出作者所使用的darknet-19作为基础预训练网络(共19个卷积层),能在保持高精度的情况下快速运算。而SSD使用的VGG-16作为基础网络,VGG-16虽然精度与darknet-19相当,但运算速度慢。
 anchor机制
yolov2为了提高精度与召回率,使用Faster-RCNN中的anchor机制。在每个网格设置k个参考anchor,训练以GT anchor作为基准计算分类与回归损失。测试时直接在每个格子上预测k个anchor box,每个anchor box为相对于参考anchor的offset与w,h的refine。这样把原来每个格子中边界框位置的全图回归(yolov1)转换为对参考anchor位置的精修(yolov2)。
至于每个格子中设置多少个anchor(即k等于几),作者使用了k-means算法离线对voc及coco数据集中目标的形状及尺度进行了计算。发现当k = 5时并且选取固定5比例值的时,anchors形状及尺度最接近voc与coco中目标的形状,并且k也不能太大,否则模型太复杂,计算量很大。
 残差层融合低级特征
为了使用网络能够更好检测小物体,作者使用了resnet跳级层结构,网络末端的高级特征层与前一层或者前几层的低级细粒度特征结合起来,增加网络对小物体的检测效果,使用该方法能够将mAP提高1%。
同样,在SSD检测器上也可以看出使用细粒度特征(低级特征)将进行小物体检测的思想,但是不同的是SSD直接在多个低级特征图上进行目标检测,因此,SSD对于小目标检测效果要优于YOLOv2,这点可以coco测试集上看出,因为coco上小物体比较多,但yolov2在coco上要明显逊色于ssd,但在比较简单的检测数据集voc上优于ssd。
 多尺寸训练
yolov2网络结构为全卷积网络FCN,可以适于不同尺寸图片作为输入,但要满足模型在测试时能够对多尺度输入图像都有很好效果,作者训练过程中每10个epoch都会对网络进行新的输入尺寸的训练。需要注意的是,因为全卷积网络总共对输入图像进行了5次下采样(步长为2的卷积或者池化层), 所以最终特征图为原图的1/32。所以在训练或者测试时,网络输入必须为32的位数。并且最终特征图尺寸即为原图划分网络的方式。

四.资料 代码
1 Fast R-CNN
可以通过以下GitHub链接查看模型的各种实现代码:
https://github.com/rbgirshick/fast-rcnn
https://github.com/precedenceguo/mx-rcnn
https://github.com/mahyarnajibi/fast-rcnn-torch
https://github.com/apple2373/chainer-simple-fast-rnn
https://github.com/zplizzi/tensorflow-fast-rcnn

2 Faster R-CNN
http://web.cs.hacettepe.edu.tr/~aykut/classes/spring2016/bil722/slides/w05-FasterR-CNN.pdf
Matlab
https://github.com/ShaoqingRen/faster_rcnn
Caffe
https://github.com/rbgirshick/py-faster-rcnn
MXNet
https://github.com/msracver/Deformable-ConvNets/tree/master/faster_rcnn
PyTorch
https://github.com//jwyang/faster-rcnn.pytorch
TensorFlow
https://github.com/smallcorgi/Faster-RCNN_TF
Keras
https://github.com/yhenon/keras-frcnn
C++
https://github.com/D-X-Y/caffe-faster-rcnn/tree/dev

3 SPP-Net(空间金字塔池化网络)
https://github.com/ShaoqingRen/SPP_net
http://zhangliliang.com/2014/09/13/paper-note-sppnet/

4 .YOLO模型
代码实现:
https://github.com/pjreddie/darknet
https://github.com/gliese581gg/YOLO_tensorflow
https://github.com/xingwangsfu/caffe-yolo
https://github.com/tommy-qichang/yolo.torch
https://github.com/nilboy/tensorflow-yolo
相关应用:
Darkflow:将darknet转换到tesorflow平台。加载训练好的权值,用tensorflow再次训练,再将导出计算图到C++环境中。
https://github.com/thtrieu/darkflow
使用你自己的数据训练YOLO模型。利用分类标签和自定义的数据进行训练,darknet支持Linux / Windows系统。
https://github.com/Guanghan/darknet
IOS上的YOLO实战:CoreML vs MPSNNGraph,用CoreML和新版MPSNNGraph的API实现小型YOLO。
https://github.com/hollance/YOLO-CoreML-MPSNNGraph
安卓上基于TensorFlow框架运行YOLO模型实现实时目标检测。
https://github.com/natanielruiz/android-yolo

  1. YOLOv2模型
    各种实现:
    Keras
    https://github.com/allanzelener/YAD2K
    PyTorch
    https://github.com/longcw/yolo2-pytorch
    Tensorflow
    https://github.com/hizhangp/yolo_tensorflow
    Windows
    https://github.com/AlexeyAB/darknet
    Caffe
    https://github.com/choasUp/caffe-yolo9000
    相关应用:
    Darknet_scripts是深度学习框架中YOLO模型中darknet的辅助脚本,生成YOLO模型中的参数anchors。
    https://github.com/Jumabek/darknet_scripts
    Yolo_mark:图形化标记用于训练YOLOv2模型的图像目标
    https://github.com/AlexeyAB/Yolo_mark
    LightNet:改进的DarkNet
    https://github.com//explosion/lightnet
    用于生成YOLOv2模型所需训练数据的边界框标记工具
    https://github.com/Cartucho/yolo-boundingbox-labeler-GUI
    Loss Rank Mining:基于实时目标检测的一种通用的困难样本挖掘方法。LRM是第一个高度适用于YOLOv2模型中的困难样本挖掘策略,它让YOLOv2模型能够更好的应用到对实时与准确率要求较高的场景中。
    https://arxiv.org/abs/1804.04606

推荐阅读
  • 微软头条实习生分享深度学习自学指南
    本文介绍了一位微软头条实习生自学深度学习的经验分享,包括学习资源推荐、重要基础知识的学习要点等。作者强调了学好Python和数学基础的重要性,并提供了一些建议。 ... [详细]
  • CF:3D City Model(小思维)问题解析和代码实现
    本文通过解析CF:3D City Model问题,介绍了问题的背景和要求,并给出了相应的代码实现。该问题涉及到在一个矩形的网格上建造城市的情景,每个网格单元可以作为建筑的基础,建筑由多个立方体叠加而成。文章详细讲解了问题的解决思路,并给出了相应的代码实现供读者参考。 ... [详细]
  • Gitlab接入公司内部单点登录的安装和配置教程
    本文介绍了如何将公司内部的Gitlab系统接入单点登录服务,并提供了安装和配置的详细教程。通过使用oauth2协议,将原有的各子系统的独立登录统一迁移至单点登录。文章包括Gitlab的安装环境、版本号、编辑配置文件的步骤,并解决了在迁移过程中可能遇到的问题。 ... [详细]
  • 都会|可能会_###haohaohao###图神经网络之神器——PyTorch Geometric 上手 & 实战
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了###haohaohao###图神经网络之神器——PyTorchGeometric上手&实战相关的知识,希望对你有一定的参考价值。 ... [详细]
  • 程度|也就是_论文精读:Neural Architecture Search without Training
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了论文精读:NeuralArchitectureSearchwithoutTraining相关的知识,希望对你有一定的参考价值。 ... [详细]
  • navicat生成er图_实践案例丨ACL2020 KBQA 基于查询图生成回答多跳复杂问题
    摘要:目前复杂问题包括两种:含约束的问题和多跳关系问题。本文对ACL2020KBQA基于查询图生成的方法来回答多跳复杂问题这一论文工作进行了解读 ... [详细]
  • 跨批次记忆在度量学习DML中的应用
    度量学习DML之ContrastiveLoss及其变种_程大海的博客-CSDN博客度量学习DML之TripletLoss_程大海的博客-CSDN博客度量学习DML之Lifted ... [详细]
  • 本文将给大家介绍五个十分可怕但还鲜为人知的人工智能机器学习项目,囊括了一些潜在的机器学习以及人工智能的新想法。它们基本都是Python项目。1.LiveLossPlo ... [详细]
  • YOLOv7基于自己的数据集从零构建模型完整训练、推理计算超详细教程
    本文介绍了关于人工智能、神经网络和深度学习的知识点,并提供了YOLOv7基于自己的数据集从零构建模型完整训练、推理计算的详细教程。文章还提到了郑州最低生活保障的话题。对于从事目标检测任务的人来说,YOLO是一个熟悉的模型。文章还提到了yolov4和yolov6的相关内容,以及选择模型的优化思路。 ... [详细]
  • 推荐系统遇上深度学习(十七)详解推荐系统中的常用评测指标
    原创:石晓文小小挖掘机2018-06-18笔者是一个痴迷于挖掘数据中的价值的学习人,希望在平日的工作学习中,挖掘数据的价值, ... [详细]
  • 本文介绍了一些Java开发项目管理工具及其配置教程,包括团队协同工具worktil,版本管理工具GitLab,自动化构建工具Jenkins,项目管理工具Maven和Maven私服Nexus,以及Mybatis的安装和代码自动生成工具。提供了相关链接供读者参考。 ... [详细]
  • 在Xamarin XAML语言中如何在页面级别构建ControlTemplate控件模板
    本文介绍了在Xamarin XAML语言中如何在页面级别构建ControlTemplate控件模板的方法和步骤,包括将ResourceDictionary添加到页面中以及在ResourceDictionary中实现模板的构建。通过本文的阅读,读者可以了解到在Xamarin XAML语言中构建控件模板的具体操作步骤和语法形式。 ... [详细]
  • 本文介绍了使用Spark实现低配版高斯朴素贝叶斯模型的原因和原理。随着数据量的增大,单机上运行高斯朴素贝叶斯模型会变得很慢,因此考虑使用Spark来加速运行。然而,Spark的MLlib并没有实现高斯朴素贝叶斯模型,因此需要自己动手实现。文章还介绍了朴素贝叶斯的原理和公式,并对具有多个特征和类别的模型进行了讨论。最后,作者总结了实现低配版高斯朴素贝叶斯模型的步骤。 ... [详细]
  • 通过Anaconda安装tensorflow,并安装运行spyder编译器的完整教程
    本文提供了一个完整的教程,介绍了如何通过Anaconda安装tensorflow,并安装运行spyder编译器。文章详细介绍了安装Anaconda、创建tensorflow环境、安装GPU版本tensorflow、安装和运行Spyder编译器以及安装OpenCV等步骤。该教程适用于Windows 8操作系统,并提供了相关的网址供参考。通过本教程,读者可以轻松地安装和配置tensorflow环境,以及运行spyder编译器进行开发。 ... [详细]
  • 本文介绍了利用ARMA模型对平稳非白噪声序列进行建模的步骤及代码实现。首先对观察值序列进行样本自相关系数和样本偏自相关系数的计算,然后根据这些系数的性质选择适当的ARMA模型进行拟合,并估计模型中的位置参数。接着进行模型的有效性检验,如果不通过则重新选择模型再拟合,如果通过则进行模型优化。最后利用拟合模型预测序列的未来走势。文章还介绍了绘制时序图、平稳性检验、白噪声检验、确定ARMA阶数和预测未来走势的代码实现。 ... [详细]
author-avatar
天眞啲笨尛孩
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有