MobileNet版的mask rcnn-可以扩展到移动设备中

MobileNet版的mask rcnn-可以扩展到移动设备

关于mask rcnn的原理我就不再说了,不了解额同学可以看一下我的博客:mask rcnn原理

项目地址:Mobilenet_Mask RCNN

如果觉得有用的话,give me a star !

1、安装环境:

1、电脑环境:

Mask R-CNN是基于Python3,Keras,TensorFlow

  • Python 3.4+
  • TensorFlow 1.3+
  • Keras 2.0.8+
  • Jupyter Notebook
  • Numpy, skimage, scipy, Pillow, cython, h5py
  • opencv 2.0

2.预权重下载:mobile_mask_coco.h5下载(积分不够的,评论区留下邮箱!)

3、如果需要在COCO数据集上训练或测试,需要安装pycocotools, clone下来,make生成对应的文件,make之后将生成的pycocotools文件夹复制到项目文件夹中:

Linux: https://github.com/waleedka/coco

Windows: https://github.com/philferriere/cocoapi. You must have the Visual C++ 2015 build tools on your path (see the repo for additional details)

4、MS COCO数据集(Ubuntu 建议采用 wget 命令直接Ubuntu终端下载)我采用的coco2014数据集进行训练,包含80多个类别。


2.训练过程:

如果需要自己训练,直接在项目中打开终端:

    # Train a new model starting from pre-trained COCO weights
    python3 coco.py train --dataset=/path/to/coco/ --model=coco

    # Train a new model starting from ImageNet weights. Also auto download COCO dataset
    python3 coco.py train --dataset=/path/to/coco/ --model=imagenet --download=True

    # Continue training a model that you had trained earlier
    python3 coco.py train --dataset=/path/to/coco/ --model=/path/to/weights.h5

    # Continue training the last model you trained
    python3 coco.py train --dataset=/path/to/coco/ --model=last

    # Run COCO evaluatoin on the last model you trained
    python3 coco.py evaluate --dataset=/path/to/coco/ --model=last

    MobileNet_v1+FPN 为主干网络进行特征提取 , 来实现 mobilenet 版的目标检测 . 我是将主干网络替换成 mobilenet 对于 cocodataset 2014 数据集中 ,80k 训练集和 35k 的验证集的组合进行训练 , 之前在上海大学通信云平台创建了容器 , 但是在 NvidiaTesla P100 训练出来的模型始终没办法进行目标检测。

在通信云平台上创建了安装好深度学习框架和配置好相应环境的docker,采用的是NvidiaTesla M10 8G显卡进行训练,使用1GPU训练(如此有效的批量大小为16160k次迭代,学习率为0.001,在120k次迭代时学习率除以10。同时,训练步数为160,每一步迭代1000,并且保存每一步训练的权重,训练总时间为72个小时。


图 1 Tensorboard展示的MobileNet训练过程的loss变化


 


图 2 Tensorboard展示的MobileNet训练过程验证集的loss变化



图 3 训练过程中迭代时的loss值变化

2.MobileNet_v1 原理

       

        MobileNet-v1Google2017年四月针对手机等嵌入式设备提出的一种轻量级的深层神经网络,用于移动和嵌入式视觉应用。MobileNet-v1是基于一个流线型的架构,它使用深度可分离的卷积来构建轻量级的深层神经网络,引入两个简单的全局超参数,在延迟度和准确度之间有效地进行平衡。这两个超参数允许模型构建者根据问题的约束条件,为其应用选择合适大小的模型。


2012AlexNet模型取得ImageNet冠军之后,卷积神经网络更加普及。面对海量的数据,为了提升测试的精度,大家往往会选择通过增加网络的层数以及更为复杂的神经网络来获取更高的精度。然而这种方式对于设备的计算能力要求较高,训练好的模型内存较大,运行的时候对于实验设备的要求也高,不利于相关技术的应用和普及。例如一些嵌入式的平台因为硬件资源的原因,就需要一种内存更小,测试速度更快,灵活便捷的模型。MobileNet-v1关键之处在于分解卷积核,将标准的卷积核分解为深度卷积和1*1卷积。深度卷积将相应的卷积核应用到每一个通道,而1*1卷积核便用来可以将通道输出进行组合。下图展示标准卷积层的分解过程,通过这种分解方式可以减少计算量,提高其测试速度。


 (a)3D卷积(b)逐通道2D卷积和(c)3D1*1卷积


图(a)展示的传统的卷积是通过采用一个与输入和输出相同维度进行卷积求和,其计算量为T1=DK· DK · M · N · DF ·DF,MN为输入和输出的通道数。图 (b)是采用Depthwise卷积核,首先采用一组通道数为1的卷积核,这一组二维卷积核的数量是和输入通道数相同的。在用逐个通道卷积进行处理之后得到特征图,在选用1*1卷积核来处理输出的特征图。逐通道2D卷积核的运算量为:T2=DK· DK · M · N · DF ·DF, 3D1*1卷积核的计算量为:T3=DK· DK · M · DF ·DF.因此,这种组合方式的计算量为:T2+T3.deep-wise方式的卷积相比于传统3D卷积计算量为:(T2+T3)/T1=1/N +1/DK2。下图所示网络结构为传统的标准的卷积网络和deep-wise卷积网络结构

:

 传统的3D卷积(左)与deep-wise卷积网络结构(右)

从图中可以看出,deep-wise的卷积和后面的1x1卷积是相对独立的。利用1*1卷积降通道就是为了减小计算量。Deep-wise结合1x1的卷积方式代替传统卷积不仅在理论上会更高效,而且由于大量使用1x1的卷积,可以直接使用高度优化的数学库来完成这个操作,MobileNet中,有95%的计算量和75%的参数属于1x1卷积。


3.结果对比


图1 为 mask rcnn 测试结果


图2 为Mobilenet v1的测试结果


图 3 为mask rcnn测试结果


图 4 mobile net 测试结果


4. 模型性能分析

    准确率(Precision):识别过程中,正确识别的图片占图片总数的比值,召回率(Recall):正确识别个数,占测试集中该类总数的比值,平均准确率(AveragePrecison):AP,不同类别准确率的平均值.平均召回率(AverageRecall):AR,不同类别召回率的平均值。

Resnet50MobileNet为主干网络的训练的模型,coco验证集上,随机选取500张图片进行检验,结果如下图所示。

    

图 1 Resnet APAR500张图片上的结果


图2 MobileNet APAR500张图片上的结果

    通过对于500张图片的测试,可以得到以Resnet50为主干网络所提取的特征,其平均准确率和平均召回率在不同的Iou下均高于MobileNet_v1的结果,这也可以从上面展示的对比测试结果中看出,对于目标的实例分割,Resnet50为主干网络分割检测的更加准确.MobleNet版的MaskR-CNN对于重叠的目标检测分割会重合,准确率不够高。但是,物体的分类和边框回归接近。

两种模型的测试速度也是不同,都在TeslaM10的显卡上选取500张图片进行测试.

    Resnet50的检测总时间为511s,平均检测时间为1.02s;MobileNet的检测总时间为370s,平均检测时间为0.74s.由此可以看出,MobileNet训练的模型更加灵活,检测效率更高。

ResNet50训练出来的模型内存为245M,MobileNetV1训练出来的模型内存为93M,体现了MobileNet模型小,便于移植到移动设备中.内存大小,如下图所示:


图 3 ResNet 50训练模型内存大小


图 4 MobileNet 训练模型大小





©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页