最近按照博主分享的流程操作,将自己遇到的难题记录下来,附上原博文链接:https://blog.csdn.net/jx232515/article/details/78680724

使用SSD训练自己的数据集,就要制作成voc2007的数据格式,然后才能转化数据格式进行训练.

第一步:首先了解VOC2007数据集的内容

1)JPEGImages文件夹

文件夹里包含了训练图片和测试图片,混放在一起

2)Annatations文件夹

文件夹存放的是xml格式的标签文件,每个xml文件都对应于JPEGImages文件夹的一张图片

3)ImageSets文件夹

Action存放的是人的动作,我们暂时不用
Layout存放的人体部位的数据。我们暂时不用
Main存放的是图像物体识别的数据,分为20类,Main里面有test.txt, train.txt, val.txt,trainval.txt.这四个文件我们后面会生成
Segmentation存放的是可用于分割的数据,做检测识别也是用不到的.

4)其他的文件夹不解释了.

如果你下载了VOC2007数据集,那么把它解压,把各个文件夹里面的东西删除,保留文件夹名字。如果没下载,那么就仿照他的文件夹格式,自己建好空文件夹就行。

第二步:处理JPEGSImages文件夹(不重命名也可以).

1)把你的图片放到JPEGSImages里面,在VOC2007里面,人家的图片文件名都是000001.jpg类似这样的,我们也统一格式,把我们的图片名字重命名成这样的.这里提醒下,若是使用软件或者其他代码重命名,一定注意jpg和xml文件一一对应,若有的程序是随机重命名,就要小心jpg和xml文件不对应.

%%
clc;
clear;
maindir='H:\medical_data\voctest\JPEGImage\';
name_long=6;%图片名字的长度,如000001.jpg为6,最多9位,可修改
num_begin=1;%图像命名开始的数字如000123.jpg开始的话就是123

subdir= dir(maindir);
%%
% dir得到的为结构体数组每个元素都是如下形式的结构体: 
%        name    -- filename
%        date      -- modificationdate
%         bytes     --number of bytes allocated to the file
%        isdir       -- 1 if name is a directory and0 if not
%         datenum --modification date as a MATLAB serial date number
%%
n=1;
fori = 1:length(subdir)
  if ~strcmp(subdir(i).name ,'.') &&~strcmp(subdir(i).name,'..')
           img=imread([maindir,subdir(i).name]);
           imshow(img);
           str=num2str(num_begin,'%09d');
           newname=strcat(str,'.jpg');
           newname=newname(end-(name_long+3):end);
           system(['rename '[maindir,subdir(i).name] ' ' newname]);
           num_begin=num_begin+1;
           fprintf('已经处理%d张图片\n',n);
           n=n+1;
          pause(0.1);%可以把暂停去掉
        end
    end

3.生成Annatations

网上很多教程,但是我觉得都很麻烦,直到我遇到了一位大神做的软件,手动标注,会自动生成图片信息的xml文件
1)在这里下载:https://github.com/tzutalin/labelImg,使用很简单
2)保存的路径就是我们的Annatations文件夹,
3)一张张的慢慢画框.做标签.

4.第四步:生成ImageSets文件夹中的Main文件夹中的四个文件. test.txt是测试集,train.txt是训练集,val.txt是验证集,trainval.txt是训练和验证集.VOC2007中,trainval大概是整个数据集的50%,test也大概是整个数据集的50%;train大概是trainval的50%,val大概是trainval的50%,下面的代码生成这四个文件,百分比可以自己调整.

import os
import random trainval_percent = 0.7
train_percent = 0.5
xmlfilepath = 'Annotations'
txtsavepath = 'ImageSets\Main'
total_xml = os.listdir(xmlfilepath) num=len(total_xml)
list=range(num)
tv=int(num*trainval_percent)
tr=int(tv*train_percent)
trainval= random.sample(list,tv)
train=random.sample(trainval,tr) ftrainval = open('ImageSets/Main/trainval.txt', 'w')
ftest = open('ImageSets/Main/test.txt', 'w')
ftrain = open('ImageSets/Main/train.txt', 'w')
fval = open('ImageSets/Main/val.txt', 'w') for i in list:
name=total_xml[i][:-4]+'\n'
if i in trainval:
ftrainval.write(name)
if i in train:
ftrain.write(name)
else:
fval.write(name)
else:
ftest.write(name) ftrainval.close()
ftrain.close()
fval.close()
ftest .close() </span>

