TensorFlow е разноврсна алатка за создавање модели за машинско учење.
Во овој пост, ќе погледнеме како да создадеме систем за препознавање лице со TensorFlow, рамка за машинско учење со отворен код. Ќе ги разгледаме суштинските процеси во создавањето на успешен систем за препознавање лица, од собирање и подготовка на податоци до обука и проценка на модел.
Ќе добиете искуство од прва рака со TensorFlow за да создадете препознавање на лицето со помош на фрагменти од код и примери од реалниот свет. Добредојдени сте да следите додека продолжуваме.
Вовед во TensorFlow
TensorFlow е бесплатна библиотека со отворен код. Тоа е симболична математичка алатка која користи проток на податоци и програмирање кое може да се разликува. Со него може да се справите со низа задачи, вклучително и длабоки невронска мрежа обука.
TensorFlow е моќен и прилагодлив. Исто така, тоа е одлична алатка за развој и имплементирање на модели за машинско учење. Можете да изградите комплицирани модели со неколку слоеви и операции на тензори. Исто така, претходно изградените модели во библиотеката може да се дотеруваат за специфични потреби.
Понатаму, TensorFlow има огромна и проширена корисничка заедница. Значи, има многу информации и помош за поединци кои се нови на платформата.
TensorFlow е популарен за машинско учење делумно затоа што обезбедува работен тек од крај до крај. Така, можете лесно да конструирате, обучувате и распоредите модели. Обезбедува алатки и стратегии за подобрување и скалирање на моделите за да одговараат на специфичните барања. Таа варира од претходна обработка на податоци до распоредување на моделот.
Што е препознавање лице?
Препознавањето на лицето е а компјутерска визија задача која ја идентификува идентификацијата на личноста врз основа на неговото лице. Оваа техника ги препознава цртите на лицето, како што се обликот и текстурата на очите, носот и устата.
И, ги споредува со база на податоци на познати лица за да идентификува натпревар. Препознавањето лице има неколку намени, вклучувајќи безбедносни системи, организација на фотографии и биометриска автентикација.
Прецизноста на алгоритмите за препознавање лица значително се зголеми во последниве години како резултат на откритијата во машинското учење.
Увоз на потребните библиотеки
Пред да започнеме што било, треба да ги увеземе библиотеките потребни за нашиот модел. Tensorflow (tf) се увезува и се користи за креирање и обука на моделот. <(p>
„Numpy“ врши математички пресметки и обработка на податоци.
„matplotlib.pyplot“ се увезува како plt и се користи за цртање на податоци и визуелизации.
Конечно, „fetch lfw people“ се увезува од sklearn. сетови на податоци и се користат за вчитување на базата на податоци за препознавање лице. Оваа функција е дел од комплетот алатки за учење scikit. Благодарение на оваа функција, не моравме да прикачуваме друга база на податоци. Ова е веќе вградено во scit-learn.
И, тоа ви дава пристап до широк спектар на збирки на податоци за машинско учење апликации. Во ова сценарио, го користиме методот fetch lfw people за да ја преземеме базата на податоци „Означени лица во дивината“ (LFW). Содржи фотографии од лицата на луѓето, како и етикетите што се со нив.
Овие библиотеки се критични во имплементацијата и евалуацијата на нашиот модел за препознавање лица.
import tensorflow as tf
import numpy as np
import matplotlib.pyplot as plt from sklearn.datasets
import fetch_lfw_people
Претходна обработка и вчитување на сет на податоци за препознавање лице
Во овој дел, ние ја користиме функцијата „фати lfw луѓе“ за претходна обработка на податоците за препознавање лице. Прво, користиме fetch lfw луѓе со опцијата „мин. лица по лице=60“. Ова покажува дека сакаме да вклучиме само лица во базата на податоци кои имаат најмалку 60 фотографии. Оттука, гарантираме дека нашиот модел има соодветни податоци за учење. Исто така, ова ја намалува опасноста од преоптоварување.
Податоците и ознаките од објектот лица потоа се извлекуваат и се доделуваат на променливите X и y. X hol.
Сега сме подготвени да го тренираме нашиот модел за препознавање лице користејќи претходно обработени податоци и етикети.
faces = fetch_lfw_people(min_faces_per_person=60)
X = faces.data
y = faces.target
target_names = faces.target_names
Разделување на сетови за обука и тестови
Во овој чекор, ја делиме нашата база на податоци за препознавање лице на две половини со помош на методот на поделба на тест на воз од изборот на sklearn.model. Целта на оваа поделба е да се процени перформансите на нашиот модел после тренинг
Функцијата за разделување на тест за воз прифаќа како влезни податоци X и ознаки y. И, ги дели на сетови за обука и тестови. Избираме тест големина=0.2 во овој пример. Ова значи дека 20% од податоците ќе се користат како тест сет и 80% како комплет за обука. Понатаму, ние користиме случајна состојба=42 за да се осигураме дека податоците се поделени доследно секој пат кога ќе се изврши кодот.
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
Подготовка на податоците
Целта на претходна обработка на податоците е да се подготват за влез во моделот. Податоците се претходно обработени во овој код со делење на секоја податочна точка со 255.
Што не мотивираше да го постигнеме ова? Нормализацијата е постапка на претпроцесирање што се користи во машинското учење за да се гарантира дека сите карактеристики се на иста скала. Во ова сценарио, делењето со 255 ги скали податоците до опсег од 0 до 1, што е вообичаен чекор за нормализирање на податоците на сликата.
Ова ја забрзува конвергенцијата на моделот и може да ги зголеми неговите перформанси.
X_train = X_train / 255.0
X_test = X_test / 255.0
Креирање на режимот
Сакаме да го идентификуваме поединецот чие лице се појавува на сликата. Во овој случај, ќе користиме целосно поврзана мрежа, често позната како густа мрежа. Станува збор за вештачка невронска мрежа која се користела за создавање на моделот.
Вештачките невронски мрежи се моделирани според тоа како функционира и е организиран човечкиот мозок. Тие се составени од јазли за обработка на информации или неврони кои се поврзани. Секој неврон во слој во густа мрежа е поврзан со секој неврон во слојот над него.
Моделот има четири слоја во овој код. За да се внесат во следниот слој, влезните податоци се срамнети со земја во првиот слој во еднодимензионална низа. 128 и 64 неврони во следните два слоја, соодветно, се целосно поврзани.
Функцијата за активирање ReLU е единствена функција за активирање што ја користат овие слоеви. Со тоа, можеме да го натераме моделот да научи нелинеарни корелации помеѓу влезовите и излезите. Последниот слој ја користи функцијата за активирање softmax за да прави предвидувања. И, тоа е целосно поврзан слој со онолку неврони колку што има потенцијални класи.
model = tf.keras.models.Sequential([
tf.keras.layers.Flatten(input_shape=(62 * 47,)),
tf.keras.layers.Dense(128, activation='relu'),
tf.keras.layers.Dense(64, activation='relu'),
tf.keras.layers.Dense(len(target_names), activation='softmax')
])
Составување на моделот
Моделот се компајлира со помош на функцијата „компајлирај“. Треба да го подготвиме моделот за обука. Значи, ќе го дефинираме оптимизаторот, функцијата за загуба и метриката што ќе се користи за проценка на моделот.
За време на обуката, оптимизаторот е задолжен за менување на параметрите на моделот. Оптимизаторот „адам“ е популарна техника за оптимизација за длабоко учење.
Ја користиме функцијата загуба за да ги процениме перформансите на моделот на податоците за обука. Бидејќи целните ознаки се цели броеви што ја рефлектираат класата на сликата, наместо едно-жешки кодирани вектори, функцијата за губење „ретка категорична кросентропија“ е поволна.
Конечно, ги дефинираме метриките за проценка на моделот, во овој случај, „точност“.
model.compile(optimizer='adam', loss='sparse_categorical_crossentropy', metrics=['accuracy'])
Обука за модели
Ќе ја користиме функцијата „фит“ за да го обучиме моделот.
Ќе ги обезбедиме податоците за обуката (X воз) и поврзаните ознаки (y воз), како и ќе го поставиме бројот на епохи (итерации) да се извршуваат како 10. Процедурата за обука ги менува тежините на моделот за да се намали загубата (разликата помеѓу предвидени и реални ознаки) и подобрување на точноста на податоците за обуката.
model.fit(X_train, y_train, epochs=10)
Евалуација на моделот
Сега, треба да го оцениме обучениот модел на податоците од тестот. Ние ја користиме загубата на тестот и точноста на тестот се користи за да се процени перформансите на моделот. На тестот за податоци X тест и тест етикетите y тест, треба да ја повикаме функцијата „модел.евалуација“
Функцијата ја прикажува точноста на тестот и загубата на тестот. Променливите тест загуба и точност на тестот, соодветно, ги содржат овие вредности. Конечно, ја користиме функцијата „печатење“ за да ја дадеме точноста на тестот.
test_loss, test_accuracy = model.evaluate(X_test, y_test)
print("Test accuracy:", test_accuracy)
Предвидување на часови и добивање на предвидените часови
Користејќи го моделот за обука и податоците од тестот, алгоритмот прави предвидувања. Кога податоците од тестот се предаваат на методот „model.predict“, тој дава низа предвидувања за секоја слика во тест множеството.
Името на целната класа за секоја слика потоа се зема од списокот „target names“ со помош на функцијата „np.argmax“ за да се идентификува индексот со најголема предвидена веројатност. Овој индекс потоа се користи за одредување на предвидената класа за секоја слика.
Со користење на разбирање на списокот, сите предвидувања во низата „предвидувања“ се подложени на овој метод, што резултира со списокот „предвидени класи“.
predictions = model.predict(X_test)
predicted_classes = [target_names[np.argmax(prediction)] for prediction in predictions]
Визуелизирање на предвидувањата
Сега можеме да видиме како изгледа нашиот модел.
За да се оцени колку добро ѝ оди на моделот, ќе бидат прикажани првите 10 фотографии и нивните предвидувања. Ќе ги исцртува фотографиите во сива скала и ќе ги прикаже и вистинската класа на сликата и класата предвидена од моделот користејќи го модулот matplotlib.pyplot.
Функцијата „imshow“ ја користи јамката за за да ја нацрта секоја од првите 10 фотографии од тест сет. Целните имиња[y тест[i]] и предвидените класи[i] се користат за одредување на вистинската класа и предвидената класа на сликата, соодветно. Насловите на секоја парцела потоа се означени со овие класификации.
Конечно, заплетот се прикажува со помош на методот plt.show().
for i in range(10):
plt.imshow(X_test[i].reshape(62, 47), cmap='gray')
plt.title(f"True: {target_names[y_test[i]]}, Predicted:{predicted_classes[i]}")
plt.show()
Заврши
TensorFlow нуди целосна и флексибилна средина за создавање модели за машинско учење.
Со дотерување на моделот за исполнување на одредени барања или со додавање нови достигнувања во машинското учење, прецизноста на моделот може уште повеќе да се зголеми.
TensorFlow и препознавањето на лицето веројатно ќе се користат сè повеќе во индустрии како безбедносни системи, биометриска автентикација и здравствена заштита во иднина. Наскоро ќе видиме фасцинантни иновации.
Оставете Одговор