之前实现过faster但是因为各种原因,写的技术文档丢了代码也没了,捶胸痛哭!所以写篇博客记录下
有些地方用的方法比较粗糙,不过偏方治大病能用就ok。
这里有点尛问题我的软连接似乎不起作用了,于是我直接把VOCdevkit文件夹拷贝到tf-fater-rcnn/data路径下并重命名为VOCdevkit2007,记得删除那个VOCdevkit的软连接
需要翻墙,如果翻不了牆就从网盘里下吧我存网盘了。链接: 密码:8ahl
在tf-faster-rcnn目录下建立output文件夹并使用软连接来使用预训练模型,这里按照步骤走就行没啥问题:
同时还要把第105行的
然后再按步骤运行就ok了!
这里按照步骤走可能会链接不上外网,我把权重数据存网盘了网盘地址: 密码:45ef
在data目录下創建一个imagenet_weights文件夹,解压权重数据并把解压后的vgg_16.ckpt重命名为vgg16.ckpt因为后面在调用权重数据的时候名字需要对应的上。
开始训练(这里最后的vgg16就是对應的权重数据名字要对的上,0是GPU的IDpascal_voc是训练使用的数据集):
可以看到,结果都很差因为就迭代了20轮。
在替换数据之前先介绍一下标紸工具,我用的对数据进行标注的其界面如下:
具体怎么安装以及用法就不介绍了,GitHub上已经介绍的很详细了然后介绍一下xml数据格式:
其中需要说明的是:图像名称一定要命名为000001.jpg,以及xml也要命名为000001.xml格式(事实上如果你对图像名称是六位数字组成的xml也会自动生成六位数字)。峩之前用的是1,2,3,4这样命名结果运行总是会提示Keyerror:"1"。
一般出现keyerror的原因有两种一是图像以及xml命名不符合要求,这就需要你重命名;二是标注的object信息有误什么意思呢?拿我的数据来说我是对火焰进行标注的,所以label是fire如果因为操作失误导致fire变成如w或者其他字母,就会提示keyerror为什么会是w呢?因为标注的快捷键是w所以有时候会因为粗心把w写到label里。我就犯过这样的错误这样的错误排除起来很麻烦,还需要再写一段代码对xml的所有name节点的值进行访问,如果不是你的label把对应的索引记录下来,手动再修改
xml数据准备完毕后,需要划分训练验证以及测試集这里我使用的别人写好的划分代码(读书人的事,怎么能叫偷呢),是matlab的下载后更改下VOC2007txt.m中d 路径就能用了。执行结果会按比例对你的數据划分为训练集验证集以及测试集同时会生成四个txt文档,分别是test.txttrain.txt,trainval.txtval.txt。
训练验证测试集划分之后就开始替换自己的数据了(讲了那么多废话终于到正点了,其实主要是怕自己以后忘记了脑子不太好用了)。
因为我只训练了20轮而且因为写博客需要,数据总共就100个所以效果很差,不过能跑通就行了
在介绍生成训练集测试集的txt文件时,之前写错了写的是执行VOC2007xml.m会生成四个txt文件,实际上执行的是VOC2007txt.m現已修改。
更新于2019年5月6日:
添加了第二部分每种显卡对应的计算力的链接
评论中有人提出的一个错误的解决方法,也是被评论的网友 @月裏浮假面 解决的
训练之前为保险起见,一定要记得清空所有cache文件