4.生成lmdb文件

首先进入caffe目录,可以看到/data/VOC0712/有create_list.sh,create_data.sh和其他文件.我们运行这两个脚本文件就可以转换成lmdb数据格式,用于模型训练.

我们制作自己的数据,就可以把该文件夹的create_list.sh和create_data.sh, labelmap_voc.prototxt复制放入自己的文件夹,我的文件夹是(zyt).

注意create_list.sh和create_data.sh中路径的修改,修改为自己的路径,把原来的labelmap_voc.prototxt的类别要改成自己的类别,

将该文件中的类别修改成和自己的数据集相匹配,注意需要保留一个label0, background类别,要不会出错。

(1)create_list.sh修改如下:

root_dir=$HOME/data/VOCdevkit/(本人仿照VOC2007和VOC2012,也将制作的数据集zyt文件夹存放于HOME/data/VOCdevkit目录下,若数据集不是该路径,此行代码要进行修改)

sub_dir=ImageSets/Main

bash_dir="$(cd"$(dirname "${BASH_SOURCE[0]}")" && pwd)"

fordataset in trainval test

do

dst_file=$bash_dir/$dataset.txt

if[ -f $dst_file ]

then

rm-f $dst_file

fi

forname in zyt# VOC2012

do

if[[ $dataset == "test" && $name == "VOC2012"]]

then

continue

(2)create_data.sh修改如下:

cur_dir=$(cd$( dirname ${BASH_SOURCE[0]} ) && pwd )

root_dir=$cur_dir/../..

cd$root_dir

redo=1

data_root_dir="$HOME/data/VOCdevkit"

dataset_name="zyt"

mapfile="$root_dir/data/$dataset_name/labelmap_voc.prototxt"

anno_type="detection"

db="lmdb"

min_dim=0

max_dim=0

width=0

height=0

extra_cmd="--encode-type=jpg--encoded"(若数据集图片格式为png,则讲jpg改为png)

改完之后进入home/caffessd/caffe目录下,用命令运行分别以下两个文件就可以转换成lmdb数据格式.

#Create the trainval.txt, test.txt, and test_name_size.txt incaffessd/caffe/data/zyt/   
./data/zyt/create_list.sh
#You can modify the parameters in create_data.sh if needed.    
#It will create lmdb files for trainval and test with encoded originalimage:    
#   -$HOME/data/VOCdevkit/zyt/lmdb/zyt_trainval_lmdb   (lmdb和zyt_trainval_lmdb这两个文件夹是生成的 )
#  -$HOME/data/VOCdevkit/zyt/lmdb/zyt_test_lmdb (lmdb和zyt_test_lmdb这两个文件夹是生成的 )
#and make soft links at caffessd/caffe/examples/zyt/  (此examples目录下的zyt文件夹是生成的 )
./data/zyt/create_data.sh

此时发现执行create_data.sh时还是出错了,报错为:AttributeError:'module' object has no attribute'LabelMap',原因是没有添加环境变量,
解决方式:其中$CAFFE_ROOT是本caffe的根目录,注意换成自己的.

echo"export PYTHONPATH=$home/zyt/caffe/python">> ~/.profile      
source ~/.profile     
echo $PYTHONPATH #检查环境变量的值

当看到生成lmdb文件就是制作成功了.

至此,数据制作完成.下一步即可考虑如何使用自己制作的数据进行训练.

