https://zhuanlan.zhihu.com/p/53068162html
本文做者管斌,天津大学 电气自动化与信息工程学院研二在读,目前研究方向是深度学习在医学图像检测上的应用。python
正文git
目前object detection这块主流的数据集主要就是COCO和Pascal VOC格式的。github上现成的检测算法基本都是自带VOC格式数据集的输入接口的,因此想要跑起来一个算法,咱们须要准备好Pascal VOC格式的数据集就能够了。可是以前网上没有对小白很友好的准备Pascal VOC格式数据集的教程。github
因此我写了这篇文章,让新手也能够立刻学会的教程。这样你们就不用为准备数据集浪费太多时间。若是看完这篇文章还有不清楚的能够评论区问我。算法
以我从零准备本身的数据集为例子,首先准备好全部的图像和 用标注工具labelme 标注好的 .xml格式文件。如何组织文件夹和文件位置我录了个视频给你们看清楚。python2.7
https://v.qq.com/x/page/e0818v35sgi.htmlide
视频中噪声有点大,建议静音观看工具
在一个文件夹 image 里建立两个子文件夹 train 和 test 分别存放全部的训练和测试图像。学习
一样在文件夹 label 里建立两个子文件夹 train 和 test 分别存放全部的训练和测试标注文件。测试
以上是准备原始的数据,而后咱们要分别提取文件夹image和label里的文件路径,为接下来制做Pascal VOC格式数据集作准备。
注:本文的脚本代码是基于python2.7环境的,python3环境的用户能够用anaconda自行建立一个python2.7的环境,具体方法请百度。
建立sortpath1.sh文件,文件里就一行代码,复制进去保存之后关闭。
find /data/dataset/THIGH -name '*.xml' |sort -n > lb.txt
再建立sortpath2.sh文件,文件里也就一行代码,复制进去保存之后关闭。
find /data/dataset/THIGH -name '*.jpg' |sort -n > fullpath.txt
而后打开终端,输入
./ sortpath1.sh
按回车,即准备好了标注文件的全部路径 lb.txt。
再输入
./ sortpath2.sh
按回车,就准备好了全部图像的路径 fullpath.txt。
打开 fullpath.txt 和 lb.txt 看一下,会是下面这样的。
fullpath.txt
lb.txt
而后建立 prepare.py脚本,完整代码以下,直接复制便可。
import shutil import os img_path = 'VOC2007/JPEGImages' lb_path = 'VOC2007/Annotations' txt_path = 'VOC2007/ImageSets/Main/' os.makedirs(img_path) os.makedirs(lb_path) os.makedirs(txt_path) fg = dict() types = ['humerus', 'elbow', 'forearm'] fimg = open('fullpath.txt') for line in fimg: path = line.strip() flag = path.split('/')[-1].split('.')[0] for typ in types: if path.find(typ) == -1: continue else: flag = typ + '@' + flag fg[flag] = path flb = open('lb.txt') for line in flb: path = line.strip() flag = path.split('/')[-1].split('.')[0] for typ in types: if path.find(typ) == -1: continue else: flag = typ + '@' + flag temp = path.split('/')[-2] extend = path.split('/')[-3] #print temp if fg.has_key(flag): shutil.copy(fg[flag], img_path) flag = flag.split('@')[-1] os.rename(img_path + '/' + flag + '.jpg', img_path + '/' + extend + '_' + flag + '.jpg') # print img_path, img_path.replace(flag, extend + '_' + flag) shutil.copy(path, lb_path) os.rename(lb_path + '/' + flag + '.xml', lb_path + '/' + extend + '_' + flag + '.xml') if temp == 'train': t1 = open(txt_path + 'train.txt', 'a') t1.write(extend + '_' + flag + '\n') t1.close() t2 = open(txt_path + 'trainval.txt', 'a') t2.write(extend + '_' + flag + '\n') t2.close() if temp == 'test': t3 = open(txt_path + 'test.txt', 'a') t3.write(extend + '_' + flag + '\n') t3.close() if temp == 'val': print temp t4 = open(txt_path + 'val.txt', 'a') t4.write(extend + '_' + flag + '\n') t4.close() t5 = open(txt_path + 'trainval.txt', 'a') t5.write(extend + '_' + flag + '\n') t5.close()
保存,打开终端输入下述代码,并运行
python prepare.py
到这里全部工做就结束了!已经直接制做好了Pascal VOC格式的数据集!最后制做好的的数据集是这样的!
下面是个人知乎原文连接,欢迎评论交流。点击阅读原文,也能够直接访问。