https://zhuanlan.zhihu.com/p/53068162

本文作者管斌,天津大学 电气自动化与信息工程学院研二在读,目前研究方向是深度学习在医学图像检测上的应用。

正文

目前object detection这块主流的数据集主要就是COCO和Pascal VOC格式的。github上现成的检测算法基本都是自带VOC格式数据集的输入接口的,所以想要跑起来一个算法,我们需要准备好Pascal VOC格式的数据集就可以了。但是之前网上没有对小白很友好的准备Pascal VOC格式数据集的教程。

所以我写了这篇文章,让新手也可以马上学会的教程。这样大家就不用为准备数据集浪费太多时间。如果看完这篇文章还有不清楚的可以评论区问我。

以我从零准备自己的数据集为例子,首先准备好所有的图像和 用标注工具labelme 标注好的 .xml格式文件。如何组织文件夹和文件位置我录了个视频给大家看清楚。

https://v.qq.com/x/page/e0818v35sgi.html

视频中噪声有点大,建议静音观看

在一个文件夹 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 shutilimport osimg_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] = pathflb = 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格式的数据集!最后制作好的的数据集是这样的!

下面是我的知乎原文链接,欢迎评论交流。点击阅读原文,也可以直接访问。

https://zhuanlan.zhihu.com/p/53068162

©著作权归作者所有:来自51CTO博客作者mb5fe948249bc3d的原创作品,如需转载,请注明出处,否则将追究法律责任

更多相关文章

  1. php常用运算符、条件分支、循环、及文件引入
  2. 5G机遇 | 如何解决在核心场景的高并发、超低延迟需求?
  3. 0125-php与html混编的方式与短标签的使用及php数据类型
  4. python入门教程13-02 (python语法入门之库相关操作)
  5. 搭建php环境以及运行原理-php与html混编方式-常用数据类型
  6. 数据结构之并查集
  7. 成都PowerBI培训和技术支持
  8. php学习笔记(运算符的相关知识、分支判断与循环_替换语法、文件包
  9. 删除 Linux 上 N 天以前的文件

随机推荐

  1. AndroidManifest中activity属性设置大全
  2. android:HttpClient请求(get、post)
  3. Android(安卓)ListView控件使用
  4. Android APP无法接收开机广播
  5. OpenWrt上运行Android OS
  6. ScrollView嵌套webview因焦点问题导致自
  7. Android 开发判断用户是否安装微信和QQ并
  8. Android EditText 自动获取焦点,并弹出键
  9. 判断客户端类型
  10. Android一日笔记