制作voc2007数据格式的数据集的更多相关文章

  1. 在Ubuntu内制作自己的VOC数据集

    一.VOC数据集的简介 PASCAL VOC为图像的识别和分类提供了一整套标准化的优秀数据集,基本上就是目标检测数据集的模板.现在有VOC2007,VOC2012.主要有20个类.而现在主要的模型评估 ...

  2. TensorFlow 制作自己的TFRecord数据集

    官网的mnist和cifar10数据之后,笔者尝试着制作自己的数据集,并保存,读入,显示. TensorFlow可以支持cifar10的数据格式, 也提供了标准的TFRecord 格式,而关于 ten ...

  3. 将本地图片数据制作成内存对象数据集|tensorflow|手写数字制作成内存对象数据集|tf队列|线程

      样本说明: tensorflow经典实例之手写数字识别.MNIST数据集. 数据集dir名称 每个文件夹代表一个标签label,每个label中有820个手写数字的图片 标签label为0的文件夹 ...

  4. 使用labelImg制作自己的数据集(VOC2007格式)用于Faster-RCNN训练

    https://blog.csdn.net/u011956147/article/details/53239325 https://blog.csdn.net/u011574296/article/d ...

  5. faster-rcnn 目标检测 数据集制作

    本文的目标是制作目标检测的数据集 使用的工具是 python + opencv 实现目标 1.批量图片重命名,手动框选图片中的目标,将目标框按照一定格式保存到txt中 图片名格式(批量) .jpg . ...

  6. 仿照CIFAR-10数据集格式,制作自己的数据集

    本系列文章由 @yhl_leo 出品,转载请注明出处. 文章链接: http://blog.csdn.net/yhl_leo/article/details/50801226 前一篇博客:C/C++ ...

  7. 从零开始制作数据集所需要的所有python脚本

    最近一直在做图片数据集,积累了很多心得.我把我所使用的python脚本全部拿出来,当然这些脚本大部分网上都有,只不过比较分散. 我已经把所有代码上传到github上,觉得写的好的话,请给我一个star ...

  8. VOC数据集 目标检测

    最近在做与目标检测模型相关的工作,很多都要求VOC格式的数据集. PASCAL VOC挑战赛 (The PASCAL Visual Object Classes )是一个世界级的计算机视觉挑战赛, P ...

  9. win10 caffe python Faster-RCNN训练自己数据集(转)

    一.制作数据集 1. 关于训练的图片 不论你是网上找的图片或者你用别人的数据集,记住一点你的图片不能太小,width和height最好不要小于150.需要是jpeg的图片. 2.制作xml文件 1)L ...

随机推荐

  1. hyperledger fabric相关记录

    打开对接监控软件(statsd或者prometheus)开关 每个peer上 CORE_OPERATIONS_LISTENADDRESS=peer0.orgxxxxxxxxx:9443 CORE_ME ...

  2. 移动端跨平台方案对比:React Native、weex、Flutter

    跨平台一直是老生常谈的话题,cordova.ionic.react-native.weex.kotlin-native.flutter等跨平台框架百花齐放,颇有一股推倒原生开发者的势头. 为什么我们需 ...

  3. OO的奇妙冒险1

    OO的奇妙冒险 ~OOP入门与字符串处理~ 目录 总体分析 作业内容分析 作业内容总结 互测的收获 公测互测bug分析与总结 不太正经的个人自嗨 总体分析 公测 中测(基础与进阶): 其实在我看来,从 ...

  4. 转:为什么根据IP地址查询物理所在地,而不是mac地址?

    来自 https://mp.weixin.qq.com/s/aOZQGMnMI2nkX4-qcJL4WQ 读者 不是说mac地址是计算机网卡唯一的地址吗?这样不是可以直接定位到某一台机器吗?为什么要用 ...

  5. android studio 编辑markdown文件

    作为开发人员,对markdown应该比较熟悉,我们在Android开始中,可以使用studio引入Markdown Navigator插件,进行编辑. 搜索 Markdown Navigator 安装 ...

  6. django虚拟环境安装

    虚拟环境主要是防止不同版本的模块之间的冲突,维护多个项目的时候这个非常重要. 虚拟环境的安装 sudo apt install python-virtualenv 虚拟环境安装成功后,直接创建一个虚拟 ...

  7. 【基础】使用cookies,实现免登陆(七)

    实现过程: 1.测试网站:www.dx.com 2.登陆后的cookies:"DXSSO","Token=20A0FA7D-XXXX-XXXX-XXXX".至于 ...

  8. goodsSearch初始化选中代码

    watch: { selectGoodsList (val) { let list = [] val.forEach(item => { this.goodsList.forEach((tag, ...

  9. 利用Delphi编写Socket通信程序

    一.Delphi与Socket 计算机网络是由一系列网络通信协议组成的,其中的核心协议是传输层的TCP/IP和UDP协议.TCP是面向连接的,通信双方保持一条通路,好比目前的电话线,使用telnet登 ...

  10. asp.net IHttpModule浅析

    在asp.net程序中,我们除了使用系统自带的HttpModule模块,还可以自己定义一些自己的HttpModule接口模块.一个asp.net程序可以接收多个HttpModule模块. 众所周知,a ...