当前位置:   article > 正文

在caffe环境下使用faster-rcnn训练中国交通标志检测数据集CCTSDB数据_fasterr-cnn 中国交通标志数据集

fasterr-cnn 中国交通标志数据集

为了不增加工作量,可以直接下载我上传的数据集:
https://download.csdn.net/download/qq_34852955/16230986?spm=1001.2014.3001.5501

…我没设置要积分和金币,系统自己设置的,等我过几天有时间传到github上面吧

前言

中国交通标志检测数据集CCTSDB,由长沙理工大学提供,包括上万张有标注的图片,数据集下载地址为:

ps:推荐只使用前4000张照片,因为后面有很多张图片没有标注,需要一张一张的删除,太过于麻烦,所以尽量用前4000张图片,没有标注的图片比较少,而且对于一般网络来说训练4000张图片已经可以满足要求

https://github.com/csust7zhangjm/CCTSDB
  • 1

一、VOC格式

VOC格式主要包含三个文件夹Annotations,ImageSets,JPEGImages,主要适用于faster-rcnn等模型的训练,ImageSets下面有一个Main的文件夹,如下图,一定按照这个名字和格式建好文件夹

  1. Annotations:这里是存放你对所有数据图片做的标注,每张照片的标注信息必须是xml格式。
  2. JPEGImages:用来保存你的数据图片,一定要对图片进行编号,一般按照voc数据集格式,采用六位数字编码,如000001.jpg、000002.jpg等。
  3. ImageSets:该文件下有一个main文件,main文件下有四个txt文件,分别是train.txt、test.txt、trainval.txt、val.txt,里面都是存放的图片号码。

在这里插入图片描述

二、将中国交通标志检测数据集CCTSDB数据转换成VOC数据格式

1.将所有的png图片转换为jpg格式并将名字变为6位

将所有的图片数据放入JPEGImages文件夹

touch rename.sh
  • 1

将这个脚本粘贴进去

# 初始化变量
i=0
#将png格式转换成jpg格式
ls -1 *.png | xargs -n 1 bash -c 'convert "$0" "${0%.png}.jpg"'
# for 循环
for name in *.jpg
do
# 注意加双引号
echo "$name"
# 注意赋值方式  
echo "$i$name"
# 注意name加双引号
mv "$name" "$i$name"
rm *png
done
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
./rename.sh
  • 1

你会神奇的发现所有的png都变成的jpg,并且名字从五位变成了六位。

2.将CCTSDB数据转换成xml的读取形式

将CCTSDB的GroundTruth文件夹下的groundtruth0000-9999.txt文件复制到VOC2007文件夹下的Annotations文件夹下,并使用excel处理一下,让它的名字前面都加一个0,并将所有的png变成jpg(这个特别简单不细讲),变成和前面处理过图片一样的6位
在这里插入图片描述
之后

touch extract.py
  • 1

将下面的内容复制进去

#! /usr/bin/python
# -*- coding:UTF-8 -*-
import re
f=open('groundtruth0000-9999.txt','r')
f1=f.readlines()
for i in f1:
    #p='%s.txt'%(i[7:15])
    p='%s.txt'%re.findall("(.*).jpg*",i)
    c= p.strip()[2:8]+".txt"
    print c
    with open(c,'w')as a:
            a.write(i)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
python extract.py
  • 1

神奇的发现,脚本将标注的数据提取出来并且排序,并将里面每一行分割成一个文件。
在这里插入图片描述在这里插入图片描述最终VOC格式要xml数据类型所以要继续将txt转换成xml:

touch txt2xml.py
  • 1

将下面代码复制进去,路径改成自己的路径

#! /usr/bin/python
# -*- coding:UTF-8 -*-
import os, sys
import glob
from PIL import Image
###将txt格式文件转换为xml格式文件
# 图像存储位置
src_img_dir = "/home/lijing/py-faster-rcnn/data/VOCdevkit2007/VOC2007/JPEGImages"
# 图像的 ground truth 的 txt 文件存放位置
#windows 系统路径用“\”,ubuntu 中用“/”
src_txt_dir = "/home/lijing/py-faster-rcnn/data/VOCdevkit2007/VOC2007/Annotations"
src_xml_dir = "/home/lijing/py-faster-rcnn/data/VOCdevkit2007/VOC2007/Annotations"
#glob 返回的文件名只包括当前目录里的文件名,不包括子文件夹里的文件。
img_Lists = glob.glob(src_img_dir + '/*.jpg')#为图像路径列表
print(img_Lists)


