Changeset - 5f42b982809c
[Not reviewed]
default
0 3 0
Laman - 6 years ago 2019-05-24 11:31:52

deferred data preprocessing saving space
3 files changed with 6 insertions and 6 deletions:
0 comments (0 inline, 0 general)
exp/kerokero/prepare_data.py
Show inline comments
 
@@ -28,25 +28,25 @@ class Sample:
 
		""":return: (img, grid), where img is a 2D np.float32 with values in (0,1),
 
		grid [(float) x, (float) y, ...], with x, y in (-1,1)"""
 
		center=self._getCenter()
 
		m=getIdentity()
 
		t1=getTranslation(-center.x,-center.y)
 
		proj=getProjection()
 
		rot=getRotation()
 
		mir=getMirroring()
 
		for mi in [t1,mir,proj,rot]:
 
			m=np.matmul(mi,m)
 
		m=np.matmul(self._computeCrop(m),m)
 
		img=cv.warpPerspective(self.img,m,(self.SIDE,self.SIDE))
 
		img=np.float32(img)/128-1
 
		img=np.uint8(img)
 
		grid=Corners(c.transform(m) for c in self.grid)
 
		grid=list(map(lambda p: list(2*p/self.SIDE-EPoint(1,1)), grid))
 
		return (img,grid)
 

	
 
	def _getCenter(self):
 
		(a,b,c,d)=self.grid
 
		p=Line.fromPoints(a,c)
 
		q=Line.fromPoints(b,d)
 
		return p.intersect(q)
 

	
 
	def _computeCrop(self,m):
 
		grid=Corners(c.transform(m) for c in self.grid)
 
@@ -99,26 +99,26 @@ def loadDataset(root):
 
	labels=[]
 
	for d in traverseDirs(root):
 
		for (img,label) in harvestDir(d):
 
			images.append(img)
 
			labels.append(label)
 
	n=len(images)
 
	keys=list(range(n))
 
	random.shuffle(keys)
 
	images=[images[k] for k in keys]
 
	labels=[labels[k] for k in keys]
 
	m=int(n*trainRatio)
 
	return (
 
		(np.float32(images[:m]),np.float32(labels[:m])),
 
		(np.float32(images[m:]),np.float32(labels[m:]))
 
		(np.uint8(images[:m]),np.float32(labels[:m])),
 
		(np.uint8(images[m:]),np.float32(labels[m:]))
 
	)
 

	
 

	
 
def show(img,filename="x"):
 
	cv.imshow(filename,img)
 
	cv.waitKey(0)
 
	cv.destroyAllWindows()
 

	
 

	
 
if __name__=="__main__":
 
	((trainImages,trainLabels),(testImages,testLabels))=loadDataset(sys.argv[1])
 
	np.savez_compressed(
exp/kerokero/test.py
Show inline comments
 
@@ -15,25 +15,25 @@ keras.losses.averageDistance=averageDist
 
keras.metrics.averageDistance=averageDistance
 

	
 
parser=argparse.ArgumentParser()
 
parser.add_argument("model")
 
parser.add_argument("data")
 
args=parser.parse_args()
 

	
 
model=load_model(args.model)
 
model.summary()
 

	
 
log.info("loading data...")
 
with np.load(args.data) as data:
 
	testImages=data["testImages"].reshape((-1,224,224,1))
 
	testImages=(np.float32(data["testImages"])/128-1).reshape((-1,224,224,1))
 
	testLabels=data["testLabels"].reshape((-1,4,2))
 
log.info("done")
 

	
 
log.info(model.evaluate(testImages,testLabels))
 

	
 
for img in testImages:
 
	label=model.predict(np.reshape(img,(1,224,224,1)))
 
	print(label)
 
	points=[]
 
	for i in range(4):
 
		points.append(EPoint((label[0][i][0]+1)*112,(label[0][i][1]+1)*112))
 
	corners=Corners(points)
exp/kerokero/train.py
Show inline comments
 
@@ -70,27 +70,27 @@ def createCNN():
 
	model.add(Reshape((4,2)))
 

	
 
	model.compile(optimizer="rmsprop",loss=averageDistance,metrics=["mae","accuracy"])
 
	return model
 

	
 

	
 
model=createCNN()
 
if args.load_model:
 
	model=load_model(args.load_model)
 

	
 
log.info("loading data...")
 
with np.load(args.data) as data:
 
	trainImages=data["trainImages"].reshape((-1,224,224,1))
 
	trainImages=(np.float32(data["trainImages"])/128-1).reshape((-1,224,224,1))
 
	trainLabels=data["trainLabels"].reshape((-1,4,2))
 
	testImages=data["testImages"].reshape((-1,224,224,1))
 
	testImages=(np.float32(data["testImages"])/128-1).reshape((-1,224,224,1))
 
	testLabels=data["testLabels"].reshape((-1,4,2))
 
log.info("done")
 

	
 
n=len(trainImages)
 
k=round(n*0.9)
 
n_=n-k
 
(trainImages,valImages)=(np.float32(trainImages[:k]),np.float32(trainImages[k:]))
 
(trainLabels,valLabels)=(np.float32(trainLabels[:k]),np.float32(trainLabels[k:]))
 

	
 
tensorboard=TensorBoard(log_dir=os.path.join(args.log_dir,"{}".format(time())))
 
checkpoint=ModelCheckpoint(args.save_model,monitor="val_loss",period=10)
 

	
0 comments (0 inline, 0 general)