基于tensorflow-cpu的fasterrcnn复现目标识别
由于老师项目需要,要求在不完全了解机器学习和python的情况下实现对金叉石斛的叶片和茎部识别。由于具体数据集尚未制作完成,这里采用的是网上的COCO数据集。
算法理解
Faster -R-CNN包括四个部分:
卷积层(conv layers):本质为卷积神经网络CNN,通过卷积核与原图进行卷积,输出提取的特征图feature maps,然后送至下一部分;
RPN网络(region proposal Network):本质是一个全卷积网络,通过对feature maps进行处理,RPN寻找可能包含目标objects的预定义数量区域ROI,输出候选区域的边界框;
ROI pooling(感兴趣区域池化层):将不同大小的输入转换为固定长度的输出
Classfier:分类和回归,输出候选区域所属的类和精确位置,达到目标识别的目的。
算法实现过程:
第一步,Faster-r-cnn要采用基于分类任务的CNN模型作为图片特征提取器,获得feature maps。常用的CNN模型为vgg16,Faster-r-cnn采用的是vgg16的中间卷积层,不关心输入图片尺寸。第一层卷积层一般学习edges的信息,第二层学习的是edges内的图案patterns…最终得到卷积特征图feature maps,其分辨率比原图小得多。
第二步,获取feature maps之后,就需要寻找proposals,这一步由RPN网络完成。首先有一个固定尺寸的边界框Anchors,在feature maps(CONVwidthCONVheight)每个点上创建anchors,获得第一次预测object时参考用的边界框boxes,注意:anchors虽然是基于feature maps定义的,但最终的anchors是相对于原图的。RPN网络利用所有可参考的boxes,输出一系列objects的良好的proposals,如何选取?anchor内是object的概率,RPN不关心object的类,只关心是object or background,然后利用object score滤除效果不佳地boxes。获得效果更好的boxes之后,利用已获得的输出调整anchors,获得更好的拟合预测的boxes。每个anchors输出是objects的score和非objects的score,在回归层,每个anchors输出Δxcenter,Δycenter,Δwidth,Δheight,即得到最终的 proposals。
第三步,Faster-r-cnn采用每个proposal对feature maps裁剪crop,然后利用插值算法,将每个crop resize为固定尺寸1414ConvDepth,再利用22kernel的Max Pooling得到每个proposal的77ConvDepth特征图,即利用proposals提取特征。
第四步,采用Relu和两个全连接层进行处理。对每个不同的objects采用两种不同的全连接层:一个全连接层有N+1个神经元,N为class总数,+1为background;4N神经元,回归预测输出,得到可能的class的Δxcenter,Δycenter,Δwidth,Δheight。
如下为算法复现过程:
首先是安装Anaconda和python3.5的安装,Anaconda是一个开源的python及其科学包管理器,安装之后可以很方便的安装各类python开源库。tensorflow是google开发的基于数据流编程(dataflow programming)的符号数学系统,可以在安装Anaconda后在Prompt内通过pip install 命令安装,如果默认网址下载速度慢的话可以通过清华镜像源安装
pip install -U -i https://pypi.tuna.tsinghua.edu.cn/simple tensorflow
具体的安装流程这里不再敷述。复现环境如下:
- python3.5.4
- tensorflow1.12.0
- cython0.29.14
- python-opencv 4.1.2.30
- easydict 1.9
- Pillow 7.0.0
- matplotlib 3.0.3
- scipy 1.4.1
先确保所有依赖库安装成功!
1.faste-r-rcnn程序包链接:
https://github.com/dBeker/Faster-RCNN-TensorFlow-Python3.5
解压后源码如下
2.下载VOC2007格式的数据集PYCoco数据集:
https://github.com/rbgirshick/py-faster-rcnn#beyond-the-demo-installation-for-training-and-testing-models
下载解压后粘贴到如下图路径,注意文件夹命名。
3.下载预训练的卷积模型VGG16:
http://download.tensorflow.org/models/vgg_16_2016_08_28.tar.gz
路径如下,注意文件夹命名:
4.在anaconda prompt中cd …/data/coco/PythonAPI目录下,编译setup.py
`python setup.py build_ext --inplace`
`python setup.py build_ext install`
cd …/lib/utils目录下,装载setup.py
python setup.py build_ext --inplace
5.在程序包目录下,运行
python train.py
即可开始训练模型,默认迭代5000次保存,最大跌代次数40000次
具体迭代次数可在config.py中修改
6.修改demo.py中的部分代码
tfmodel=r'your path'
your path为训练好的模型的路径
parse_args函数修改如下
7.在程序包目录下运行
python demo.py
即可自动识别demo文件夹中的中的图片,效果如下