Clasificarea imaginilor Tensorflow 2.0: Instalarea, încărcarea datelor, construirea și instruirea modelului
Publicat: 2020-04-21Clasificarea imaginilor este o categorie de recunoaștere a modelelor. Clasifică imaginile în funcție de relația dintre pixelii vecini. Cu alte cuvinte, folosește informații contextuale pentru a organiza imaginile și este destul de popular printre diferitele tehnologii. Este un subiect proeminent în Deep Learning și, dacă înveți despre el, cu siguranță ți-ar plăcea acest articol.
Aici, vom efectua clasificarea imaginilor TensorFlow. Vom construi un model, îl vom antrena și apoi îi vom îmbunătăți acuratețea pentru a clasifica imaginile cu cactusi. TensorFlow este o platformă de învățare automată open-source și un produs Google.
Să începem.
Cuprins
Instalați TensorFlow 2.0
Mai întâi, va trebui să instalați TensorFlow pe Google Colab. Îl poți instala prin pip:
!pip install tensorflow-gpu==2.0.0-alpha0
Apoi vom verifica instalarea:

import tensorflow ca tf
print(tf.__versiunea)
# Ieșire: 2.0.0-alpha0
Sursă
Aflați: Cele mai populare 5 proiecte TensorFlow pentru începători
Incarca date
După verificare, putem încărca datele folosind tf.data.dataset. Vom construi un clasificator care determină dacă o imagine conține un cactus sau nu. Cactusul trebuie să fie coloane. Putem folosi setul de date Cactus Aerial Photos în acest scop. Acum, vom încărca căile fișierelor împreună cu etichetele lor:
train_csv = pd.read_csv('data/train.csv')
# Adăugați numele fișierelor imagine în tren/ cu cale relativă
nume de fișiere = ['tren/' + fname pentru fname în train_csv['id'].tolist()]
etichete = train_csv['has_cactus'].tolist()
nume_fișier_tren, nume_fișier_val, etichete_tren, etichetă_val =
train_test_split(nume de fișiere,
etichete,
tren_size=0,9,
stare_aleatorie=42)
Odată ce avem etichetele și numele fișierelor, suntem gata să creăm obiectele tf.data.Dataset:
train_data = tf.data.Dataset.from_tensor_slices(
(tf.constant(train_filenames), tf.constant(train_labels))
)
val_data = tf.data.Dataset.from_tensor_slices(
(tf.constant(val_filenames), tf.constant(val_labels))
)
Sursă
În acest moment, setul nostru de date nu are imaginile reale. Are doar numele lor de fișiere. Vom avea nevoie de o funcție pentru a încărca imaginile necesare și a le procesa, astfel încât să putem realiza recunoașterea imaginii TensorFlow asupra lor.
IMAGE_SIZE = 96 # Dimensiunea minimă a imaginii pentru utilizare cu MobileNetV2
BATCH_SIZE = 32
# Funcție de încărcare și preprocesare a fiecărei imagini
def _parse_fn(nume fișier, etichetă):
img = tf.io.read_file(img)
img = tf.image.decode_jpeg(img)
img = (tf.cast(img, tf.float32)/127,5) – 1
img = tf.image.resize(img, (IMAGE_SIZE, IMAGE_SIZE))
returnare imagine, etichetă
# Rulați _parse_fn peste fiecare exemplu din seturile de date train și val
# De asemenea, amestecați și creați loturi
train_data = (train_data.map(_parse_fn)
.shuffle(buffer_size=10000)
.batch(BATCH_SIZE)
)
val_data = (val_data.map(_parse_fn)
.shuffle(buffer_size=10000)
.batch(BATCH_SIZE)
)
Sursă
Construirea unui model
În acest exemplu de clasificare a imaginii TensorFlow, vom crea un model de învățare prin transfer. Aceste modele sunt rapide, deoarece pot folosi modele existente de clasificare a imaginilor care au fost instruite anterior. Ei trebuie doar să reantreneze stratul superior al rețelei lor, deoarece acest strat specifică clasa imaginii necesare.
Vom folosi API-ul Keras din TensorFlow 2.0 pentru a crea modelul nostru de clasificare a imaginilor. Și în scopul învățării prin transfer, vom folosi MobileNetV2 pentru a fi detector de atribute. Este a doua versiune a MobileNet și este un produs Google. Este mai ușor decât alte modele precum Inception și ResNet și poate rula pe dispozitive mobile. Vom încărca acest model pe ImageNet, vom îngheța greutățile, vom adăuga un cap de clasificare și îl vom rula fără stratul superior.
IMG_SHAPE = (IMAGE_SIZE, IMAGE_SIZE, 3)
# Model pre-antrenat cu MobileNetV2
model_base = tf.keras.applications.MobileNetV2(

input_shape=IMG_SHAPE,
include_top=Fals,
weights='imagenet'
)
# Înghețați greutățile modelului pre-antrenat
base_model.trainable = Fals
# Cap de clasificare antrenabil
maxpool_layer = tf.keras.layers.GlobalMaxPooling2D()
prediction_layer = tf.keras.layers.Dense(1, activation='sigmoid')
# Cap de clasificare a stratului cu detector de caracteristici
model = tf.keras.Sequential([
model_base,
maxpool_layer,
strat_predictie
])
rata_învățare = 0,0001
# Compilați modelul
model.compile(optimizer=tf.keras.optimizers.Adam(lr=learning_rate),
loss='binary_crossentropy',
metrics=['acuratețe']
)
Sursă
Ar trebui să utilizați optimizatori TensorFlow dacă aveți de gând să antrenați modele tf.keras. Optimizatorii din tf.keras.optimizers și tf.train API-urile sunt împreună în tf.keras.optimizers de la TensorFlow 2.0. În TensorFlow 2.0, multe dintre optimizatoarele originale ale tf.keras au primit upgrade și înlocuiri pentru o performanță mai bună. Ele ne permit să aplicăm optimizatori fără a face compromisuri cu performanța și, de asemenea, economisim timp.
Citiți: Tutorial de detectare a obiectelor TensorFlow pentru începători
Învață cursuri de știință a datelor de la cele mai bune universități din lume. Câștigă programe Executive PG, programe avansate de certificat sau programe de master pentru a-ți accelera cariera.
Antrenarea modelului
După ce am construit modelul, îl putem preda. API-ul tf.keras din TensorFlow 2.0 acceptă API-ul tf.data, așa că trebuie să utilizați obiectele tf.data.Dataset în acest scop. Poate efectua antrenamentul eficient și nu ar trebui să facem niciun compromis cu performanța.
num_epochs = 30
steps_per_epoch = round(num_train)//BATCH_SIZE
val_steps = 20
model.fit(train_data.repeat(),
epochs=num_epochs,
steps_per_epoch = pași_per_epoch,
validation_data=val_data.repeat(),
validation_steps=val_steps)
Sursă
După 30 de epoci, precizia modelului crește substanțial, dar o putem îmbunătăți în continuare. Vă amintiți că am menționat înghețarea greutăților în timpul învățării prin transfer? Ei bine, acum că am antrenat șeful de clasificare, putem dezgheța acele straturi și ne putem ajusta mai departe setul de date:
# Dezghețați toate straturile MobileNetV2
base_model.trainable = Adevărat
# Reînghețați straturile până la straturile pe care vrem să le reglam fin
pentru stratul din base_model.layers[:100]:
layer.trainable = Fals
# Utilizați o rată de învățare mai mică
lr_finetune = rata_de_învățare / 10
# Recopilați modelul
model.compile(loss='binary_crossentropy',
optimizator = tf.keras.optimizers.Adam(lr=lr_finetune),
metrics=['acuratețe'])
# Creșteți perioadele de antrenament pentru reglaj fin
fine_tune_epochs = 30
total_epochs = num_epochs + fine_tune_epochs
# Ajustați modelul
# Notă: setați initial_epoch pentru a începe antrenamentul după epoca 30, de când am
# antrenat anterior timp de 30 de epoci.
model.fit(train_data.repeat(),
steps_per_epoch = pași_per_epoch,
epoci=epoci_totale,
initial_epoch = num_epochs,
validation_data=val_data.repeat(),
validation_steps=val_steps)

Sursă
30 de epoci mai târziu, precizia modelului se îmbunătățește și mai mult. Cu mai multe epoci, am văzut mai multe îmbunătățiri ale preciziei modelului. Acum, avem un model adecvat de recunoaștere a imaginii TensorFlow, care poate recunoaște cactușii colonari în imagini cu o precizie ridicată.
Citește și: Idei de proiecte Tensorflow pentru începători
Aflați mai multe despre clasificarea imaginilor TensorFlow
API-urile extrem de funcționale ale TensorFlow și capacitățile sale îl fac o tehnologie puternică pe care o poate folosi orice programator. API-urile sale de nivel înalt îndepărtează și complexitatea generală, făcându-l mai ușor de utilizat.
Ești interesat să afli mai multe despre TensorFlow, clasificarea imaginilor și subiecte conexe? Apoi, vă recomandăm să consultați Diploma PG de la IIIT-B și upGrad în învățare automată și AI, care este concepută pentru profesioniști care lucrează și oferă peste 450 de ore de pregătire riguroasă, peste 30 de studii de caz și sarcini, statutul de absolvenți IIIT-B, peste 5 practici practice proiecte practice și asistență pentru locuri de muncă cu firme de top.