Faster RCNN(Tensorflow)的配置可以参考我的博客,
本文分为三部分:
- 数据集制作
- 代码修改
- 训练和测试
一、环境配置:
1、环境
- win10系统,显卡GeForce GTX 960M;
- TensorFlow-gpu 1.13.0-rc2,CUDA 10.0,Cudnn 7.4.2;
- python 3.5.2
- Faster RCNN的下载地址:
https://github.com/dBeker/Faster-RCNN-TensorFlow-Python3.5
二、制作数据集
数据集的图片来源于https://github.com/datitran/raccoon_dataset,数据集里有200张浣熊的照片;数据集的格式类似于VOC2007的格式,Annotations文件夹里是制作好的标签,JPEGImages文件夹里是源图像,ImageSets\Main 文件夹里是生成的txt文件
VOC2007下的文件夹
批量命名文件(格式:00000x.jpg),并且图片的尺寸不能太大,将重命名的源图像放在JPEGImages文件夹里,使用labelImg工具将图像标注,生成xml文件,保存在Annotation文件夹里,操作步骤:
打开labelImg,在OpenDir中,选择JPEGimage文件夹
(1)W键快捷creatbox,进行框选待测图片中的检测目标;
(2)输入目标的标签,后面和config.py,pascal_voc.py等调整时匹配;
(2)左侧save到Annotations文件夹下,存为xml文件(放到Annotations里);
(3)下一张图片继续,直至结束。
批量命名图片的代码:
import os
path = "JPEGImages"
filelist = os.listdir(path) #该文件夹下所有的文件(包括文件夹)
count=0
for file in filelist:
print(file)
for file in filelist: #遍历所有文件
Olddir=os.path.join(path,file) #原来的文件路径
if os.path.isdir(Olddir): #如果是文件夹则跳过
continue
filename=os.path.splitext(file)[0] #文件名
filetype=os.path.splitext(file)[1] #文件扩展名
Newdir=os.path.join(path,str(count).zfill(6)+filetype) #用字符串函数zfill 以0补全所需位数
os.rename(Olddir,Newdir)#重命名
count+=1
三、代码修改
标签修改:代码位于lib\datasets\pascal_voc.py,pascal_voc.py脚本第34行,不要更改_background_,将34行中的标签替换成自己的标签,这里只用到了一个标签:raccoon。
标签修改
训练参数修改:代码位于lib\config\config.py文件中,可以更改训练的总步数(max_iters)、权值衰减(weight_decay)、学习率(learning_rate)、批次大小(batch_size)等参数。
训练参数修改
四、训练和测试
参数修改完后,运行train.py,模型训练完后,模型保存在..\default\voc_2007_trainval\default中,把四个文件拷贝出来放到output\vgg16\voc_2007_trainval\default文件夹中,并进行重命名,如下图所示。
生成的模型
测试代码修改:修改主目录里的demo.py脚本,修改标签的个数(1个背景,1个标签),同时把需要测试的图片放在data\demo文件夹里,图片的名称为6位数字。
修改的参数
最后测试的结果如下图所示: