您的位置:首页 > Web前端

caffe:自己的数据训练模型 用于视频检索(一)

2017-02-23 15:07 549 查看
一、数据准备:

(1)原始数据

11类 包括目标和场景

目标:plane, oiltank, ship, warship, vehicel

场景:building, desert, residential, water

车辆:包括完整的和不完整的车辆

(2)扩充数据

 ①在原始框进行缩放平移,利用numpy

from __future__ import division
import scipy.io as scio
from PIL import Image
import numpy as np

# import matplotlib.pyplot as plt

dataFile = "C:/Users/liesmars/Desktop/QSData/MidData/mat/VIRAT1_2.mat"
ImgPath = "C:/Users/liesmars/Desktop/QSData/MidData/VIRAT1/"

fileName = scio.loadmat(dataFile)['filenames'][0]
# print "fileName:",fileName
XYdata = scio.loadmat(dataFile)['rs'][0]
# print "XYdata:", XYdata

fileNumb = len(XYdata)
# print fileNumb

N = 0
for i, rois in enumerate(XYdata):

Name = fileName[i]
Name = str(Name[0])
print "Name:", Name
FilePath = ImgPath + Name
ImageFile = Image.open(FilePath)
width = ImageFile.size[0]
print "width:", width

height = ImageFile.size[1]
print "height:", height

for box in rois:
x1 = box[0]
y1 = box[1]
x2 = box[2]
y2 = box[3]

w = x2 - x1
h = y2 - y1

obj = np.array([x1,y1,x2,y2])
# zoom = np.array([[1.2],[1.1]])
# zoom = np.tile(zoom,(1,4))
# print zoom

shift = np.array([[0.8,0.8,1.2,1.2],[0.9,0.9,1.1,1.1],[1,1,1,1],[0.8,0.8,1,1],[1,1,1.1,1.1],\
[0.8,1,1,1.1],[1,0.8,1.1,1],[(x1+w*1/3)/x1,(y1+h*1/3)/y1,(x2+w*1/3)/x2,(y2+h*1/3)/y2],\
[(x1-w*1/3)/x1,(y1-h*1/3)/y1,(x2-w*1/3)/x2,(y2-h*1/3)/y2]])

# print shift

XYmatrix = np.tile(obj,(9,1))
# print XYmatrix

objects = XYmatrix * shift
print objects

for item in objects:
# print item[0];
x1=np.maximum(item[0],0)
y1=np.maximum(item[1],0)
x2=np.minimum(item[2],width)
y2=np.minimum(item[3],height)

# with open("C:/Users/liesmars/Desktop/annotation/VIRAT1.txt",'a') as f:
# f.write(Name, + '\t' + 'vehicle' + '\t' + x1 + '\t' + y1 + '\t' + x2
# + '\t' + y2 + '\n')
NewBox = (x1,y1,x2,y2)
print NewBox
patch = ImageFile.crop(NewBox)
patch.save("C:/Users/liesmars/Desktop/vehicle/" + "VIRAT1_" + str(N) + ".jpg")
N += 1
print N
②扩充:镜像、旋转、仿射变换、放大

import os
import cv2
from PIL import Image
import copy
import numpy as np

TrainDataPath = "C:/Users/liesmars/Desktop/QSData/TrainDataOrig/"
ResizedPath = "C:/Users/liesmars/Desktop/QSData/TrainDataExpd/"

def ExpandImage(TrainDataPath,ResizedPath):
for root, dirs, files, in os.walk(TrainDataPath):
N = 0
for name in files:
folder = root.split('/')[-1]
SavePath = ResizedPath + folder
SavePath = SavePath.replace('\\','/')

if not os.path.exists(SavePath):
os.mkdir(SavePath)

ImgPath = os.path.join(root, name)
ImgPath = ImgPath.replace('\\','/')

# ImgFile = Image.open(ImgPath)
# ImgFile = ImgFile.convert('RGB')
ImgFile = cv2.imread(ImgPath)

