40 lines
2.0 KiB
Markdown
40 lines
2.0 KiB
Markdown
the steps taken so far, which lead to a successfull detection of an image
|
|
|
|
- train the model defined in mnist_siamese_example, which uses the 'siamese.py' model to
|
|
create a siamese keras model.
|
|
|
|
- in this mnist siamese example, the data collection has been updated form the mnist drawing
|
|
sample to the fruit sample. Lots of work went into setting the arrays up correctly, because the
|
|
example from towards data science did not correctly seperate the classes. He had originally used
|
|
91 classes for teching and the rest for testing, where I now use images of every class for
|
|
teaching _and_ training.
|
|
|
|
- The images were shrunken down to 28 x 28 so the model defined in the siamese example could be used
|
|
without adaption
|
|
|
|
- in this example, there is two teachings going on, once he trains the siamese model (which is saved under
|
|
'siamese_checkpoint' and then he reteaches a new model based on this one, with some additonal layers ontop
|
|
|
|
I'm not yet sure what these do [todo] but 'I'll figure it out.
|
|
|
|
- after you've successfully trained the model, it's now saved to 'model_checkpoint' or 'siamese_checkpoint'
|
|
|
|
- The following steps can be used to classify two images:
|
|
Note, that it was so far only tested using images in a 'pdb' shell from the mnist_siamese_example script
|
|
|
|
```
|
|
import tensorflow.keras as keras
|
|
from PIL import image
|
|
model = keras.models.load_model('./siamese_checkpoint')
|
|
image1 = np.asarray(Image.open('../towards/data/fruits-360/Training/Avocado/r_254_100.jpg').convert('RGB').resize((28, 28))) / 255 / 255
|
|
image2 = np.asarray(Image.open('../towards/data/fruits-360/Training/Avocado/r_250_100.jpg').convert('RGB').resize((28, 28))) / 255 / 255
|
|
# note that the double division through 255 is only because the model bas taught with this double division, depends on
|
|
# the input numbers of course
|
|
|
|
output = model.predict([np.array([image2]), np.array([image1])])
|
|
# Note here, that the cast to np.array is nencessary - otherwise the input vector is malformed
|
|
|
|
print(output)
|
|
```
|
|
|