img_basenames = [] # e.g. 100.jpg
for item in img_Lists:
    img_basenames.append(os.path.basename(item))
 
img_names = [] # e.g. 100
for item in img_basenames:
    temp1, temp2 = os.path.splitext(item)
    img_names.append(temp1)
 
for img in img_names:
    im = Image.open((src_img_dir + '/' + img + '.jpg'))
    width, height = im.size
 
    # open the crospronding txt file
    gt = open(src_txt_dir + '/' + img + '.txt').read().splitlines()
    #gt = open(src_txt_dir + '/gt_' + img + '.txt').read().splitlines()
 
    # write in xml file
    #os.mknod(src_xml_dir + '/' + img + '.xml')
    xml_file = open((src_xml_dir + '/' + img + '.xml'), 'w')
    xml_file.write('<annotation>\n')
    xml_file.write('    <folder>VOCdevkit</folder>\n')
    xml_file.write('    <filename>' + str(img) + '.jpg' + '</filename>\n')
    xml_file.write('    <size>\n')
    xml_file.write('        <width>' + str(width) + '</width>\n')
    xml_file.write('        <height>' + str(height) + '</height>\n')
    xml_file.write('        <depth>3</depth>\n')
    xml_file.write('    </size>\n')
 
 
    # write the region of image on xml file
    for img_each_label in gt:
        spt = img_each_label.split(';') #这里如果txt里面是以逗号‘,’隔开的,那么就改为spt = img_each_label.split(',')。
        xml_file.write('    <object>\n')
        xml_file.write('        <name>' + str(spt[5]) + '</name>\n')
        xml_file.write('        <pose>Unspecified</pose>\n')
        xml_file.write('        <truncated>0</truncated>\n')
        xml_file.write('        <difficult>0</difficult>\n')
        xml_file.write('        <bndbox>\n')
        xml_file.write('            <xmin>' + str(spt[1]) + '</xmin>\n')
        xml_file.write('            <ymin>' + str(spt[2]) + '</ymin>\n')
        xml_file.write('            <xmax>' + str(spt[3]) + '</xmax>\n')
        xml_file.write('            <ymax>' + str(spt[4]) + '</ymax>\n')
        xml_file.write('        </bndbox>\n')
        xml_file.write('    </object>\n')
 
    xml_file.write('</annotation>')
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
python txt2xml.py
  • 1

又会神奇的发现每个txt都多了一个xml文件,xml的格式是这样的:
在这里插入图片描述

3、建立训练和测试文件

随便找一个地方,最好放在自己的数据集下,避免误导

touch train_vel.py
  • 1

将下面代码复制进去,路径改成自己的路径

import os
import random
trainval_percent = 0.5
train_percent = 0.5
xmlfilepath = '/home/lijing/py-faster-rcnn/data/VOCdevkit2007/VOC2007/Annotations'
txtsavepath = '/home/lijing/py-faster-rcnn/data/VOCdevkit2007/VOC2007/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(txtsavepath+'/trainval.txt', 'w')
ftest = open(txtsavepath+'/test.txt', 'w')
ftrain = open(txtsavepath+'/train.txt', 'w')
fval = open(txtsavepath+'/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()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31

神奇的发现在/ImageSets/Main文件夹下出现四个按照比例分配的四个txt文件
在这里插入图片描述

结束

至此,CCTSDB已经转换成VOC格式可以进行训练了,我使用caffe进行的训练,训练步骤很简单,改几个文件就可以,可以参考其他博客:
https://blog.csdn.net/qq_34809033/article/details/84777418?utm_medium=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromMachineLearnPai2-1.channel_param&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromMachineLearnPai2-1.channel_param
我使用faster-rcnn训练的结果很好,有什么问题可以给我留言。
在这里插入图片描述在这里插入图片描述

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家小花儿/article/detail/254019
推荐阅读
相关标签
  

闽ICP备14008679号