从已有VOC2007数据集生成yolov3所需要的数据集,以及正式开始调试程序需要修改的地方

一. 关于VOC2007数据集我们需要知道的事

1.1 下载地址

Pascal VOC Dataset Mirror

(1)目前对于新手来说,先不要犹豫那么多,无脑下载下面的红框链接,很明显,根据名字分析得是训练数据集

(2)下载之后打开文件夹:注意红框标注出来的路径

注意,我们现在的目标是做目标检测,其他的分割啥的先不要理会,会耽误时间,这样我们看到有segmentation字眼的都排除掉。

(3)解析目标检测所需文件作用

Annotations:存放xml文件,内部有图片的标注信息

ImageSets:内部根据不同的图像任务,分成了不同的文件,文件内部存放图片名的txt文件。

 在yolov3里面具体layout和main选哪个还不知道

你多任你多,反正yolov3都需要自己生成

JPEGImages:存放图片

1.2.  yolov3肯定有自己的需要的txt文件格式,所以我们还需要转换成yolov3所需要的格式

yolov3 需要什么txt文件,参考1.2.2节,实际详细操作步骤参考1.2.3节

代码:https://github.com/PositiveTom/yolov3.git

1.2.1 网上一个人生成的数据集格式大致是以下形式:还不知道这样的合理性

(1)以原始数据集为基础,生成trainval和test,trainval占原始数据的0.9,test占0.1

(2)以trainval为基础,生成train和val,train占trainval的0.9,val占0.1

(3)打开train.txt,制作2007_train.txt

train.txt存放图片数据的名称,2007_train.txt存放图片的路径,以及ground truth以及类别

(4)打开val.txt,制作2007_val.txt

存放数据同上

note:ground truth的制作需要从xml文件里面提取。

1.2.2 上述只是非官方做法,还是以官方做法为准,如下所示

 (1)需要一个.data文件,内部存放如下:类别数目,train.txt路径,val.txt路径,类别.names文件路径

(2)train.txt文件内部内容如下所示:简单说就是存放图片路径

(3)val.txt文件内部内容同上

(4).names文件内部内容

 

(5)内部直接获取.data文件,就可以依次获取其他的文件

(6)推荐看完1.2.3 生成所需要的文件后再来看这里,在1.2.3 之后,我们还需要创建(1)中提到的.data文件和.names文件

直接改名

 再创建.data文件,注意各文件的路径

 1.2.3. 更加详细的步骤:(抓输入和输出)主要就是如何由VOC2007的xml文件夹和图片数据文件夹,生成yolov3所需要的一些txt文件

你在官方文件的基础之上,新添了一个生成label集合的文件StatisCatogories.py

输入:xml文件夹路径

输出:包含类别名的txt文件

(1)运行data/makeTxt.py,生成ImageSets目录下的train.txt,val.txt,test.txt

内部存储图片名称:(xml和图片名相同,除了后缀不同)

输入:xml文件夹

输出:ImageSets目录下的train.txt,val.txt,test.txt

(2)运行voc_label.py,由(1)中的train.txt找到指定的图片,生成当前路径下的train.txt,val.txt,test.txt,内部存储格式如下:

输入:ImageSets目录下的train.txt,val.txt,test.txt

           图像数据集的路径

输出:txt文件夹下的图片lable

           当前路径下的train.txt,val.txt,test.txt

以及还要生成txt文件夹下面的label,图片名.txt,如下所示

关于label的含义,依次是类别 + x占比,y占比,宽占比,高占比

 综上所述,我们只需要原数据集下的train,val,test即可,重点在于后面的label

1.3 在完成上述步骤后,源码需要更改的地方

 (1)获取了train.txt文件的路径之后,创建一个继承自Dataset的类

(2)把这个类传给torch.utils.data.DataLoader实例化对象,即可

(1)、(2)步可以归结为以下步骤(将数据加载到模型

 (3)官方的dataset内部还需要指定图片的含label的.txt

修改dataset.py内部LoadImagesAndLabels类的self.label_files获取路径方式

(4)在加载测试数据集时,还要注意.shapes文件 

这个.shapes文件是用来做什么的呢?

根据代码注释,存放的是图片的宽和高,为什么验证集需要使用,而训练集不需要呢?

所以在这里还得自己写一个文件,保存验证集数据图片的宽和高

已经上传github,data文件夹下的Getshape.py文件

输入:val.txt

输出:val.shapes

(5)我要大改,全部改成用绝对路径,相对路径真的恶心

其实也没改多少,在上面的基础之上只做了以下改动

根本目标:把train.txt,和val.txt改成绝对路径

 为此要做的事:就做了两件事

1)voc_label.py改了一个地方

 2)dataset.py改了一个地方,获取label的地方

忙活了一上午,才把数据获取搞清楚。。。。


三. 修改.cfg文件

修改里面的classes数量,你的数据集有多少类,这里就改成多少类

你在更改classes的时候,一定要更改紧接着上一层的卷积核个数,因为原来的80类组成了   

255 = 3 x (80+4+1)

现在是   75 = 3 x (20+4+1) 

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值