caffe 利用VoC2012制作图片数据集

代码

#coding='utf-8'
import scipy.misc
import caffe
import numpy as np
import os.path as osp
from xml.dom import minidom
from PIL import Image, ImageDraw
import matplotlib.pyplot as plt
import h5py

classes = ('__background__',  # always index 0
		   'aeroplane', 'bicycle', 'bird', 'boat',
		   'bottle', 'bus', 'car', 'cat', 'chair',
			'cow', 'diningtable', 'dog', 'horse',
			'motorbike', 'person', 'pottedplant',
			'sheep', 'sofa', 'train', 'tvmonitor')

def load_pascal_annotation(index, pascal_root):

	class_to_ind = dict(zip(classes, range(21)))
	filename = osp.join(pascal_root, 'Annotations', index + '.xml')
	# print 'Loading: {}'.format(filename)
	def get_data_from_tag(node, tag):
		return node.getElementsByTagName(tag)[0].childNodes[0].data

	with open(filename) as f:
		data = minidom.parseString(f.read())

	objs = data.getElementsByTagName('object')
	num_objs = len(objs)

	boxes = np.zeros((num_objs, 4), dtype=np.uint16)
	gt_classes = np.zeros((num_objs), dtype=np.int32)
	overlaps = np.zeros((num_objs, 21), dtype=np.float32)

	# Load object bounding boxes into a data frame.
	for ix, obj in enumerate(objs):
		# Make pixel indexes 0-based
		x1 = float(get_data_from_tag(obj, 'xmin')) - 1
		y1 = float(get_data_from_tag(obj, 'ymin')) - 1
		x2 = float(get_data_from_tag(obj, 'xmax')) - 1
		y2 = float(get_data_from_tag(obj, 'ymax')) - 1
		cls = class_to_ind[
			str(get_data_from_tag(obj, "name")).lower().strip()]
		boxes[ix, :] = [x1, y1, x2, y2]
		gt_classes[ix] = cls
		overlaps[ix, cls] = 1.0

	overlaps = scipy.sparse.csr_matrix(overlaps)

	return {'boxes': boxes,
			'gt_classes': gt_classes,
			'gt_overlaps': overlaps,
			'flipped': False,
			'index': index}

def val():

	train_num = 100
	pascal_root = 'D://learn/目标检测/VOCdevkit/VOC2012/'
	list_file = 'trainval.txt'
	indexlist = [line.rstrip('\n') for line in open(
	osp.join(pascal_root, 'ImageSets/Main', list_file))]

	f = h5py.File('train.h5', 'w')
	f.create_dataset('data', (train_num, 3,227,227), dtype='f8')
	f.create_dataset('label', (train_num, 20), dtype='i')

	f1 = h5py.File('test.h5', 'w')
	f1.create_dataset('data', (int(train_num*0.25), 3,227,227), dtype='f8')
	f1.create_dataset('label', (train_num, 20), dtype='i')

	# 然后输出前100个图像的label
	for i, name in enumerate(indexlist[0:train_num]):
		multilabel = np.zeros(20).astype(np.float32)
		img = Image.open(pascal_root+'JPEGImages/'+name+'.jpg')
		img = scipy.misc.imresize(img, (227,227)).transpose((2,0,1))
		anns = load_pascal_annotation(name, pascal_root)
		for label in anns['gt_classes']:
			multilabel[label - 1] = 1
		print (i,multilabel)
		f['data'][i] = img
		f['label'][i] = multilabel

	for i, name in enumerate(indexlist[train_num:int(train_num +train_num*0.25)]):
		multilabel1 = np.zeros(20).astype(np.float32)
		img1 = Image.open(pascal_root+'JPEGImages/'+name+'.jpg')
		img1 = scipy.misc.imresize(img, (227,227)).transpose((2,0,1))
		anns1 = load_pascal_annotation(name, pascal_root)
		for label in anns['gt_classes']:
			multilabel1[label - 1] = 1
		print (i,multilabel1)
		f1['data'][i] = img1
		f1['label'][i] = multilabel1


	with open("train.h5list","w")as f:
		f.write("train.h5\n")

	with open("test.h5list","w")as f1:
		f1.write("test.h5\n")



def main():
	pascal_root = 'D://learn/目标检测/VOCdevkit/VOC2012/'

	filename = '2007_000783' 

	plt.figure()
	img = Image.open(pascal_root+'JPEGImages/'+filename+'.jpg')
	gt = load_pascal_annotation(filename, pascal_root)
	draw = ImageDraw.Draw(img)

	for box in gt['boxes']:
		draw.rectangle(list(box), outline = 'red')

	plt.imshow(img)
	plt.title('GT: {}'.format([classes[g] for g in gt['gt_classes']]))
	plt.axis('off');
	plt.show() 

val()

main(显示标记框)

在这里插入图片描述
利用xml文件

val(制作数据集)

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

佐倉

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值