使用tensorflow版本的Faster r cnn训练自己的数据集完整版

  • 可能有些小伙伴在刚学习的时候不太适应Linux系统,我在Windows系统下也跑通了这个框架,但是在保存训练模型的时候,出现了内存溢出,导致无法保存模型。
  • 我使用的自用笔记本的GPU是1060 6G的,算力在庞大的faster r cnn 面前还是略输一筹。
  • 所以一下内容是借助了拥有4块2080Ti的GPU服务器实现的
  • 我们要训练一个好的模型,并进行应用,目前来说是离不开Linux系统的,索性直接在该系统下操作吧。
  • 主要步骤分:
    Python环境配置
    faster r cnn 组件下载并微调
    数据集制作
    训练
    测试

Python环境配置

  • 这里使用的是Python3.6的版本,链接原作者说明,3.5,3.6,3.7都可以用。

  • 安装tensorflow gpu版本

    pip install tensorflow -gpu
    
  • 安装一下Python包:

    pip install matplotlib
    pip install cython
    pip install pillow
    pip install opencv-python
    pip install easydict
    

在github上下载tensorflow框架下的faster_r_cnn:

git clone --recursive https://github.com/dBeker/Faster-RCNN-TensorFlow-Python3.git

编译

  • 进入: ./data/coco/PythonAPI编译:
    python setup.py build_ext --inplace
    python setup.py build_ext install
  • 进入./lib/utils 继续编译
    python setup.py build_ext --inplace

检测data/cache下是否有文件,这个文件是第一次加载数据以后所保存的文件,方便以后快捷提取数据进行训练,但是如果要使用新数据集,需要删除掉之前缓存的这个文件,不然会报错。

在这里插入图片描述

制作数据集:(要制作为这个样子)

data\VOCdevkit2007\VOC2007
使用tensorflow版本的Faster r cnn训练自己的数据集完整版_第1张图片
Main文件夹中的txt文件存放的是不带后缀名的图像名称,百分比如上图所示,文件中并没有提供切分数据集的程序,所以我自己写了一份,稍加修改就可以使用:

from sklearn.model_selection import train_test_split
import os

# 所有图像的路径
name_path = r'C:\Users\machenike\Desktop\VOCdevkit2007\VOC2007\JPEGImages'
name_list = os.listdir(name_path)
# print(name_list)
# 存放不带后缀名的所有图像名
names = []
for i in name_list:
	# 获取图像名
    names.append(i.split('.')[0])
# 切分
trainval,test = train_test_split(names,test_size=0.5,shuffle=10)
val,train = train_test_split(trainval,test_size=0.5,shuffle=10)

# 分别写入
with open('./trainval.txt','w') as fw:
    for i in trainval:
        fw.write(i+'\n')

with open('./test.txt','w') as fw:
    for i in test:
        fw.write(i+'\n')

with open('./val.txt','w') as fw:
    for i in val:
        fw.write(i+'\n')

with open('./train.txt','w') as fw:
    for i in train:
        fw.write(i+'\n')

print('done!')

下载VGG16预训练模型:

下载网址:https://github.com/dBeker/Faster-RCNN-TensorFlow-Python3
data\imagenet_weights\vgg16.ckpt(按此路径存放)
需要注意的是,下载后的模型名称可能是vgg_16.ckpt,需要去掉下划线:vgg16.ckpt

修改原文件

  • 修改demo.py:
    使用tensorflow版本的Faster r cnn训练自己的数据集完整版_第2张图片
    使用tensorflow版本的Faster r cnn训练自己的数据集完整版_第3张图片

  • 修改train.py:
    在这里插入图片描述

  • 修改pascal_voc.py:
    使用tensorflow版本的Faster r cnn训练自己的数据集完整版_第4张图片

在根目录下执行训练:

python train.py
‘’‘
# 迭代次数			总损失
iter: 10 / 40000, total loss: 1.274421
	分类损失(有无物体)
>>> rpn_loss_cls: 0.355426
	预测框损失
>>> rpn_loss_box: 0.045310
	分类损失(哪一类)
>>> loss_cls: 0.408049
	预测框损失
>>> loss_box: 0.465636
’‘’

训练结束后会在该路径下生产保存好的模型:

使用tensorflow版本的Faster r cnn训练自己的数据集完整版_第5张图片

在根目录下执行测试:

python demo.py

如果说并没有训练到40000次,比如只训练了5000次,想要测试的话,那么需要 将所保存的模型的后缀由5000改为40000,因为代码中,是直接调用 VGGnet_fast_rcnn_iter_40000.ckpt,来进行测试的。
需要注意的是:
使用tensorflow版本的Faster r cnn训练自己的数据集完整版_第6张图片
Demo.py文件中特定给出了进行测试的图像的名称,所以要使用自己的数据进行测试,可以修改py文件中的im_names,或者修改自己的测试图像的名称,如下图:
使用tensorflow版本的Faster r cnn训练自己的数据集完整版_第7张图片

测试结果:

使用tensorflow版本的Faster r cnn训练自己的数据集完整版_第8张图片
使用tensorflow版本的Faster r cnn训练自己的数据集完整版_第9张图片

你可能感兴趣的:(深度学习项目练习)