📑 Data Building. Practice Project 0_0: Artificial Image Data
In this project, we'll create artificial images, represent and process their examples.✒️ Code Modules & Settings
xxxxxxxxxx
import os,warnings; warnings.filterwarnings('ignore')
import h5py,pandas as pd,numpy as np
from skimage.transform import resize
img_size=int(1024); img_size_out=int(256)
✒️ Image Creating
xxxxxxxxxx
def randint_coord(img_size_out,img_size=img_size):
a=(.5+.1**6*np.random.randint(1,999999))*\
np.random.choice([-1,1],1)[0]
b=np.random.randint(3,7)
c=.1**3*np.random.randint(1,99)*\
np.random.choice([-1,1],1)[0]
t=np.arange(0,12*np.pi,1/(1440*b))
fx=np.sin(t/6)+a*np.sin(b*t)*np.cos(t)-c*np.sin(16*b*t)
fy=np.cos(t/6)+a*np.sin(b*t)*np.sin(t)-c*np.cos(16*b*t)
fx=.951*(fx-1.051*fx.min())/(fx.max()-fx.min())
fy=.951*(fy-1.051*fy.min())/(fy.max()-fy.min())
fx=np.array(np.clip(fx*img_size,0,img_size),dtype='int32')
fy=np.array(np.clip(fy*img_size,0,img_size),dtype='int32')
f=np.array([[fx[i],fy[i]] for i in range(len(t))])
img=np.ones((img_size,img_size,3))
randcol=.9-.8*np.random.random(3)
for [x,y] in f: img[y,x,:]=randcol
img=resize(img,(img_size_out,img_size_out))
return img,np.around(a,6),b,np.around(c,3),randcol
for i in range(2):
img,a,b,c,col=randint_coord(img_size_out)
matrix_plot(img,figsize=5).show()
✒️ Data Storing
xxxxxxxxxx
num_images=50
images=np.zeros((num_images,img_size_out,img_size_out,3),
dtype=np.float32)
labels=np.zeros((num_images,),dtype=np.int32)
targets=np.zeros((num_images,2),dtype=np.float32)
colors=np.zeros((num_images,3),dtype=np.float32)
for i in range(num_images):
if (i+1)%int(.2*num_images)==0: print('=>',end='',flush=True)
img,a,b,c,col=randint_coord(img_size_out)
images[i,:,:,:]=img
labels[i],targets[i,0],targets[i,1]=b-3,a,c
colors[i,:]=col
xxxxxxxxxx
h5f='ArtificialImages'+str(img_size)+'.h5'
with h5py.File(h5f,'w') as f:
f.create_dataset('images',data=images,compression='gzip')
f.create_dataset('labels',data=labels,compression='gzip')
f.create_dataset('targets',data=targets,compression='gzip')
f.create_dataset('colors',data=colors,compression='gzip')
f.close()
pretty_print('file size: %s'%list(os.stat(h5f))[6])
xxxxxxxxxx
with h5py.File(h5f,'r') as f:
keys=list(f.keys()); print(keys)
images=np.array(f[keys[1]],dtype='float32')
labels=np.array(f[keys[2]],dtype='int32')
targets=np.array(f[keys[3]],dtype='float32')
colors=np.array(f[keys[0]],dtype='float32')
f.close()
✒️ Data Processing
xxxxxxxxxx
shuffle_ids=np.arange(num_images)
np.random.RandomState(12).shuffle(shuffle_ids)
images=images[shuffle_ids]; labels=labels[shuffle_ids]
colors=colors[shuffle_ids]; targets=targets[shuffle_ids]
n=int(.1*num_images)
x_test,x_valid,x_train=images[:n],images[n:2*n],images[2*n:]
y_test1,y_valid1,y_train1=labels[:n],labels[n:2*n],labels[2*n:]
y_test2,y_valid2,y_train2=\
targets[:,:n],targets[:,n:2*n],targets[:,2*n:]
images.shape,labels.shape,targets.shape,colors.shape
xxxxxxxxxx
def pd_style():
return [dict(selector='th',
props=[('font-size','12pt'),
('min-width','150px')]),
dict(selector='td',
props=[('padding','0em 0em'),
('min-width','150px')]),
dict(selector='tr:hover th:hover',
props=[('font-size','16pt'),
('max-width','150px'),
('text-shadow','3px 3px 3px #aaa')]),
dict(selector='tr:hover td:hover',
props=[('font-size','13pt'),
('max-width','150px'),
('text-shadow','3px 3px 3px #aaa')])]
pretty_print(html('<h2>data outputs: </h2>'))
df=pd.DataFrame([[x_train.shape,x_valid.shape,x_test.shape],
[x_train.dtype,x_valid.dtype,x_test.dtype],
[y_train1.shape,y_valid1.shape,y_test1.shape],
[y_train1.dtype,y_valid1.dtype,y_test1.dtype],
[y_train2.shape,y_valid2.shape,y_test2.shape],
[y_train2.dtype,y_valid2.dtype,y_test2.dtype]],
columns=['train','valid','test'],
index=['image shape','image type',
'label shape','label type',
'target shape','target type'])
display(df.style.set_table_styles(pd_style()))
✒️ Data Checking
xxxxxxxxxx
list_plot([[targets[i,0],targets[i,1]]
for i in range(num_images)],color='#348ABD')\
.show(frame=True,gridlines=True,figsize=4,title='targets')
bar_chart(np.unique(labels,return_counts=True)[1],color='#348ABD')\
.show(frame=True,axes=False,xmin=-1,figsize=4,title='labels')
xxxxxxxxxx
def check_coord(a,b,c,img_size=img_size):
t=np.arange(0,12*np.pi,1/(1440*b))
fx=np.sin(t/6)+a*np.sin(b*t)*np.cos(t)-c*np.sin(16*b*t)
fy=np.cos(t/6)+a*np.sin(b*t)*np.sin(t)-c*np.cos(16*b*t)
fx=.951*(fx-1.051*fx.min())/(fx.max()-fx.min())
fy=.951*(fy-1.051*fy.min())/(fy.max()-fy.min())
fx=np.array(np.clip(fx*img_size,0,img_size),dtype='int32')
fy=np.array(np.clip(fy*img_size,0,img_size),dtype='int32')
f=np.array([[fx[i],fy[i]] for i in range(len(t))])
return f
n=randint(0,num_images-1)
b,a,c=labels[n]+3,targets[n,0],targets[n,1]
f=check_coord(a,b,c)
list_plot(f,size=1,color=list(colors[n]))\
.show(frame=True,flip_y=True,figsize=(4,4))
matrix_plot(images[n]).show(figsize=(4,4))
No comments:
Post a Comment