下载下来的2013数据是每个类别一个文件夹,为了处理成需要的txt模式,主要有以下几步。
1、先解压大文件夹
2、通过sh脚步一起解压小文件夹
dir=/data1/imagenet/ILSVRC2013_DET_train
out=/data1/imagenet/train
for x in `ls $dir/*tar`
do
filename=`basename $x .tar`
tar -xvf $x -C $out
done
3、开始制作成txt格式了。实例:1.jpg 1
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import glob
import random
import os
import re
count=1
rootdir=''
dirs=os.listdir(rootdir)
def ReadFileDatas():
FileNamelist = []
file = open('imageLabel.txt','r+')
for line in file:
line=line.strip('\n')
FileNamelist.append(line)
print 'len ( FileNamelist ) = ',len(FileNamelist)
file.close()
return FileNamelist
def WriteDatasToFile(listInfo):
file_handle=open('label.txt',mode='a')
for idx in range(len(listInfo)):
str = listInfo[idx]
str_Result = str+'\n'
print(str)
file_handle.write(str_Result)
file_handle.close()
if __name__=='__main__':
for dir in dirs:
print 'the_dir_name is :',dir
imageList = os.listdir(rootdir+dir)
random.shuffle(imageList)
with open('imageLabel.txt','a+') as f:
for image_name in imageList:
print image_name
image_label_save_item = dir+'/'+image_name.split('/')[-1] + ' ' + str(count)
f.write(image_label_save_item + '\n')
#print image_label_save_item
f.close()
count=count+1
listFileInfo = ReadFileDatas()
random.shuffle(listFileInfo)
WriteDatasToFile(listFileInfo)
4、可以转换成lmdb了
#!/bin/bash
# convert images to lmdb
DATA= #这次操作的图像数据和标签文件所在的路径(文件夹)
IMGDIRNAME= #存储所有图像数据的文件夹
IMGLIST=test.txt #val.txt train.txt # 分别生成训练和验证的 lmdb文件
LMDBNAME=resnet_test_224_lmdb #resnet_train_224_lmdb #验证的lmdb文件夹名resnet_valid_224_lmdb 和训练的lmdb文件夹名
rm -rf $DATA/$LMDBNAME echo 'converting images...' #rm -rf 用于强制移除已经存在的文件夹
caffe/build/tools/convert_imageset -resize_height 224 -resize_width 224 --shuffle=true $IMGDIRNAME/ $DATA/$IMGLIST $DATA/$LMDBNAME