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

mac2024-03-11  17

可能有些小伙伴在刚学习的时候不太适应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,或者修改自己的测试图像的名称,如下图:

测试结果:

最新回复(0)