updates for products
This commit is contained in:
parent
3ef8c74f2e
commit
0bf090c2a8
@ -11,17 +11,14 @@ count = 0
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
print("loading coco annotations...")
|
|
||||||
coco = json.load(open('./coco/annotations/instances_default.json'))
|
|
||||||
print("done")
|
|
||||||
|
|
||||||
def findAnnotationName(annotationId):
|
def findAnnotationName(annotationId, annotations):
|
||||||
for c in coco['categories']:
|
for c in annotations['categories']:
|
||||||
if c['id'] == annotationId:
|
if c['id'] == annotationId:
|
||||||
return c['name']
|
return c['name']
|
||||||
|
|
||||||
def findAnnotationToId(ident):
|
def findAnnotationToId(ident, annotations):
|
||||||
for annotation in coco['annotations']:
|
for annotation in annotations['annotations']:
|
||||||
img_an = annotation['image_id']
|
img_an = annotation['image_id']
|
||||||
if img_an == ident:
|
if img_an == ident:
|
||||||
return annotation
|
return annotation
|
||||||
@ -34,14 +31,14 @@ def show(pil, pause=0.2):
|
|||||||
plt.close()
|
plt.close()
|
||||||
|
|
||||||
|
|
||||||
def parseImage(coImg):
|
def parseImage(coImg, annotations, subset):
|
||||||
global no_label, small, passed, coco
|
global no_label, small, passed
|
||||||
# open image file
|
# open image file
|
||||||
|
|
||||||
path = "coco/roto_frank/images/" + coImg['file_name'].split('/')[4]
|
path = "coco/"+subset+"/images/" + coImg['file_name'].split('/')[4]
|
||||||
img = Image.open(path)
|
img = Image.open(path)
|
||||||
|
|
||||||
an = findAnnotationToId(coImg['id'])
|
an = findAnnotationToId(coImg['id'], annotations)
|
||||||
if an == None:
|
if an == None:
|
||||||
no_label += 1
|
no_label += 1
|
||||||
return
|
return
|
||||||
@ -53,15 +50,20 @@ def parseImage(coImg):
|
|||||||
small += 1
|
small += 1
|
||||||
return
|
return
|
||||||
|
|
||||||
imagePath = f"classified_roto/{findAnnotationName(an['category_id'])}/{an['id']}.png"
|
imagePath = f"classified/classified_{subset}/{findAnnotationName(an['category_id'], annotations)}/{an['id']}.png"
|
||||||
os.makedirs(os.path.dirname(imagePath), exist_ok=True)
|
os.makedirs(os.path.dirname(imagePath), exist_ok=True)
|
||||||
crop.save(imagePath)
|
crop.save(imagePath)
|
||||||
passed += 1
|
passed += 1
|
||||||
|
|
||||||
if __name__ == "__main__":
|
def parseSubset(subset):
|
||||||
|
global count
|
||||||
|
|
||||||
for coImg in coco['images']:
|
print("loading" + subset + "annotations...")
|
||||||
parseImage(coImg)
|
annotations = json.load(open('./coco/'+subset+'/annotations/instances_default.json'))
|
||||||
|
print("done")
|
||||||
|
|
||||||
|
for coImg in annotations['images']:
|
||||||
|
parseImage(coImg, annotations,subset)
|
||||||
count += 1
|
count += 1
|
||||||
if count % 100 == 0:
|
if count % 100 == 0:
|
||||||
print("status:")
|
print("status:")
|
||||||
@ -70,3 +72,15 @@ if __name__ == "__main__":
|
|||||||
print(f"passed: {passed}")
|
print(f"passed: {passed}")
|
||||||
print("-----")
|
print("-----")
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
parseSubset('donaulager')
|
||||||
|
parseSubset('instantina')
|
||||||
|
parseSubset('lkw_walter_2019')
|
||||||
|
parseSubset('lkw_walter_2020')
|
||||||
|
parseSubset('tkl')
|
||||||
|
parseSubset('vw_bratislava')
|
||||||
|
parseSubset('vw_portugal')
|
||||||
|
parseSubset('watt')
|
||||||
|
parseSubset('wls')
|
||||||
|
|
||||||
|
@ -12,7 +12,7 @@ count = 0
|
|||||||
|
|
||||||
|
|
||||||
print("loading coco annotations...")
|
print("loading coco annotations...")
|
||||||
coco = json.load(open('./coco/annotations/instances_val2014.json'))
|
coco = json.load(open('./coco/annotations/instances_default.json'))
|
||||||
print("done")
|
print("done")
|
||||||
|
|
||||||
def findAnnotationName(annotationId):
|
def findAnnotationName(annotationId):
|
||||||
@ -38,7 +38,7 @@ def parseImage(coImg):
|
|||||||
global no_label, small, passed, coco
|
global no_label, small, passed, coco
|
||||||
# open image file
|
# open image file
|
||||||
|
|
||||||
path = "coco/val2014/" + coImg['file_name']
|
path = "coco/roto_frank/images/" + coImg['file_name'].split('/')[4]
|
||||||
img = Image.open(path)
|
img = Image.open(path)
|
||||||
|
|
||||||
an = findAnnotationToId(coImg['id'])
|
an = findAnnotationToId(coImg['id'])
|
||||||
@ -46,9 +46,6 @@ def parseImage(coImg):
|
|||||||
no_label += 1
|
no_label += 1
|
||||||
return
|
return
|
||||||
|
|
||||||
|
|
||||||
path = "coco/val2014/" + coImg['file_name']
|
|
||||||
img = Image.open(path)
|
|
||||||
c = an['bbox']
|
c = an['bbox']
|
||||||
crop = img.crop((c[0], c[1], c[0]+c[2], c[1]+c[3]))
|
crop = img.crop((c[0], c[1], c[0]+c[2], c[1]+c[3]))
|
||||||
|
|
||||||
@ -56,7 +53,7 @@ def parseImage(coImg):
|
|||||||
small += 1
|
small += 1
|
||||||
return
|
return
|
||||||
|
|
||||||
imagePath = f"classified/{findAnnotationName(an['category_id'])}/{an['id']}.png"
|
imagePath = f"classified_roto/{findAnnotationName(an['category_id'])}/{an['id']}.png"
|
||||||
os.makedirs(os.path.dirname(imagePath), exist_ok=True)
|
os.makedirs(os.path.dirname(imagePath), exist_ok=True)
|
||||||
crop.save(imagePath)
|
crop.save(imagePath)
|
||||||
passed += 1
|
passed += 1
|
||||||
|
12
siamese.py
12
siamese.py
@ -202,10 +202,13 @@ class SiameseNetwork:
|
|||||||
|
|
||||||
img_rows = self.input_shape[0]
|
img_rows = self.input_shape[0]
|
||||||
img_cols = self.input_shape[1]
|
img_cols = self.input_shape[1]
|
||||||
|
|
||||||
|
if type(x[element_index_1]) == str:
|
||||||
img1 = np.asarray(Image.open(x[element_index_1]).convert('RGB').resize((img_rows, img_cols)))/255.0
|
img1 = np.asarray(Image.open(x[element_index_1]).convert('RGB').resize((img_rows, img_cols)))/255.0
|
||||||
img2 = np.asarray(Image.open(x[element_index_2]).convert('RGB').resize((img_rows, img_cols)))/255.0
|
img2 = np.asarray(Image.open(x[element_index_2]).convert('RGB').resize((img_rows, img_cols)))/255.0
|
||||||
# img1 = x[element_index_1]
|
else:
|
||||||
# img2 = x[element_index_2]
|
img1 = x[element_index_1]
|
||||||
|
img2 = x[element_index_2]
|
||||||
positive_pairs.append([img1,img2])
|
positive_pairs.append([img1,img2])
|
||||||
positive_labels.append([1.0])
|
positive_labels.append([1.0])
|
||||||
return positive_pairs, positive_labels
|
return positive_pairs, positive_labels
|
||||||
@ -241,8 +244,13 @@ class SiameseNetwork:
|
|||||||
|
|
||||||
img_rows = self.input_shape[0]
|
img_rows = self.input_shape[0]
|
||||||
img_cols = self.input_shape[1]
|
img_cols = self.input_shape[1]
|
||||||
|
|
||||||
|
if type(x[element_index_1]) == str:
|
||||||
img1 = np.asarray(Image.open(x[element_index_1]).convert('RGB').resize((img_rows, img_cols)))/255.0
|
img1 = np.asarray(Image.open(x[element_index_1]).convert('RGB').resize((img_rows, img_cols)))/255.0
|
||||||
img2 = np.asarray(Image.open(x[element_index_2]).convert('RGB').resize((img_rows, img_cols)))/255.0
|
img2 = np.asarray(Image.open(x[element_index_2]).convert('RGB').resize((img_rows, img_cols)))/255.0
|
||||||
|
else:
|
||||||
|
img1 = x[element_index_1]
|
||||||
|
img2 = x[element_index_2]
|
||||||
|
|
||||||
negative_pairs.append([img1,img2])
|
negative_pairs.append([img1,img2])
|
||||||
negative_labels.append([0.0])
|
negative_labels.append([0.0])
|
||||||
|
@ -21,9 +21,9 @@ num_classes = 131
|
|||||||
img_rows, img_cols = 100, 100
|
img_rows, img_cols = 100, 100
|
||||||
|
|
||||||
def createTrainingData():
|
def createTrainingData():
|
||||||
base_dir = './classified/'
|
base_dir = './data/COCO/products/'
|
||||||
train_test_split = 0.7
|
train_test_split = 0.7
|
||||||
no_of_files_in_each_class = 10
|
no_of_files_in_each_class = 20
|
||||||
|
|
||||||
#Read all the folders in the directory
|
#Read all the folders in the directory
|
||||||
folder_list = os.listdir(base_dir)
|
folder_list = os.listdir(base_dir)
|
||||||
@ -39,6 +39,8 @@ def createTrainingData():
|
|||||||
#Using just 5 images per category
|
#Using just 5 images per category
|
||||||
for folder_name in folder_list:
|
for folder_name in folder_list:
|
||||||
files_list = os.listdir(os.path.join(base_dir, folder_name))
|
files_list = os.listdir(os.path.join(base_dir, folder_name))
|
||||||
|
if len(files_list) < no_of_files_in_each_class:
|
||||||
|
continue
|
||||||
temp=[]
|
temp=[]
|
||||||
for file_name in files_list[:no_of_files_in_each_class]:
|
for file_name in files_list[:no_of_files_in_each_class]:
|
||||||
temp.append(len(x))
|
temp.append(len(x))
|
||||||
@ -220,18 +222,19 @@ head_model = create_own_head_model(base_model.output_shape)
|
|||||||
siamese_network = SiameseNetwork(base_model, head_model)
|
siamese_network = SiameseNetwork(base_model, head_model)
|
||||||
siamese_network.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])
|
siamese_network.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])
|
||||||
|
|
||||||
siamese_checkpoint_path = "./siamese_checkpoint"
|
siamese_checkpoint_path = "../siamese100_products"
|
||||||
|
model_path = "/variables/variables"
|
||||||
siamese_callbacks = [
|
siamese_callbacks = [
|
||||||
# EarlyStopping(monitor='val_accuracy', patience=10, verbose=0),
|
# EarlyStopping(monitor='val_accuracy', patience=10, verbose=0),
|
||||||
ModelCheckpoint(siamese_checkpoint_path, monitor='val_accuracy', save_best_only=True, verbose=0)
|
ModelCheckpoint(siamese_checkpoint_path, monitor='val_accuracy', save_best_only=True, verbose=0)
|
||||||
]
|
]
|
||||||
|
|
||||||
# batch_size = 64
|
try:
|
||||||
# for epoch in range(1, epochs):
|
print("loading weights for model")
|
||||||
# batch_x, batch_y = get_batch(x_train, y_train, x_test, y_test, cat_train, train_size, batch_size)
|
siamese_network.load_weights(siamese_checkpoint_path+model_path)
|
||||||
# loss = siamese_network.train_on_batch(batch_x, batch_y)
|
except Exception as e:
|
||||||
# print('Epoch:', epoch, ', Loss:', loss)
|
print(e)
|
||||||
|
|
||||||
|
|
||||||
siamese_network.fit(x_train, y_train,
|
siamese_network.fit(x_train, y_train,
|
||||||
validation_data=(x_test, y_test),
|
validation_data=(x_test, y_test),
|
||||||
@ -239,13 +242,6 @@ siamese_network.fit(x_train, y_train,
|
|||||||
epochs=epochs,
|
epochs=epochs,
|
||||||
callbacks=siamese_callbacks)
|
callbacks=siamese_callbacks)
|
||||||
|
|
||||||
# try:
|
|
||||||
# siamese_network = keras.models.load_model(siamese_checkpoint_path)
|
|
||||||
# except Exception as e:
|
|
||||||
# print(e)
|
|
||||||
# print("!!!!!!")
|
|
||||||
# siamese_network.load_weights(siamese_checkpoint_path)
|
|
||||||
|
|
||||||
|
|
||||||
score = siamese_network.evaluate(x_test, y_test, batch_size=60, verbose=0)
|
score = siamese_network.evaluate(x_test, y_test, batch_size=60, verbose=0)
|
||||||
print('Test loss:', score[0])
|
print('Test loss:', score[0])
|
||||||
|
@ -28,7 +28,7 @@ num_classes = 131
|
|||||||
img_rows, img_cols = 100, 100
|
img_rows, img_cols = 100, 100
|
||||||
|
|
||||||
def createTrainingData():
|
def createTrainingData():
|
||||||
base_dir = './data/combined/'
|
base_dir = './COCO/products/'
|
||||||
train_test_split = 0.7
|
train_test_split = 0.7
|
||||||
no_of_files_in_each_class = 200
|
no_of_files_in_each_class = 200
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user