• yolo算法笔记


    Yolo算法笔记

    目标检测方法yolo(You only look once),看一眼就可识别目标。与R-CNN比,有以下特点(Faster-RCNN 中RPN网络吸取了该特点):

    1. 速度很快
    2. 看到全局信息,而非R-CNN产生一个个切割的目标,由此对背景的识别效率很高
    3. 可从产生的有代表性的特征中学习。

    流程:

    以PASCAL VOC数据集为例。

    1.  输入448X448大小的图片,通过预训练的卷积网络(VGG系列等)对特征进行提取(如图),最后输出7X7大小的网络单元。

    2.  每个网络单元预测2个预测框(不同长宽比),每个预测框预测该部分内包含的物体位置,分类和置信度预测。所以整体数据维度为7X7X(2*(4+1)+20 ). 其中每个预       测单元包括4个位置信息(x,y,w,h),1个置信度(与真实物体的IOU),20个类别信息为两个预测框共有。

    3.  如果该物体中心在该预测框内,则包含该物体。置信度为IOU*预测框包含物体的概率,其中每个预测框的置信度与类别信息相乘,得到类别置信度。之后对所有的      预测框,根据类别置信度进行NMS。

    NMS过程:对每一个类别,将类别置信度小于0.2的预测框得分设置为0,对置信度按从大到小排序,将最大的保留,之后每一个预测框计算与最大置信度预测框计算IOU,将IOU大于0.5的预测框得分设置为0。最后部分即为预测,损失函数如下(与RCNN相比略微复杂,之后的系列逐渐趋同):

     

     

    训练时现在ImageNet上进行了预训练,网络使用途中网络前20个卷积层加一个平局池化和全连接层。预训练之后,加上随机初始化的4个卷积层和2个全连接层。

    Yolov2/yolo9000

    相对于yolov1,yolov2做了如下改进:

    更好

    1. 设置BN层。防止梯度消失及爆炸。使数据分布更加相似,可提高训练速度及泛化性能。
    2. 更高精度。Yolov1使用224x224进行预训练,yolov2直接使用448x448进行预训练,之后在此基础上在进行fine-tun
    3. 去除FC层及最后pooling层,直接使用卷积层单元来预测,分成13x13(单数,因为发现大物体中心经常落在图片中心)。且引入anchor boxes概念, anchor boxes的数量及大小比例是通过聚类方式确定的。聚类后5为最优值
    4. 直接的位置预测。如下图,直接预测出边框位置。Tx等为归一化后的偏移,之后可直接算出预测框位置即Bx等(参考RCNN系列预测位置偏移)。

     

    5 不同尺度的预训练,每隔10个epoch,输入图片尺度增加32{320,352,…608}

    6 网络结构采用Fine-Grained Features,即采用不同的卷积特征层,以便提取不同精细度的特征。看源码含义为比如64*64可分为4个32*32然后叠加起来。与Faster-RCNN的跨层联结上有一点不同

    更快

    1. 引入Darknet-19
    2. 分类和检测分开,分类时先使用224X224训练,之后将尺度改为448x448。之后检测时去掉网络最后一个卷积层,每个卷积层接3个3X3X1024  卷积,每个卷积接1X1卷积层。

    更强

    即能检测出9000个类别。对此段并不是很理解。翻译论文即采用树状结构,使用ImageNet(分类)和COCO(预测)联合训练。训练时,如果检测样本,按yolov2 loss计算误差,对分类样本,只计算分类误差。预测时,置信度为分类概率,同时会给出边界框位置寄一个树状概率图,在这个概率图中找到概率最高的路径,当达到某一阈值时停止,就用当前节点表示预测的类别。

     

     

    Yolov3:

    改进:

    1. 引入残差网络,使用Darknet-53网络。

    2. 采用3个不同尺度的卷积,yolov2是将两个尺度的特征图连接起来。yolov3为三个特征图,且做了不同处理。每个尺度的卷积图使用3个anchor。共3*3个anchor

    3. 损失函数改进。类别预测由softmax改为n个sigmoid.

    更像是对yolo系列算法的一个总结,整体突破不太大。下个会对yolov3的tensorflow/keras源码进行解析

  • 相关阅读:
    GlusterFS分布式文件系统部署
    bower解决js的依赖管理
    Linux如何查看当前占用CPU或内存最多的几个进程
    WIN7无法卸载掉中文繁体注音输入法
    kafka消费者报错INVALID_FETCH_SESSION_EPOCH
    Hbase报错:org.apache.hadoop.hbase.ipc.ServerNotRunningYetException: Server is not running yet
    Prometheus一条告警是怎么触发的
    prometheus client_golang使用
    prometheus告警插件-alertmanager
    sed替换变量
  • 原文地址:https://www.cnblogs.com/the-home-of-123/p/9691681.html
Copyright © 2020-2023  润新知