ResizePath = SavePath + '/' + folder + '_r' + str(N) + '.jpg'
ResizedImage = Resize(ImgFile)
cv2.imwrite(ResizePath, ResizedImage)

MirrorPath = SavePath + '/' +folder + '_m' + str(N) + '.jpg'
MirrorIamge = Mirror(ImgFile)
cv2.imwrite(MirrorPath, MirrorIamge)

RotatePath = SavePath + '/' +folder + '_t' + str(N)
angle =[90,180,270]

for i in angle:
RotateImage = Rotate(ImgFile,i)
cv2.imwrite(RotatePath + '_' + str(i) + '.jpg', RotateImage)

# angle1 = 90
# angle2 = 180
# angle3 = 270

# RotateImage90 = Rotate(ImgFile,angle1)
# cv2.imwrite(RotatePath + '_' + '90' + '.jpg', RotateImage90)
# RotateImage180 = Rotate(ImgFile,angle2)
# cv2.imwrite(RotatePath + '_' + '180' + '.jpg', RotateImage180)
# RotateImage270 = Rotate(ImgFile,angle3)
# cv2.imwrite(RotatePath + '_' + '270' + '.jpg', RotateImage270)

# AffinePath = SavePath + '/' +folder + '_a' + str(N) + '.jpg'
# AffineIamge = Affine(ImgFile)
# cv2.imwrite(AffinePath, AffineIamge)

ZoomInPath = SavePath + '/' +folder + '_z' + str(N) + '.jpg'
ZoomInImage = ZoomIn(ImgPath)
ZoomInImage.save(ZoomInPath)
# cv2.imwrite(ZoomInPath, ZoomInImage)
N += 1
print N

def Resize(ImgFile):
# ResizedImg = ImgFile.resize((224,224))
ResizedImg = cv2.resize(ImgFile,(224,224))
return ResizedImg

def Mirror(ImgFile):
size = ImgFile.shape
CopyImg = copy.deepcopy(ImgFile)
# RotateImg = cv.CreateImage(size, ImgFile.depth, ImgFile.nChannels)
h = size[0]
w = size[1]
for i in range(h):
for j in range(w):
CopyImg[i,w-1-j] = ImgFile[i,j]

CopyResizeImg = cv2.resize(CopyImg,(224,224))
return CopyResizeImg
# imwrite(path, CopyImg)

def Rotate(ImgFile, angle):
size = ImgFile.shape
height = size[0]
width = size[1]
# RotateImg = cv.CreateImage(size, ImgFile.depthm, ImgFile.nChannels)
# for i in angle:
RotateImg = cv2.getRotationMatrix2D((height/2,width/2),angle,1)
RotateWarpImg = cv2.warpAffine(ImgFile, RotateImg, (224,224))
RotateResizeImg = cv2.resize(RotateWarpImg,(224,224))
return RotateResizeImg

def ZoomIn(ImgPath):

ImgFile = Image.open(ImgPath)
ImgFile = ImgFile.convert('RGB')
# size = ImgFile.shape
height = ImgFile.size[0]
width = ImgFile.size[1]

box = [width*1/6,height*1/6,width*5/6,height*5/6]
ZoomInImg = ImgFile.crop(box)
ZoomInImg.resize((224,224))
return ZoomInImg
#Affine

# def Affine(ImgFile):
# size = ImgFile.shape
# height = size[0]
# width = size[1]

# position1 = np.float32([[5,5],[20,5],[5,20]])
# position2 = np.float32([[2,10],[20,5],[10,25]])

# AffineImg = cv2.getAffineTransform(position1,position2)
# ResizeAffineImg = cv2.warpAffine(ImgFile, AffineImg,(224,224))
# # cv2.imwrite(path, ResizeAffine)
# return ResizeAffineImg

ExpandImage(TrainDataPath,ResizedPath)

自己的网络,要求图片大小为224:统一将图片大小resize为224*224
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