- 可能有些小伙伴在刚学习的时候不太适应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
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:


修改train.py:

修改pascal_voc.py:

在根目录下执行训练:
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
’‘’
训练结束后会在该路径下生产保存好的模型:

在根目录下执行测试:
python demo.py
如果说并没有训练到40000次,比如只训练了5000次,想要测试的话,那么需要 将所保存的模型的后缀由5000改为40000,因为代码中,是直接调用 VGGnet_fast_rcnn_iter_40000.ckpt,来进行测试的。
需要注意的是:
Demo.py文件中特定给出了进行测试的图像的名称,所以要使用自己的数据进行测试,可以修改py文件中的im_names,或者修改自己的测试图像的名称,如下图:
测试结果:


版权声明:本文为qq872890060原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。