Initial commit
This commit is contained in:
135
Divers/tutoriel25-2/train_is_panneau.py
Normal file
135
Divers/tutoriel25-2/train_is_panneau.py
Normal file
@@ -0,0 +1,135 @@
|
||||
import tensorflow as tf
|
||||
from tensorflow.keras import layers, models
|
||||
import numpy as np
|
||||
from sklearn.utils import shuffle
|
||||
from sklearn.model_selection import train_test_split
|
||||
import cv2
|
||||
import os
|
||||
import common
|
||||
import time
|
||||
import dataset
|
||||
|
||||
batch_size=64
|
||||
nbr_entrainement=20
|
||||
|
||||
tab_images=np.array([]).reshape(0, common.size, common.size, 3)
|
||||
|
||||
tab_panneau, tab_image_panneau=common.lire_images_panneaux(common.dir_images_panneaux, common.size)
|
||||
|
||||
if not os.path.exists(common.dir_images_autres_panneaux):
|
||||
quit("Le repertoire d'image n'existe pas: {}".format(common.dir_images_autres_panneaux))
|
||||
|
||||
if not os.path.exists(common.dir_images_sans_panneaux):
|
||||
quit("Le repertoire d'image n'existe pas:".format(common.dir_images_sans_panneaux))
|
||||
|
||||
nbr=0
|
||||
for image in tab_image_panneau:
|
||||
lot=dataset.create_lot_img(image, 12000)
|
||||
tab_images=np.concatenate([tab_images, lot])
|
||||
nbr+=len(lot)
|
||||
|
||||
tab_labels=np.full(nbr, 1)
|
||||
|
||||
print("Image panneaux:", nbr)
|
||||
|
||||
files=os.listdir(common.dir_images_autres_panneaux)
|
||||
if files is None:
|
||||
quit("Le repertoire d'image est vide:".format(common.dir_images_autres_panneaux))
|
||||
|
||||
nbr=0
|
||||
for file in files:
|
||||
if file.endswith("png"):
|
||||
path=os.path.join(common.dir_images_autres_panneaux, file)
|
||||
image=cv2.resize(cv2.imread(path), (common.size, common.size), cv2.INTER_LANCZOS4)
|
||||
lot=dataset.create_lot_img(image, 700)
|
||||
tab_images=np.concatenate([tab_images, lot])
|
||||
nbr+=len(lot)
|
||||
|
||||
tab_labels=np.concatenate([tab_labels, np.full(nbr, 0)])
|
||||
|
||||
print("Image autres panneaux:", nbr)
|
||||
|
||||
nbr_np=int(len(tab_images)/2)
|
||||
print("nbr_np", nbr_np)
|
||||
|
||||
id=1
|
||||
nbr=0
|
||||
tab=[]
|
||||
for cpt in range(nbr_np):
|
||||
file=common.dir_images_sans_panneaux+"/{:d}.png".format(id)
|
||||
if not os.path.isfile(file):
|
||||
break
|
||||
image=cv2.resize(cv2.imread(file), (common.size, common.size))
|
||||
tab.append(image)
|
||||
id+=1
|
||||
nbr+=1
|
||||
|
||||
tab_images=np.concatenate([tab_images, tab])
|
||||
tab_labels=np.concatenate([tab_labels, np.full(nbr, 0)])
|
||||
print("Image sans panneaux:", nbr)
|
||||
|
||||
tab_images=np.array(tab_images, dtype=np.float32)/255
|
||||
tab_labels=np.array(tab_labels, dtype=np.float32).reshape([-1, 1])
|
||||
|
||||
tab_images, tab_labels=shuffle(tab_images, tab_labels)
|
||||
train_images, test_images, train_labels, test_labels=train_test_split(tab_images, tab_labels, test_size=0.10)
|
||||
|
||||
train_ds=tf.data.Dataset.from_tensor_slices((train_images, train_labels)).batch(batch_size)
|
||||
test_ds=tf.data.Dataset.from_tensor_slices((test_images, test_labels)).batch(batch_size)
|
||||
|
||||
print("train_images", len(train_images))
|
||||
print("test_images", len(test_images))
|
||||
print("nbr panneau", len(np.where(train_labels==0.)[1]), train_labels.shape)
|
||||
|
||||
@tf.function
|
||||
def train_step(images, labels):
|
||||
with tf.GradientTape() as tape:
|
||||
predictions=model_is_panneau(images)
|
||||
loss=loss_object(labels, predictions)
|
||||
gradients=tape.gradient(loss, model_is_panneau.trainable_variables)
|
||||
optimizer.apply_gradients(zip(gradients, model_is_panneau.trainable_variables))
|
||||
train_loss(loss)
|
||||
train_accuracy(labels, predictions)
|
||||
|
||||
def train(train_ds, nbr_entrainement):
|
||||
for entrainement in range(nbr_entrainement):
|
||||
start=time.time()
|
||||
for images, labels in train_ds:
|
||||
train_step(images, labels)
|
||||
message='Entrainement {:04d}, loss: {:6.4f}, accuracy: {:7.4f}%, temps: {:7.4f}'
|
||||
print(message.format(entrainement+1,
|
||||
train_loss.result(),
|
||||
train_accuracy.result()*100,
|
||||
time.time()-start))
|
||||
train_loss.reset_states()
|
||||
train_accuracy.reset_states()
|
||||
test(test_ds)
|
||||
|
||||
def test(test_ds):
|
||||
start=time.time()
|
||||
for test_images, test_labels in test_ds:
|
||||
predictions=model_is_panneau(test_images)
|
||||
t_loss=loss_object(test_labels, predictions)
|
||||
test_loss(t_loss)
|
||||
test_accuracy(test_labels, predictions)
|
||||
message=' >>> Test: loss: {:6.4f}, accuracy: {:7.4f}%, temps: {:7.4f}'
|
||||
print(message.format(test_loss.result(),
|
||||
test_accuracy.result()*100,
|
||||
time.time()-start))
|
||||
test_loss.reset_states()
|
||||
test_accuracy.reset_states()
|
||||
|
||||
optimizer=tf.keras.optimizers.Adam()
|
||||
loss_object=tf.keras.losses.BinaryCrossentropy()
|
||||
train_loss=tf.keras.metrics.Mean()
|
||||
train_accuracy=tf.keras.metrics.BinaryAccuracy()
|
||||
test_loss=tf.keras.metrics.Mean()
|
||||
test_accuracy=tf.keras.metrics.BinaryAccuracy()
|
||||
model_is_panneau=common.is_panneau_model()
|
||||
checkpoint=tf.train.Checkpoint(model_is_panneau=model_is_panneau)
|
||||
|
||||
print("Entrainement")
|
||||
train(train_ds, nbr_entrainement)
|
||||
test(test_ds)
|
||||
|
||||
checkpoint.save(file_prefix="./training_is_panneau/is_panneau")
|
||||
Reference in New Issue
Block a user