SSD Faster-RCNN使用自己的数据fine-tune训练模型
2017-01-04 16:18
531 查看
前言
首先想要说一下,刚开始我是打算fine-tune一下SSD的,然后我只需要分类里面的6类即可,但是SSD给出的VOC数据集标签中是有21类的,并且各个类别之间还会有交叉,还会有的图片有我想要的类别也有没有我想要的类别,但我只想将拥有我想要的那6个类的.xml文件给挑选出来进行训练,所以就用到了如下的Linux脚本处理方法。后来,我发现在自己制作VOC格式数据的时候,也基本上会用到这些知识,所以就分享一下。当然,本人的Linux shell很渣,只是想给同样跟我一样是Linux小白的同学提供一点帮助。1.查找所有.xml文件中有‘person’字符串的文件,然后将其文件名输出:
find -name "*.xml" -exec grep -l 'person' {} \; -fprint out.txt
其中需要注意的是,-name后面如果文件名中有正则表达式的部分,就需要加入”“,如果没有直接输入文件名即可,不用加入双引号。‘’
fprint 是将查找到的出书到后面的文件中,但是这个文件不会自己创建,必须得先有这个out.txt文件。
这个网址可以查找grep所有的选项:http://www.lampweb.org/linux/3/27.html
2.利用sed删除文件中每行最前面的”./”字符:
sed -i 's/^..//g' person-test.txt
-i 的意思是直接在原文件上修改,’s/’的意思是替换,
3.利用sed将文件中所有.xml字符替换成.jpg字符:
sed -i 's/\.xml/\.jpg/g' person-test.txt
4.使用python 利用得到的.txt文件,将文件中出现的文件名移动到指定文件夹:
import shutil file = open(r'person-test.txt') n=0 for out in file.readlines(): print out shutil.move("/home/fx/code/caffe-ssd-lw/data/VOCdevkit/VOC2012/JPEGImages/"+out.strip(),"/home/fx/code/caffe-ssd-lw/data/VOCdevkit/VOC2012/PersonImages")
其中,shutil模块中,有我们想要用的.move方法。
其中需要注意的是,当这样拼接字符串”“+out时,字符串会自带一个“\n”这样就无法访问到我们想要的文件路径,但是我们加入字符串中的.strip()方法,这个方法就可以删除开始或者结尾的空白字符。
5.当得到这些文件后,我们将他合并到一起。合并有两种方式一种是粘贴到文件的后面,一种是同行合并:
直接将2.txt文件的全部内容粘贴到1.txt文件的全部内容之后:cat 1.txt 2.txt > out.txt
将2.txt文件的全部内容按相同的行号粘贴到1.txt文件中:
paste -d ' ' 1.txt 2.txt > out.txt
其中,-d 的意思就是按 ” 内的字符分开,这里就打了一个空格,所以粘贴上去的时候就按这一个空格把内容分隔开了。
6.由于有的含有person,bus…这几类的文件中,有我们没有标记的标签,所以在制作数据的时候报错,再写一个小的python程序,把这些xml里包含未声明的标签的文件给去除掉:
import xml.etree.cElementTree as ET import os names = ['person','bicycle','car','bus','motorbike'] n=0 directory = open('out.txt') delete = open('delete.txt','w') for dir in directory.readlines(): tree = ET.ElementTree(file=dir.strip()) for elem in tree.iter(tag='name'): if elem.text in names: print "i get it" else: print "i didn't get it"extract n+=1 delete.write(dir) break print n
再得到我们想要的delete.txt文件之后,我们再用一个命令即可得到去除的文件。
grep -v -f delete.txt trainval.txt > trainvla.txt
-v 就是将未匹配到的字符输出。这样就可以把两个文件中不同的东西输出了。
7.如何将一个文件中各行的内容打乱。
见该网址即可:http://www.programgo.com/article/522152370/最后附上在github上问SSD作者如何利用自己数据fine-tune SSD模型,然后作者给出了如下回答:
You should create a labelmap file for your own data using : https://github.com/weiliu89/caffe/blob/ssd/tools/create_label_map.cpp
And currently it only support annotation whose format is same as VOC or COCO. If not, you should write your own function to read the annotation. You can refer to:https://github.com/weiliu89/caffe/blob/ssd/src/caffe/util/io.cpp#L251 (Parse VOC/ILSVRC detection annotation.)
I would also strongly suggest using this to debug before you train on your own data.:https://github.com/weiliu89/caffe/blob/ssd/examples/ssd.ipynb
参考网址:
同时删除两个文件中相同的部分:http://www.cnblogs.com/raceblog/archive/2011/03/24/shell-delete-comm.html相关文章推荐
- 使用lenet模型训练及预测自己的图片数据
- Caffe初试(三)使用caffe的cifar10网络模型训练自己的图片数据
- 使用自己的数据训练Faster-RCNN
- py-faster-rcnn用自己的数据训练模型
- Caffe使用step by step:使用自己数据对已经训练好的模型进行finetuning
- 【深度学习】笔记6:使用caffe中的CIFAR10网络模型和自己的图片数据训练自己的模型(步骤详解)
- 使用py-faster-rcnn训练自己的数据
- Matconvnet 训练自己的数据(使用现有模型)
- py-faster-rcnn用自己的数据训练模型
- 【神经网络与深度学习】Caffe使用step by step:使用自己数据对已经训练好的模型进行finetuning
- 使用faster rcnn训练自己的数据(py-faster-rcnn )
- Caffe使用step by step:使用自己数据对已经训练好的模型进行finetuning
- mxnet实战笔记(1) - 使用自己的图片数据训练CNN模型
- mxnet 使用自己的图片数据训练CNN模型
- 使用caffe框架利用faster-rcnn来训练自己的数据集
- Caffe上训练使用自己的数据
- 使用ImageNet在faster-rcnn上训练自己的分类网络
- 使用openface训练自己的第一个模型
- caffe安装,编译(包括CUDA和cuDNN的安装),并训练,测试自己的数据(caffe使用教程)
- 【faster-rcnn】训练自己的数据——修改图片格式、类别