Image Processing

tensorflow
image-processing
image-classification
tensors
computational-graph

(Adavidoaiei Dumitru-Cornel) #1

O imagine poate fi convertita intr-o matrice, de exemplu o imagine de tip grayscale poate fi convertita intr-o matrice cu valori intre 0 si 1(0 - alb, 1 - negru, valori intre 0 si 1 - nuante de gri) cu o librarie din Python gen matplotlib.

Pentru o imagine three channels, color, pentru fiecare pixel se stocheaza 3 valori Red, Green, Blue.

O retea neurala pentru a putea procesa imaginile isi reprezinta astfel imaginile.

What is TensorFlow ?

Tensorflow is a computational graph, sunt 2 elemente importante intr-un computational graph, tensors, tensor este un datatype, acest datatype poate fi scalar(single value), vector(array cu o dimensiune), matrice(array cu 2 dimensiuni) sau n dimension array, alt element important in acest computational graph sunt operatiile pe tensors, o retea neurala poate fi reprezentata ca tensors si operatii pe tensors, computational graph, majoritatea problemelor de machine learning pot fi reprezentate ca un computational graph.
TensorBoard permite vizualizare computational graph.

TensorFlow permite sa procesezi imagini si apoi sa le vizualizezi cu TensorBoard, din codul TensorFlow spui sa scrie log-uri pentru TensorBoard:

tf.summary.FileWriter(’/logsfolder’))

ca sa pornesti TensorBoard folosesti comanda:

tensorboard --logdir=path/to/log-directory

Pentru clasificarea imaginilor se pot folosi diversi algoritmii: Linear Regression, K Near Neighbor sau Convolutional Neural Network.

TensorFlow este un API low level, un API mai high level pentru neural networks este Keras care poate folosi ca backend TensorFlow, Theano sau CNTK.

Un exemplu de OCR in Python cu Keras folosind MNIST dataset:

'''Trains a simple deep NN on the MNIST dataset.
Gets to 98.40% test accuracy after 20 epochs
(there is *a lot* of margin for parameter tuning).
2 seconds per epoch on a K520 GPU.
'''

from __future__ import print_function

import keras
from keras.datasets import mnist
from keras.models import Sequential
from keras.layers import Dense, Dropout
from keras.optimizers import RMSprop
from heraspy.callback import HeraCallback

herasCallback = HeraCallback(
	'model-key',
	'localhost',
	4000
)


batch_size = 128
num_classes = 10
epochs = 20

# the data, shuffled and split between train and test sets
(x_train, y_train), (x_test, y_test) = mnist.load_data()

x_train = x_train.reshape(60000, 784)
x_test = x_test.reshape(10000, 784)
x_train = x_train.astype('float32')
x_test = x_test.astype('float32')
x_train /= 255
x_test /= 255
print(x_train.shape[0], 'train samples')
print(x_test.shape[0], 'test samples')

# convert class vectors to binary class matrices
y_train = keras.utils.to_categorical(y_train, num_classes)
y_test = keras.utils.to_categorical(y_test, num_classes)

model = Sequential()
model.add(Dense(512, activation='relu', input_shape=(784,)))
model.add(Dropout(0.2))
model.add(Dense(512, activation='relu'))
model.add(Dropout(0.2))
model.add(Dense(10, activation='softmax'))

model.summary()

model.compile(loss='categorical_crossentropy',
              optimizer=RMSprop(),
              metrics=['accuracy'])

history = model.fit(x_train, y_train,
                    batch_size=batch_size,
                    epochs=epochs,
                    verbose=1,  callbacks=[herasCallback],
                    validation_data=(x_test, y_test))

score = model.evaluate(x_test, y_test, verbose=0)

print('Test loss:', score[0])
print('Test accuracy:', score[1])

Un dashboard web realtime cu sockets care iti afiseaza evolutia la training neural nets:

To run you should install:
-miniconda Python 2.7 https://conda.io/miniconda.html
-Keras https://anaconda.org/conda-forge/keras
-setup Keras to use Theano like back end https://keras.io/backend/

cu Hera e mai tricky de facut setup-ul fiindca pachetul instalat cu pip nu functioneaza bine si am inlocuit pachetul instalat cu sursele pachetului din GitHub.


How to GPU Computing
(Andrei Telteu) #2

Si un mic ‘hack’ iti permite sa pui serverele facebook si instagram sa proceseze pentru tine.

Adaugi .html sau .txt la finalul unui url de imagine de pe facebook/instagram si genereaza ceva asemanator, dar sub forma ASCII.
Din pacate acum vad ca nu mai functioneaza pentru facebook, dar inca merge pe instagram.


(Adavidoaiei Dumitru-Cornel) #3