# HG changeset patch # User Laman # Date 2019-05-07 19:52:46 # Node ID fad34516870e2680fe15900425132652545ae7c3 # Parent c934d44cdf5c6c41e0776299768ea60ca6ecc122 normed pixel values, normed coordinates diff --git a/exp/kerokero/prepare_data.py b/exp/kerokero/prepare_data.py --- a/exp/kerokero/prepare_data.py +++ b/exp/kerokero/prepare_data.py @@ -9,7 +9,7 @@ import cv2 as cv sys.path.append("..") sys.path.append("../../src") -from annotations import DataFile,computeBoundingBox,Corners +from annotations import DataFile,computeBoundingBox,Corners,EPoint from geometry import Line from kerokero.transformation_matrices import getIdentity,getRotation,getTranslation,getScale,getMirroring,getProjection @@ -20,10 +20,14 @@ class Sample: SIDE=224 def __init__(self,img,grid): + """:param img: a greyscale image as a 2D np.uint8 + :param grid: iterable of 4 EPoints, ie. Corners""" self.img=img self.grid=grid def transform(self): + """: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) @@ -34,8 +38,10 @@ class Sample: 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)/255 grid=Corners(c.transform(m) for c in self.grid) - return (img,list(itertools.chain.from_iterable(grid))) + grid=list(map(lambda p: 2*p/self.SIDE-EPoint(1,1), grid)) + return (img,grid,list(itertools.chain.from_iterable(grid))) def _getCenter(self): (a,b,c,d)=self.grid @@ -53,7 +59,7 @@ class Sample: return np.matmul(scale,t2) def show(self): - img=np.copy(self.img) + img=cv.cvtColor(self.img,cv.COLOR_GRAY2BGR) for c in self.grid: cv.circle(img,(int(c.x),int(c.y)),3,[0,255,0],-1) show(img) @@ -81,7 +87,8 @@ def harvestDir(path): img=cv.cvtColor(img,cv.COLOR_BGR2GRAY) for b in boards: sample=Sample(img,b.grid) - (transformedImg,label)=sample.transform() + (transformedImg,transformedGrid,label)=sample.transform() + # Sample(np.uint8(transformedImg*255),map(lambda c: (c+EPoint(1,1))*Sample.SIDE/2,transformedGrid)).show() yield (transformedImg,label) @@ -101,8 +108,8 @@ def loadDataset(root): labels=[labels[k] for k in keys] m=int(n*trainRatio) return ( - (np.uint8(images[:m]),np.float32(labels[:m])), - (np.uint8(images[m:]),np.float32(labels[m:])) + (np.float32(images[:m]),np.float32(labels[:m])), + (np.float32(images[m:]),np.float32(labels[m:])) ) diff --git a/exp/kerokero/test.py b/exp/kerokero/test.py --- a/exp/kerokero/test.py +++ b/exp/kerokero/test.py @@ -32,7 +32,7 @@ for img in testImages: print(label) points=[] for i in range(4): - points.append(EPoint(label[0][i*2],label[0][i*2+1])) + points.append(EPoint((label[0][i*2]+1)*112,(label[0][i*2+1]+1)*112)) corners=Corners(points) - sample=Sample(np.uint8(img),corners) + sample=Sample(np.uint8(img*255),corners) sample.show() diff --git a/exp/kerokero/train.py b/exp/kerokero/train.py --- a/exp/kerokero/train.py +++ b/exp/kerokero/train.py @@ -85,10 +85,11 @@ with np.load(args.data) as data: log.info("done") tensorboard = TensorBoard(log_dir=os.path.join(cfg.thisDir,"../logs","{}".format(time()))) -for i in range(args.initial_epoch//10,args.epochs//10): - model.fit(trainImages.reshape((-1,224,224,1)),trainLabels,epochs=(i+1)*10,initial_epoch=i*10,batch_size=128,validation_split=0.2,callbacks=[tensorboard]) - path=args.save_model.format((i+1)*10) +BIG_STEP=50 +for i in range(args.initial_epoch//BIG_STEP,args.epochs//BIG_STEP): + model.fit(trainImages.reshape((-1,224,224,1)),trainLabels,epochs=(i+1)*BIG_STEP,initial_epoch=i*BIG_STEP,batch_size=128,validation_split=0.2,callbacks=[tensorboard]) + path=args.save_model.format((i+1)*BIG_STEP) log.info("saving model...") model.save(path) - ftp.push(path) + # ftp.push(path) log.info(model.evaluate(testImages.reshape((-1,224,224,1)),testLabels))