精华内容
下载资源
问答
  • 授权转载自公众号:论智(jqr_AI),转载联系出处。每次丢了东西,我们都希望有一种方法能快速...在这篇文章中,我们会进一步地了解这些用在目标检测中的算法,首先要从RCNN家族开始,例如RCNNFast RCNN和Faster RCNN...
    授权转载自公众号:论智(jqr_AI),转载联系出处。

    每次丢了东西,我们都希望有一种方法能快速定位出失物。现在,目标检测算法或许能做到。目标检测的用途遍布多个行业,从安防监控,到智慧城市中的实时交通监测。简单来说,这些技术背后都是强大的深度学习算法。

    在这篇文章中,我们会进一步地了解这些用在目标检测中的算法,首先要从RCNN家族开始,例如RCNN、Fast RCNN和Faster RCNN。在本系列接下来的文章中我们会谈到更高级的算法,例如YOLO、SSD等等。

    1. 解决目标检测任务的简单方法(利用深度学习)

    下图是描述目标检测算法如何工作的典型例子,图中的每个物体(不论是任务还是风筝),都能以一定的精确度被定位出来。

    dd3342bc27a339b990f6f1aa14e50d81.png

    首先我们要说的就是在图像目标检测中用途最广、最简单的深度学习方法——卷积神经网络(CNN)。我要讲的是CNN的内部工作原理,首先让我们看看下面这张图片。

    36759b5438a49ca7d5d7ef74118afbe5.png

    向网络中输入一张图片,接着将它传递到多个卷积和池化层中。最后输出目标所属的类别,听上去非常直接。

    对每张输入的图片,我们都有对应的输出类别,那么这一技术能检测图片中多种目标吗?答案是肯定的!下面就让我们看看如何用一个卷积神经网络解决通用的目标检测问题。

    1.首先,我们把下面的图片用作输入:

    710c8672c6284517eac9a5bb225d4321.png

    2.之后,我们将图片分成多个区域:

    137576d7b20291501cc99fd5298715d8.png

    3.将每个区域看作单独的图片。

    4.把这些区域照片传递给CNN,将它们分到不同类别中。

    5.当我们把每个区域都分到对应的类别后,再把它们结合在一起,完成对原始图像的目标检测:

    79b24d98c1f2da2fa2b0271306e9bc1e.png

    使用这一方法的问题在于,图片中的物体可能有不同的长宽比和空间位置。例如,在有些情况下,目标物体可能占据了图片的大部分,或者非常小。目标物体的形状也可能不同。

    有了这些考虑因素,我们就需要分割很多个区域,需要大量计算力。所以为了解决这一问题,减少区域的分割,我们可以使用基于区域的CNN,它可以进行区域选择。

    2. 基于区域的卷积神经网络介绍

    2.1 RCNN简介

    和在大量区域上工作不同,RCNN算法提出在图像中创建多个边界框,检查这些边框中是否含有目标物体。RCNN使用选择性搜索来从一张图片中提取这些边框。

    首先,让我们明确什么是选择性搜索,以及它是如何辨别不同区域的。组成目标物体通常有四个要素:变化尺度、颜色、结构(材质)、所占面积。选择性搜索会确定物体在图片中的这些特征,然后基于这些特征突出不同区域。下面是选择搜索的一个简单案例:

    • 首先将一张图片作为输入:

    8636af8ee5dd374f4a1cd992254593ae.png

    • 之后,它会生成最初的sub-分割,将图片分成多个区域:

    12ffc652746c33a26f4a6c25b4e969f8.png

    • 基于颜色、结构、尺寸、形状,将相似的区域合并成更大的区域:

    9e197932f64d90f4ae616903faf8bc59.png

    • 最后,生成最终的目标物体位置(Region of Interest)。

    用RCNN检测目标物体的步骤如下:

    1. 我们首先取一个预训练卷积神经网络。

    2. 根据需要检测的目标类别数量,训练网络的最后一层。

    3. 得到每张图片的感兴趣区域(Region of Interest),对这些区域重新改造,以让其符合CNN的输入尺寸要求。

    4. 得到这些区域后,我们训练支持向量机(SVM)来辨别目标物体和背景。对每个类别,我们都要训练一个二元SVM。

    5. 最后,我们训练一个线性回归模型,为每个辨识到的物体生成更精确的边界框。

    下面我们就用具体的案例解释一下。

    • 首先,将以下图片作为输入:

    3e288ca50dfce558e97a502bb52c4230.png

    • 之后,我们会用上文中的选择性搜索得到感兴趣区域:

    43989db4942e97dc28643b83805ac527.png

    • 将这些区域输入到CNN中,并经过卷积网络:

    5036164034fad52f9753c80e77d1129d.png

    • CNN为每个区域提取特征,利用SVM将这些区域分成不同类别:

    b8dc97a7e4737de2b63fd596fafe7e22.png

    • 最后,用边界框回归预测每个区域的边界框位置:

    89ffc69e373a2e44be93cd054dbf6979.png

    这就是RCNN检测目标物体的方法。

    2.2 RCNN的问题

    现在,我们了解了RCNN能如何帮助进行目标检测,但是这一技术有自己的局限性。训练一个RCNN模型非常昂贵,并且步骤较多:

    • 根据选择性搜索,要对每张图片提取2000个单独区域;

    • 用CNN提取每个区域的特征。假设我们有N张图片,那么CNN特征就是N*2000;

    • 用RCNN进行目标检测的整个过程有三个模型:

    1. 用于特征提取的CNN

    2. 用于目标物体辨别的线性SVM分类器

    3. 调整边界框的回归模型。

    这些过程合并在一起,会让RCNN的速度变慢,通常每个新图片需要40—50秒的时间进行预测,基本上无法处理大型数据集。

    所以,这里我们介绍另一种能突破这些限制的目标检测技术。

    3. Fast RCNN

    3.1 Fast RCNN简介

    想要减少RCNN算法的计算时间,可以用什么方法?我们可不可以在每张图片上只使用一次CNN即可得到全部的重点关注区域呢,而不是运行2000次。

    RCNN的作者Ross Girshick提出了一种想法,在每张照片上只运行一次CNN,然后找到一种方法在2000个区域中进行计算。在Fast RCNN中,我们将图片输入到CNN中,会相应地生成传统特征映射。利用这些映射,就能提取出感兴趣区域。之后,我们使用一个Rol池化层将所有提出的区域重新修正到合适的尺寸,以输入到完全连接的网络中。

    简单地说,这一过程含有以下步骤:

    1. 输入图片。

    2. 输入到卷积网络中,它生成感兴趣区域。

    3. 利用Rol池化层对这些区域重新调整,将其输入到完全连接网络中。

    4. 在网络的顶层用softmax层输出类别。同样使用一个线性回归层,输出相对应的边界框。

    所以,和RCNN所需要的三个模型不同,Fast RCNN只用了一个模型就同时实现了区域的特征提取、分类、边界框生成。

    同样,我们还用上面的图像作为案例,进行更直观的讲解。

    • 首先,输入图像:

    3e288ca50dfce558e97a502bb52c4230.png

    图像被传递到卷积网络中,返回感兴趣区域:

    0dba90a8f8c8a1bc68e166301a0b1486.png

    之后,在区域上应用Rol池化层,保证每个区域的尺寸相同:

    9e57931baa6bcaabf512ea579da01873.png

    最后,这些区域被传递到一个完全连接的网络中进行分类,并用softmax和线性回归层同时返回边界框:

    768e1c30eb62ad1bcbac8e85aa59bb62.png

    3.2 Fast RCNN的问题

    但是即使这样,Fast RCNN也有某些局限性。它同样用的是选择性搜索作为寻找感兴趣区域的,这一过程通常较慢。与RCNN不同的是,Fast RCNN处理一张图片大约需要2秒。但是在大型真实数据集上,这种速度仍然不够理想。

    4.Faster RCNN

    4.1 Faster RCNN简介

    Faster RCNN是Fast RCNN的优化版本,二者主要的不同在于感兴趣区域的生成方法,Fast RCNN使用的是选择性搜索,而Faster RCNN用的是Region Proposal网络(RPN)。RPN将图像特征映射作为输入,生成一系列object proposals,每个都带有相应的分数。

    下面是Faster RCNN工作的大致过程:

    1. 输入图像到卷积网络中,生成该图像的特征映射。

    2. 在特征映射上应用Region Proposal Network,返回object proposals和相应分数。

    3. 应用Rol池化层,将所有proposals修正到同样尺寸。

    4. 最后,将proposals传递到完全连接层,生成目标物体的边界框。

    41fd6d53b25b64bccfe67854d1f8ded1.png

    那么Region Proposal Network具体是如何工作的呢?首先,将CNN中得来的特征映射输入到Faster RCNN中,然后将其传递到Region Proposal Network中。RPN会在这些特征映射上使用一个滑动窗口,每个窗口会生成具有不同形状和尺寸的k个anchor box:

    0efb960de56949ee400d4bfd4d01c0dc.png

    Anchor boxes是固定尺寸的边界框,它们有不同的形状和大小。对每个anchor,RPN都会预测两点:

    • 首先是anchor就是目标物体的概率(不考虑类别)

    • 第二个就是anchor经过调整能更合适目标物体的边界框回归量

    现在我们有了不同形状、尺寸的边界框,将它们传递到Rol池化层中。经过RPN的处理,proposals可能没有所述的类别。我们可以对每个proposal进行切割,让它们都含有目标物体。这就是Rol池化层的作用。它为每个anchor提取固定尺寸的特征映射:

    7adaf16f6e585364114a26a9013cafc9.png

    之后,这些特征映射会传递到完全连接层,对目标进行分类并预测边界框。

    4.2 Faster RCNN的问题

    目前为止,我们所讨论的所有目标检测算法都用区域来辨别目标物体。网络并非一次性浏览所有图像,而是关注图像的多个部分。这就会出现两个问题:

    • 算法需要让图像经过多个步骤才能提取出所有目标

    • 由于有多个步骤嵌套,系统的表现常常取决于前面步骤的表现水平

    5. 上述算法总结

    下表对本文中提到的算法做了总结:

    304ff15d704ab032b3a383b5a802910e.png

    目标检测是很有趣的领域,在商业中也大有前景。得益于现代硬件和计算资源的发展,才能让这一技术有重要的突破。

    本文只是目标检测算法的开门介绍,在下一篇文章中,我们会讲解YOLO、RetinaNet这样更流行的算法,请继续关注!

    原文地址:

    www.analyticsvidhya.com/blog/2018/10/a-step-by-step-introduction-to-the-basic-object-detection-algorithms-part-1/

    我爱小詹 

    c106daa422e1b30dbb6024d285371944.png

     / 今日互动 / 

    留言主题 : 看了本文 ,谈一谈你对目标检测的看法,考虑到专业基础不一样,任何相关主题都ok !

    留言格式 —— Day xx : blablabla ;这里强调下 ,不符合主题和格式的打卡不移入精选,打卡无效噢 !兑换的时候会核实打卡情况 ,断打卡的记得从 Day.01 开始 ~

    推荐阅读:

    深度学习入门笔记系列 8 篇

    这么硬的干货,不给个好看?!

    fffc627fc4cbdce79af15e75796b680f.png

    欢迎关注这个骚包程序猿?

    展开全文
  • 在前面的文章中,已经介绍了基于SSD使用自己的数据训练目标检测模型(见文章:手把手教你训练自己的目标检测模型),本文将基于另一个目标检测模型YOLO,介绍如何使用自己的数据进行训练。YOLO(You only look once)是...
    50e6c8596e1a08bc510b93061d8296c3.png

    在前面的文章中,已经介绍了基于SSD使用自己的数据训练目标检测模型(见文章:手把手教你训练自己的目标检测模型),本文将基于另一个目标检测模型YOLO,介绍如何使用自己的数据进行训练。

    9522ea9f47aa7a77157f6c5351c3ca12.png

    YOLO(You only look once)是目前流行的目标检测模型之一,目前最新已经发展到V3版本了,在业界的应用也很广泛。YOLO的基本原理是:首先对输入图像划分成7x7的网格,对每个网格预测2个边框,然后根据阈值去除可能性比较低的目标窗口,最后再使用边框合并的方式去除冗余窗口,得出检测结果,如下图:

    993a0402ec2738bc00e9f103e499396a.png

    YOLO的特点就是“快”,但由于YOLO对每个网格只预测一个物体,就容易造成漏检,对物体的尺度相对比较敏感,对于尺度变化较大的物体泛化能力较差。

    本文的目标仍旧是在图像中识别检测出可爱的熊猫

    40a92b440ce0c9bc5454c89d04401bf2.png

    基于YOLO使用自己的数据训练目标检测模型,训练过程跟前面文章所介绍的基于SSD训练模型一样,主要步骤如下:

    24a432c61b11aa1d8d875dccda3eefd1.png

    1、安装标注工具

    本案例采用的标注工具是labelImg,在前面的文章介绍训练SSD模型时有详细介绍了安装方法(见文章:手把手教你训练自己的目标检测模型),在此就不再赘述了。

    成功安装后的labelImg标注工具,如下图:

    0b6170c530a2a0613d64b89fe4e4ba29.png

    2、标注数据

    使用labelImg工具对熊猫照片进行画框标注,自动生成VOC_2007格式的xml文件,保存为训练数据集。操作方式跟前面的文章介绍训练SSD模型的标注方法一样(见文章:手把手教你训练自己的目标检测模型),在此就不再赘述了。

    63ef921af19ffe61464352d0bac3e7f9.png

    3、配置YOLO

    (1)安装Keras

    ff0402de55ee13c37b3b8885e2f7b350.png

    本案例选用YOLO的最新V3版本,基于Keras版本。Keras是一个高层神经网络API,以Tensorflow、Theano和CNTK作为后端。由于本案例的基础环境(见文章:AI基础环境搭建)已经安装了tensorflow,因此,Keras底层将会调用tensorflow跑模型。Keras安装方式如下:

    # 切换虚拟环境source activate tensorflow# 安装keras-gpu版本conda install keras-gpu# 如果是安装 keras cpu版本,则执行以下指令#conda install keras

    keras版本的yolo3还依赖于PIL工具包,如果之前没安装的,也要在anaconda中安装

    # 安装 PILconda install pillow

    (2)下载yolo3源代码

    在keras-yolo3的github上下载源代码(https://github.com/qqwweee/keras-yolo3),使用git进行clone或者直接下载成zip压缩文件。

    c32c3a0f2f7af06022c1887f2d0390d3.png

    (3)导入PyCharm

    打开PyCharm,新建项目,将keras-yolo3的源代码导入到PyCharm中

    4f2b8a3ede405289ca1af0a0f39971f7.png

    4、下载预训练模型

    YOLO官网上提供了YOLOv3模型训练好的权重文件,把它下载保存到电脑上。下载地址为https://pjreddie.com/media/files/yolov3.weights

    5、训练模型

    接下来到了关键的步骤:训练模型。在训练模型之前,还有几项准备工作要做。

    (1)转换标注数据文件

    YOLO采用的标注数据文件,每一行由文件所在路径、标注框的位置(左上角、右下角)、类别ID组成,格式为:image_file_path x_min,y_min,x_max,y_max,class_id

    例子如下:

    3a4c12076c972bde106d398b23ecf262.png

    这种文件格式跟前面制作好的VOC_2007标注文件的格式不一样,Keras-yolo3里面提供了voc格式转yolo格式的转换脚本 voc_annotation.py

    在转换格式之前,先打开voc_annotation.py文件,修改里面的classes的值。例如本案例在voc_2007中标注的熊猫的物体命名为panda,因此voc_annotation.py修改为:

    import xml.etree.ElementTree as ETfrom os import getcwdsets=[('2007', 'train'), ('2007', 'val'), ('2007', 'test')]classes = ["panda"]

    新建文件夹VOCdevkit/VOC2007,将熊猫的标注数据文件夹Annotations、ImageSets、JPEGImages放到文件夹VOCdevkit/VOC2007里面,然后执行转换脚本,代码如下:

    mkdir VOCdevkitmkdir VOCdevkit/VOC2007mv Annotations VOCdevkit/VOC2007mv ImageSets VOCdevkit/VOC2007mv JPEGImages VOCdevkit/VOC2007source activate tensorflowpython voc_annotation.py

    转换后,将会自动生成yolo格式的文件,包括训练集、测试集、验证集。

    21c42ef203ffd7beee85ccb30f856732.png

    (2)创建类别文件

    在PyCharm导入的keras-yolo3源代码中,在model_data目录里面新建一个类别文件my_class.txt,将标注物体的类别写到里面,每行一个类别,如下:

    28d87823351f2884fba99628d0452b32.png

    (3)转换权重文件

    将前面下载的yolo权重文件yolov3.weights转换成适合Keras的模型文件,转换代码如下:

    source activate tensorflowpython convert.py -w yolov3.cfg yolov3.weights model_data/yolo_weights.h5

    (4)修改训练文件的路径配置

    修改train.py里面的相关路径配置,主要有:annotation_path、classes_path、weights_path

    3ce39fffc5762e3ece01b87fbe200cda.png

    其中,train.py里面的batch_size默认是32(第57行),指每次处理时批量处理的数量,数值越大对机器的性能要求越高,因此可根据电脑的实际情况进行调高或调低

    (5)训练模型

    经过以上的配置后,终于全部都准备好了,执行train.py就可以开始进行训练。

    f34915497ca746a591eaac41e5418d2b.png

    训练后的模型,默认保存路径为logs/000/trained_weights_final.h5,可以根据需要进行修改,位于train.py的第85行,可修改模型保存的名称。

    6、使用模型

    完成模型的训练之后,调用yolo.py即可使用我们训练好的模型。

    首先,修改yolo.py里面的模型路径、类别文件路径,如下:

    class YOLO(object): _defaults = { "model_path": 'logs/000/trained_weights_final.h5', "anchors_path": 'model_data/yolo_anchors.txt', "classes_path": 'model_data/my_classes.txt', "score" : 0.3, "iou" : 0.45, "model_image_size" : (416, 416), "gpu_num" : 1, }

    通过调用 YOLO类就能使用YOLO模型,为方便测试,在yolo.py最后增加以下代码,只要修改图像路径后,就能使用自己的yolo模型了

    if __name__ == '__main__': yolo=YOLO() path = '/data/work/tensorflow/data/panda_test/1.jpg' try: image = Image.open(path) except: print('Open Error! Try again!') else: r_image, _ = yolo.detect_image(image) r_image.show() yolo.close_session()

    执行后,可爱的熊猫就被乖乖圈出来了,呵呵

    d3c4662a7360f9b6cf70fc89a83a56ab.png

    通过以上步骤,我们又学习了基于YOLO来训练自己的目标检测模型,这样在应用中可以结合实际需求,使用SSD、YOLO训练自己的数据,并从中选择出效果更好的目标检测模型。

    关注本人公众号“大数据与人工智能Lab”(BigdataAILab),然后回复“代码”关键字可获取 完整源代码。

    32ec3d3e707c59db26aa9d78d1701c75.png
    512fa49e5794f23665f423503f13301f.png

    推荐相关阅读

    • 【AI实战】快速掌握TensorFlow(一):基本操作
    • 【AI实战】快速掌握TensorFlow(二):计算图、会话
    • 【AI实战】快速掌握TensorFlow(三):激励函数
    • 【AI实战】快速掌握TensorFlow(四):损失函数
    • 【AI实战】搭建基础环境
    • 【AI实战】训练第一个模型
    • 【AI实战】编写人脸识别程序
    • 【AI实战】动手训练目标检测模型(SSD篇)
    • 【AI实战】动手训练目标检测模型(YOLO篇)
    • 【精华整理】CNN进化史
    • 大话卷积神经网络(CNN)
    • 大话循环神经网络(RNN)
    • 大话深度残差网络(DRN)
    • 大话深度信念网络(DBN)
    • 大话CNN经典模型:LeNet
    • 大话CNN经典模型:AlexNet
    • 大话CNN经典模型:VGGNet
    • 大话CNN经典模型:GoogLeNet
    • 大话目标检测经典模型:RCNN、Fast RCNN、Faster RCNN
    • 大话目标检测经典模型:Mask R-CNN
    • 27种深度学习经典模型
    • 浅说“迁移学习”
    • 什么是“强化学习”
    • AlphaGo算法原理浅析
    • 大数据究竟有多少个V
    • Apache Hadoop 2.8 完全分布式集群搭建超详细教程
    • Apache Hive 2.1.1 安装配置超详细教程
    • Apache HBase 1.2.6 完全分布式集群搭建超详细教程
    • 离线安装Cloudera Manager 5和CDH5(最新版5.13.0)超详细教程

    参考文献:K码农-http://kmanong.top/kmn/qxw/form/home?top_cate=28

    展开全文
  • 什么是EasyDL专业版 EasyDL专业版是EasyDL在2019年10月下旬全新推出的针对AI初学者或者AI专业工程师的企业用户及开发者推出的AI模型训练与服务平台,目前支持视觉及自然语言处理两大技术方向,内置百度海量数据训练...

    1.    简介
    1.1.    什么是EasyDL专业版
    EasyDL专业版是EasyDL在2019年10月下旬全新推出的针对AI初学者或者AI专业工程师的企业用户及开发者推出的AI模型训练与服务平台,目前支持视觉及自然语言处理两大技术方向,内置百度海量数据训练的预训练模型,可灵活脚本调参,只需少量数据可达到优模型效果。
    适用人群:
    专业AI工程师且追求灵活、深度调参的企业或个人开发者
    支持定制模型类型。
    1.2.    支持视觉及自然语言处理两大技术方向:
    视觉:支持图像分类及物体检测两类模型训练。
    任务类型: 预置算法
    图像分类:Resnet(50,101)、Se_Resnext(50,101)、Mobilenet Nasnet
    物体检测:FasterRCNN、YoloV3、mobilenetSSD
    自然语言处理:支持文本分类及短文本匹配两类模型训练,内置百度百亿级数据所训练出的预训练模型ENNIE.
    ERNIE(艾尼)是百度自研持续学习语义理解框架,该框架可持续学习海量数据中的知识。基于该框架的ERNIE2.0预训练模型,已累计学习10亿多知识,中英文效果全面领先,适用于各类NLP应用场景。
    任务类型 :预置网络
    文本分类:BOW、CNN、GRU、TextCNN、LSTM、BiLSTM
    短文本匹配:SimNet(BOW、CNN、GRU、LSTM)、FC
    1.3.    EasyDL专业版特点
    预置百度百亿级数据规模的预训练模型,包括丰富的视觉模型及自然语言处理模型ERNIE,训练效果更突出。
    对比经典版,支持代码级调整模型参数和模型结构,封装底层算法逻辑细节,代码行数更少,更易有算法基础的开发者上手。
    支持从数据管理,模型训练到模型部署一站式AI服务。
    如果说EasyDL经典版是倚天剑,PaddlePaddle是屠龙刀,那么EasyDL专业版就是刀剑合璧。

    2. 评测案例

    该应用为一个特种车辆识别的应用,主要识别邮车和消防车,未来可以扩展加入更多的车辆种类,对于特种车辆管理有很好的应用价值。

    2.1.    整体说明
    EasyDL专业版的工作流程如下图所示:

    0320ae0dcd73e953bc151787cbd6a40c.png

    EasyDL专业版的主界面如下图所示:

    a6c19ef8921dc4c45c7a2c4a89e42f93.png

    2.2.    业务需求:
    需要对各种特种车辆进行识别,在本评测中为邮车、消防车两种。2.3.    上传并标注数据:
    首先需要建立特种车辆数据集,在主界面上点击“数据管理/标注”就可以进入数据管理界面,具体步骤如下:

    1.设计标签
    在上传之前确定想要识别哪几种物体,并上传含有这些物体的图片。每个标签对应想要在图片中识别出的一种物体。在本例中只有2个标签,就是邮车(标签:youche)和消防车(标签:xiaofang)。
    例如:

    bc9af9fe406f5a671bd53dc198ed7bf9.png

    2.准备图片
    基于设计好的标签准备图片:
    每种要识别的物体在所有图片中出现的数量最好大于50
    如果某些标签的图片具有相似性,需要增加更多图片
    一个模型的图片总量限制4张~10万张
    图片格式要求:
    •    目前支持图片类型为png、jpg、bmp、jpeg,图片大小限制在4M以内
    •    图片长宽比在3:1以内,其中最长边小于4096px,最短边大于30px
    图片内容要求:
    •    训练图片和实际场景要识别的图片拍摄环境一致,举例:如果实际要识别的图片是摄像头俯拍的,那训练图片就不能用网上下载的目标正面图片。
    •    每个标签的图片需要覆盖实际场景里面的可能性,如拍照角度、光线明暗的变化,训练集覆盖的场景越多,模型的泛化能力越强。
    本例中从网上找了30多张不同角度的特种车辆图片。(因为是测试版,所以图片较少,实际应用的时候每种标签的图片不应少于50)

    ba383ef4a53c11a7337bf1d889dcce07.png

    3.    上传和标注图片
    先在【创建数据集】页面创建数据集:
    如果训练数据需要多人分工标注,可以创建多个数据集。将训练数据分批上传到这些数据集后,再将数据集"共享"给自己的小伙伴,同步进行标注。

    再进入【数据标注/上传】:

    1、选择数据集
    2、上传已准备好的图片
    3、在标注区域内进行标注
    首先在标注框上方找到工具栏,点击标注按钮在图片中拖动画框,圈出要识别的目标。
    如下图所示:

    61265ed1b4bf40d61adf4b836142a4e5.png

    然后在右侧的标签栏中,增加新标签,或选择已有标签2.4.    创建项目和任务
    在主界面点击“全部训练任务”即可进入项目界面:

    12b06d0367b6e81fa770e9739cb83668.png

    点击新建项目,填写相关信息信息,即可创建项目。

    5849e945ded5e3aac325be3d5225f466.png

    在本次评测中我们使用物体检测。

    40dee4e9d042ad4ef6acbe961c7b1430.png

    创建项目后在新建的项目内选择创建任务,以建立一个新的任务:

    87cc5cbf936866f05bff1563b1f907d1.png

    按要求输入信息,数据集及验证集选择我们上一步建立的数据集youche和youchevalid。

    98179448b7f6a55712a6b7802019a913.png

    网络方面,因为我们这次主要是对位置进行确认,对BoundingBox要求不高,所以先选用YOLO。

    baf37c5a588e9ce74a48ae8cc4e4d48e.png

    大家看脚本编辑框里面的内容可以发现就是采用PaddlePaddle实现模型功能的Python代码。点击脚本编辑框里面的立即编辑按钮可以对生成的脚本进行编辑,方便进行客户化的定制。
    选择保存就可以将任务保存。2.5.    训练模型
    在任务界面中点击提交训练任务,就可以开始训练模型,因为我们这次准备的数据不多,所以有一个提示,点击继续训练就好:

    f5ac45c6bae98f48230452393685049d.png
    运行开始后可以看到本任务的状态为运行中:

    a88d441a894c4d6e5d18b04be2ec0ddb.png

    可以点击日志,查看运行情况:

    e2eacf5553bb308eaed25357f0b07b54.png

    训练时间与数据量大小有关,1000张图片可能需要几个小时训练,不过本评测案例因为只有不到40张图,所以速度很快。运行成功有界面如图:

    e478a052e45bb01fcb48f49a398804fa.png

    2.6.    校验模型效果
    可通过模型评估报告或模型校验了解模型效果:

    55bfeb2efe53aaf8c219f933cbf3c3eb.png
    选择一张测试图:

    1f69e75cd909c78e1bf471ee66a478a4.png

    97dae5e42ee3445d7b0c913a2aedb951.png
    感觉效果还可以,虽然BoundingBox有点偏差,不过主要是因为训练集太小以及采用了追求速度的YOLO算法。如果增加训练集以及采用FastRCNN会有不小的提升。
    还可以选择“模型效果”查看模型信息:

    8a93ba1245ca97c1364638f3a152588f.png

    9932e681acb44455ba35181a138ab5e6.png2.7.    模型部署
    为了应用模型,需要对模型进行部署,点击“部署”按钮进入部署界面:

    7463381b6a862fd9e37ab65dabdf50e2.png

    本次选择公有云部署,录入相关的信息,发布模型生成在线API:

    c07ce4f6206938b8c20f004f681aa140.png

    3a89044c648183aa1b15250d15972ed3.png

    发布后的服务,可以在“我的服务”中进行查看,修改:

    93e46fcb30e374f5f6353fe2ef656996.png

    2.8.    接口赋权
    在正式使用之前,还需要做的一项工作为接口赋权,需要登录EasyDL控制台中创建一个应用,获得由一串数字组成的appid,然后就可以参考接口文档正式使用了
    也可以直接点击服务界面的"立即使用"进入赋权界面:

    3b76983f5c1cfa04306f1875c0e31b47.png3.    测试不同算法:
    现在物体检测支持 FasterRCNN、YoloV3、mobilenetSSD,三种算法。我们在第2章使用的是YoloV3,在本章我们将对其他两种算法建立不同版本的服务,并互相进行对比。
    3.1.    算法简介:
    目标检测可以理解为是物体识别和物体定位的综合,不仅仅要识别出物体属于哪个分类,更重要的是得到物体在图片中的具体位置。因为具体算法内容很长,在这里只能进行一个简单的说明。
    为了完成这两个任务,目标检测模型分为两类。一类是two-stage,将物体识别和物体定位分为两个步骤,分别完成,这一类的典型代表是R-CNN, fast R-CNN, faster-RCNN家族。他们识别错误率低,漏识别率也较低,但速度较慢,不能满足实时检测场景。为了解决这一问题,另一类方式出现了,称为one-stage, 典型代表是Yolo, YoloV2, YoloV3等。他们识别速度很快,可以达到实时性要求,而且准确率也基本能达到faster R-CNN的水平。
    Faster R-CNN准确率mAP较高,漏检率recall较低,但速度较慢。而yolo则相反,速度快,但准确率和漏检率不尽人意。SSD综合了他们的优缺点。它的贡献在于它利用了多层网络特征,而不仅仅是FC7。
    3.2.    V2版(Fast RCNN):
    在任务界面选择新建任务:

    e34985eb9d10c47e2a42046685d8f04d.png

    具体操作参考第2章的内容即可,区别在于网络选择Faster_R-CNN-ResNet50-FPN。训练后的模型效果如下所示:

    cf823deb7152cf2d35f9150ab45d3066.png

    5a416cba91634b2ffb66304986ea3f52.png
    可以发现在评测集上,FasterRCNN算法的效果很好,让我们验证一下具体的效果。选择与V1版一样的图片进行验证,效果如下:

    eda6c4930657b6585a57ed694d4bdac5.png

    f639db4598ec5d329f26a4bc03c1bccc.png
    可以看到,效果的确比YOLOV3的效果要好一些,圈取的内容更加准确。
    3.3.    V3版(SSD):
    具体操作参考第2章的内容即可,区别在于网络选择SSD。训练后的模型效果如下所示:

    79e0f9c22f3ce7a1008e3d573076b2de.png

    6754370175129aa141bbeda027ae4a86.png
    选择与V1版一样的图片进行验证,效果如下:

    6285e9196ed6b76a30ca18d31354578f.png

    8fef74c219cc29a8706ff3c3b3d21de7.png4.    应用评测及结论
    4.1.    评测代码
    按照服务API的说明,针对V1版(YOLOV3)的服务,编写调用代码(Python3)。需要注意的是与其他图像识别服务不同的是定制化图像识别服务以json方式请求。
    Body请求示例:
    {
    “image”: “”
    }
    具体代码如下:

    import urllib import base64 import json import time import urllib3#获取token def get_token():     host = 'https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&client_id=' + client_id + '&client_secret=' + client_secret     request = urllib.request.Request(host)     request.add_header('Content-Type', 'application/json; charset=UTF-8')     response = urllib.request.urlopen(request)     token_content = response.read()     #print (token_content)     if token_content:         token_info = json.loads(token_content)         token_key = token_info['access_token']     return token_key#保存图片 def save_base_image(img_str,filename):     img_data = base64.b64decode(img_str)     with open(filename, 'wb') as f:           f.write(img_data)           #画识别结果 def draw_result(originfilename,results,resultfilename,fontsize):     from PIL import Image, ImageDraw,ImageFont    image_origin = Image.open(originfilename)     draw =ImageDraw.Draw(image_origin)     setFont = ImageFont.truetype('C:/windows/fonts/simhei.ttf', fontsize)     for result in results:         location=result['location']         draw.rectangle((location['left'],location['top'],location['left']+location['width'],location['top']+location['height']),outline = "red")         draw.text((location['left'],location['top']), result['name']+', Score:'+str(round(result['score'],3)),"blue",font=setFont)    image_origin.save(resultfilename, "JPEG")def specialcar(filename,resultfilename,fontsize):     url = "https://aip.baidubce.com/rpc/2.0/ai_custom_pro/v1/detection/specialcar"          # 二进制方式打开图片文件     f = open(filename, 'rb')     img = base64.b64encode(f.read())     access_token = get_token()     url=url+'?access_token='+access_token    begin = time.perf_counter()          #img参数进行一下str转换     params={'image':''+str(img,'utf-8')+''}     #对参数params数据进行json处理     encoded_data = json.dumps(params).encode('utf-8')     request=urllib3.PoolManager().request('POST',                            url,                           body=encoded_data,                           headers={'Content-Type':'application/json'})     #对返回的byte字节进行处理。Python3输出位串,而不是可读的字符串,需要进行转换     content = str(request.data,'utf-8')         end = time.perf_counter()    print('处理时长:'+'%.2f'%(end-begin)+'秒')          if content:         #print(content)           data = json.loads(content)         #print(data)         results=data['results']         print(results)         draw_result(filename,results,resultfilename,fontsize)


    4.2 测试结果:

    首先是消防车及识别结果::

    8f7aeb1bead043ad5c339be21fc89889.png

    fe9b0a0d3d81548e6fe82af7765db8f4.png
    邮车及识别结果:

    48981e0bee7c3c57fdc6b440f8bdd464.png

    f77e85fec29953b63ec53c7cb448cd9c.png
    速度非常快,效果也很不错,虽然BoundingBox有点偏差,不过主要是因为训练集太小以及采用了追求速度的YOLO算法。如果增加训练集以及采用FasterRCNN会有不小的提升。
    4.3.    评测结论
    EasyDL专业版定会是深度学习开发者非常喜欢的一个功能,它将EasyDL图形开发的易用性及编程的灵活性结合在一起。在提供了很多便利的同时,又将控制权交给了客户,让客户可以更加灵活的使用深度学习技术,激发无限可能,感觉非常棒。后续我准备增加训练集再试一下,看看能提高多少,然后再尝试一下离线部署成Docker的效果,建议大家都试一下。

    4.4.    评测后的优化建议:
    希望百度后续能增加更多的模型,比如Mask RCNN等;
    希望能支持不规则形状的BoundingBox。
    希望后续增加数据导入导出功能。

    展开全文
  • 上篇文章阐述了SPPNet网络模型,本篇文章详细阐述Fast RCNN目标检测模型。把Fast RCNN放在SPPNet之后不仅是遵循时间上前后顺序,更因为Fast RCNN也借鉴了SPPNet上面的一些技巧。 Fast RCNN论文:...

        上篇文章阐述了SPPNet网络模型,本篇文章详细阐述Fast RCNN目标检测模型。把Fast RCNN放在SPPNet之后不仅是遵循时间上前后顺序,更因为Fast RCNN也借鉴了SPPNet上面的一些技巧。

        Fast RCNN论文:https://arxiv.org/abs/1406.4729

        Fast RCNN论文翻译:https://alvinzhu.xyz/2017/10/10/fast-r-cnn/

    一、概述

        Fast RCNN (Fast Regions with CNN features)一种快速的基于区域的卷积网络方法,用于目标检测。该模型是在RCNN模型的基础进行了优化,训练时间快9倍,测试时间快213倍,相对于SPPNet训练快3倍,测试快10倍。准确率方面mAP为66%,RCNN为62%(RCNN更换了特征网络结构,准确率较之Alexnet(53.3%)准确率提升了)。

    【与图像分类相比,目标检测是一个更具挑战的任务,需要更复杂的方法来解决。复杂性的产生是因为检测需要目标的精确定位,这就导致了两个难点,首先必须处理大量的候选框目标位置(通常称为“提案”),其次相对于生成候选框的粗略定位,目标检测必须实现精确定位。这两点问题的解决方案经常会影响速度、准确性或简单性。】

    二、Fast R-CNN网络模型 

        Fast RCNN物体检测系统由三个模块组成:

    • 卷积神经网络提取特征,搜索检测算法提取候选框集合以及特征映射
    • 区域归一化(ROI Pooling),得到固定维度的特征向量
    • Softmax类别概率估计与边框位置修正回归

    1、提取特征、候选框集合、特征映射 

        Fast RCNN提取特征的主干网络是VGG16(ILSVRC 2014物体分类第二名),13层Conv+3层Fc,激活函数Relu。

           Fast RCNN候选框也是通过Selective Search算法选取的2000个候选框集合,候选框在特征图上的映射和SPPNet的模式是一样的。

    2、ROI(Region Of Interest) Pooling

        ROI Pooling的作用也是为了适用用Fc网络要求的固定尺寸的输入特征向量,功能和SPP-layer的作用一样。

    【ROI Pooling是SPP的一种特殊情况,SPP是采用多个尺度叠加,而ROI Pooling则是直接将特征图分成Fc层需要的7*7的网格,然后获取每个cell里面最大的那个值,组成7*7*512的特征向量。】

     

    3、Softmax分类和线性回归 

    【Fast RCNN使用了一个精细的训练过程,对比R-CNN或者SPPNet分别在三个独立阶段训练特征提取、SVM和回归器,其在微调阶段联合优化Softmax分类器和检测框回归。Fast R-CNN网络具有两个同级输出层。 第一个输出在k+1个类别上的离散概率分布(每个RoI),p=(p0, ...,pk)。 通常,通过全连接层的k+1个输出上的Softmax来计算p。第二个输出层输出检测框回归偏移, t^k = (t_x^k ,t_y^k, t_w^k, t_h^k),通过目标的真实目标框v,来计算t^k指定相对于候选框的尺度不变转换和对数空间高度/宽度移位。】

    【卷积神经网络分为前向传播算法和反向传播算法,前向传播主要是评分函数(一系列的特征向量与权重的积加上偏置,再经过激活函数最终得到的结果),而反向传播算法主要依据损失函数,损失函数是用来量化评分函数和真实标签之间的一致性的,越大则说明预测的情况越差】

       下面简短介绍下SVM和Softmax的loss函数,如下图前向传播评分类别1的得分最高,但是正确的类别是2(三个类别按0,1,2)。

       右上角通过Hinge loss来演示SVM的损失计算过程。Hinge loss通常被用于最大间隔算法(maximum-margin),而最大间隔算法又是SVM用到的主要算法。。

     

     【Hinge loss专用于二分类问题。标签值 y = \pm 1,预测值 y^ ∈ R。该二分类问题的目标函数要求如下:当y^大于等于+1或者小于等于-1时,都是分类器确定的分类结果,此时的损失函数loss为0;而当预测值y^∈(−1,1)时,分类器对分类结果不确定,loss不为0。显然,当y^=0时,loss达到最大值。此处这只1为阈值。】

     

        右下角是利用cross-entropy loss来演示Softmax的损失计算过程。

    【交叉熵损失函数Cross Entropy Loss】描述了两个概率分布之间的距离,当交叉熵越小说明二者之间越接近。尽管交叉熵刻画的是两个概率分布之间的距离,但是神经网络的输出却不一定是一个概率分布。为此我们常常用Softmax回归将神经网络前向传播得到的结果变成概率分布。

     

     

         对比两个loss函数,当改变得值不大时,对svm可能没有影响,此时改变点没有超过边界,但是对softmax而言,无论大小的改变,结果都会发生相应的变化。【上面介绍了关于svm和softmax损失函数是为了下面阐述Fast rcnn的多任务损失做铺垫】

     Fast RCNN对于每个标记的ROI区域使用多任务联合分类和检测框回归损失函数L:

    这里是分类和边框回归2个计算损失,后面的Faster RCNN4个计算损失,yolov1的5个计算损失等。

    三、创新与挑战

    1、创新(没有再提可以训练不同尺度的图片,因为这个已成为后面的标配)

    • 训练使用多任务损失的单阶段训练,RCNN、SPPNet是多阶段训练;
    • 训练可以更新所有的网络参数,RCNN、SPPNet因为是分阶段,后面的loss函数不能更新前面特诊提取网络的参数;
    • 不需要磁盘空间缓存大量的特征。
    • 截断SVD加速训练

    2、挑战

        区域提取成为影响目标检测性能的瓶颈,RCNN、SPPNet、Fast RCNN都选用搜索选择算法产生2000个候选区域集合;

        训练和测试耗时,0.3秒一张的检测图片不能满足实时的需求。

    总结:Fast RCNN将在RCNN和SPPNet上面的分阶段训练这一弊端,转成多任务单阶段的训练,并且可以更新所有的网络参数,这个在提高精度的同时,节省了很多预训练等很多繁琐的步骤,这个是Fast RCNN相对于以往的目标检测模型的创新点。总的来说,Fast RCNN在RCNN系列中提供的最大可借鉴的地方可能就是就是多任务但阶段训练,以及softmax loss的引进,而候选区域提取借鉴的RCNN,ROI Pooling借鉴的是SPP。

    展开全文
  • 使用预训练的ImageNet模型和上一步产生的ROI初始化Fastrcnn网络
  • RCNN (Fast RCNN, Faster RCNN) 网络结构 代码
  • 目标检测是深度学习的一个重要应用,就是在图片中要将里面的物体识别出来,并标出物体的位置,一般需要经过两个步骤: ...最直接的方法便是构建一个深度神经网络,将图像和标注位置作为样本输入,然后经过CNN网络,再.
  • Fast RCNN训练VGG19网络速度比RCNN快9倍,测试速度快213倍,与SPP网络相比,训练速度快3倍,测试快10倍,并且更准确。 介绍 在当时,目标检测训练任务都是分多个阶段进行模型训练,缓慢且不优雅。因此在Fast RCNN...
  • RCNN+fast RCNN+faster RCNN

    2017-10-04 16:17:03
    图像检测:图像识别+定位识别: 定位: 重叠度(IOU): 物体检测需要定位出物体的bounding box,对于bounding ... 它定义了两个bounding box的重叠度,如下图所示构建模型加速网络: Region Proposalselective se
  • Faster RCNN 2016年提出,能够在给定图片中精确定位物体位置,预测物体类别 发展经过 RCNN --> SPPNet-->...RCNN网络 2014年提出 RCNN的步骤 RCNN是采用了预训练的模型 ...
  • RCNN:1.训练或者下载一个预训练好的模型(Vgg16)2.对此模型进行fine-turning,即将分类数目改为20(自己需要分类的类别数目)+去掉全连接层。vgg-16网络结构:3.特征提取,用selective search方法从原图中得到不同...
  • Rcnn 第一步:输入图像,采用Selective Search 从原始图片中提取2000个左右区域候选框 第二步:划分区域提案,进行归一化:将所有候选框变为固定大小的(227*227)区域,对每个候选区域,使用深度网络提取特征 ...
  • 浅谈Fast RCNN

    2019-10-14 19:12:33
    一、经典的RCNN存在的问题: 训练分多步骤 时间和空间开销大(在训练SVM...二、网络模型 输入是224×224的固定大小图片 经过5个卷积层+2个降采样层(分别跟在第一和第二个卷积层后面) 进入ROIPooling层(其输入是...
  • 上篇文章阐述了Fast RCNN网络模型,介于Faster RCNN属于RCNN系列的经典模型,以及是目前项目暂使用的目标检测模型,本篇文章会结合论文以及tensorflow版本的代码实现详细的阐述该模型。【可能篇幅会很长,毕竟经典...
  • RCNN (Regions with CNN) 目标物检测 Fast RCNN的基础 Abstract: 贡献主要有两点1:可以将卷积神经网络应用region proposal的策略,自底下上训练可以用来定位目标物和图像分割 2:当标注数据是比较稀疏的时候,...
  • fast rcnn论文结合代码

    2018-06-20 22:00:13
    Fast R-CNN训练非常深的VGG16网络比R-CNN快9倍,测试时间快213倍,并在PASCAL VOC2012上得到更高的平均精度mAP。与SPPnet相比,fast R-CNN训练VGG16网络比他快3倍,测试速度快10倍,并且更准确。由于检测比分类更...
  • <p>Loaded network %fast_rcnn_root% \ data\fast_rcnn_models\vgg16_fast_rcnn_iter_40000,caffemodel <p></p><pre><code> Demo for data/demo/00004.jpg </code></pre> 执行到这以后Python就崩溃了。 希望能得到...
  • 在前面的章节中,我们已经介绍了RCNN了,可以很明显的看到RCNN是一种基于多方法联合使用的策略。这种方法最大的缺点就是可控性较差。一旦有一个环节没有处理好就影响最终的结果。比如说: select search 方法如果...
  • RCNN系列、Fast-RCNN、Faster-RCNN、R-FCN检测模型对比一.RCNN问题一:速度经典的目标检测算法使用滑动窗法依次判断所有可能的区域。本文则预先提取一系列较可能是物体的候选区域,之后仅在这些候选区域上提取特征...
  • RCNN系列、Fast-RCNN、Faster-RCNN、R-FCN检测模型对比 一.RCNN 问题一:速度 经典的目标检测算法使用滑动窗法依次判断所有可能的区域。本文则预先提取一系列较可能是物体的候选区域,之后仅在这些候选区域上提取...
  • Fast R-CNN 1.前言 最近,深度卷积神经网络已经明显提高了图像分类和目标检测的精度。相比于图像分类,目标检测是一个更具挑战性的任务,因此它需要更复杂的方法去解决。由于这种复杂性,当前的方法训练模型时都是...
  • Fast-RCNN的改进

    千次阅读 2018-09-27 14:38:24
    要了解Fast-RCNN的改进,首先要了解RCNN与SPP-Net的网络模型,其主要结构如下图所示: RCNN流程主要是SS提取Region proposals,然后Crop/wap到归一化尺寸,输入到CNN进行训练,提取特征向量。最后将CNN提取的特征...
  • 1 RCNN(2014年) 1.1 发明背景 ... 如何在小规模的数据集上训练出较好的网络模型。 1.2 解决思路 针对问题1,R-CNN利用候选区域的方法(Region Proposal),这也是该网络被称为R-CNN的原因:Regions wi
  • 再次感谢@shenxiaolu1984 ,写了一系列关于目标检测深度学习模型的优秀博文,本文主要参考fast-rcnn这篇(大部分照搬过来了,局部加入自己的理解和补充)。 ... 继续上一篇RCNN之后,继续介绍FAST-RCNN, 因为RCNN虽然...
  • R-CNN、Fast-RCNN和Faster-RCNN三者对比总结 1.R-CNN 1.1 R-CNN的关键点 1) 用CNN对每张图片生成的大约2K张建议窗口进行特征提取; 2)当样本较少时,使用大量的辅助样本对模型进行预训练,之后用自己的样本对...
  • fast_rcnn_keras-源码

    2021-02-19 08:26:33
    更快的R-CNN的Keras实现:通过区域提议网络实现实时目标检测。 从克隆 修复了从原产地奥克隆克隆时的几个错误 用法: theano和tensorflow后端都受支持。 但是在theano中编译时间非常长,强烈建议使用Tensorflow。 ...
  • py-faster-rcnn/models/pascal_voc/ZF/faster_rcnn_alt_opt/stage1_fast_rcnn_train.pt   name: "ZF" #三个模型文件,小型网络ZF,大型网络VGG16,中型网络#VGG_CNN_M_1024 layer {  name: 'data'  type:...
  •  论文摘要:A-Fast-RCNN模型通过用对抗网络生成具有遮挡和变形的样本,并用其训练检测网络,从而使得网络能够对样本的遮挡和变形问题更加的鲁棒。  如何学习一个具有变形和遮挡不变形的目标检测器?目前的方法...

空空如也

空空如也

1 2 3 4 5 ... 8
收藏数 141
精华内容 56
关键字:

fastrcnn网络模型