TensorFlow یک ابزار همه کاره برای ایجاد مدل های یادگیری ماشینی است.
در این پست، نحوه ایجاد یک سیستم تشخیص چهره با TensorFlow، یک چارچوب یادگیری ماشین منبع باز را بررسی خواهیم کرد. ما به فرآیندهای اساسی در ایجاد یک سیستم تشخیص چهره موفق، از جمعآوری و آمادهسازی دادهها تا آموزش و ارزیابی یک مدل خواهیم پرداخت.
شما تجربه دست اولی با TensorFlow برای ایجاد تشخیص چهره با کمک قطعه کد و نمونه های دنیای واقعی خواهید داشت. از شما خوش آمد میگوییم که ما را دنبال کنید.
مقدمه ای بر TensorFlow
TensorFlow یک کتابخانه رایگان و منبع باز است. این یک جعبه ابزار ریاضی نمادین است که از جریان داده و برنامه نویسی قابل تمایز استفاده می کند. شما می توانید طیف وسیعی از وظایف را با آن انجام دهید، از جمله عمیق شبکه های عصبی آموزش.
TensorFlow قدرتمند و سازگار است. به همین ترتیب، یک ابزار عالی برای توسعه و استقرار مدل های یادگیری ماشینی. شما می توانید مدل های پیچیده را با چندین لایه و عملیات تانسور بسازید. همچنین، مدل های از پیش ساخته شده در کتابخانه را می توان برای نیازهای خاص تنظیم کرد.
علاوه بر این، TensorFlow دارای یک جامعه کاربری بزرگ و در حال گسترش است. بنابراین، اطلاعات و کمک های زیادی برای افرادی که تازه وارد این پلتفرم شده اند، وجود دارد.
TensorFlow محبوب است فراگیری ماشین تا حدی به این دلیل که یک گردش کار پایان به انتها را فراهم می کند. بنابراین، شما به راحتی می توانید مدل ها را بسازید، آموزش دهید و مستقر کنید. این ابزارها و استراتژی هایی را برای بهبود و مقیاس بندی مدل ها متناسب با خواسته های خاص ارائه می دهد. از پیش پردازش داده تا استقرار مدل متفاوت است.
تشخیص چهره چیست؟
تشخیص چهره یک است بینایی کامپیوتر وظیفه ای که هویت افراد را بر اساس چهره آنها شناسایی می کند. این تکنیک ویژگی های صورت مانند شکل و بافت چشم، بینی و دهان را تشخیص می دهد.
و آنها را با پایگاه داده ای از چهره های شناخته شده برای شناسایی یک مسابقه مقایسه می کند. تشخیص چهره چندین کاربرد دارد، از جمله سیستم های امنیتی، سازماندهی عکس و احراز هویت بیومتریک.
دقت الگوریتمهای تشخیص چهره در سالهای اخیر در نتیجه پیشرفتهایی در یادگیری ماشین افزایش یافته است.
واردات کتابخانه های مورد نیاز
قبل از شروع هر کاری، باید کتابخانه های مورد نیاز مدل خود را وارد کنیم. Tensorflow (tf) وارد شده و برای ایجاد و آموزش مدل استفاده می شود. <(p>
"numpy" محاسبات ریاضی و پردازش داده ها را انجام می دهد.
"matplotlib.pyplot" به عنوان plt وارد شده و برای آن استفاده می شود نمودار و تجسم داده ها.
در نهایت، "fetch lfw people" از sklearn وارد شده است. مجموعه داده ها و برای بارگذاری مجموعه داده های تشخیص چهره استفاده می شود. این تابع بخشی از جعبه ابزار scikit-learn است. به لطف این تابع، ما نیازی به آپلود مجموعه داده دیگری نداشتیم. این قبلاً در Sckit-Learn ساخته شده است.
و به شما امکان دسترسی به طیف گسترده ای را می دهد مجموعه داده ها برای یادگیری ماشین برنامه های کاربردی. در این سناریو، ما از متد fetch lfw people برای بازیابی مجموعه داده “Lbeled Faces in the Wild” (LFW) استفاده می کنیم. این شامل عکس هایی از چهره افراد و همچنین برچسب هایی است که با آنها همراه است.
این کتابخانه ها در پیاده سازی و ارزیابی مدل تشخیص چهره ما حیاتی هستند.
import tensorflow as tf
import numpy as np
import matplotlib.pyplot as plt from sklearn.datasets
import fetch_lfw_people
پیش پردازش و بارگیری مجموعه داده های تشخیص چهره
در این بخش، ما از تابع "واکشی افراد lfw" برای پیش پردازش داده های تشخیص چهره استفاده می کنیم. ابتدا از fetch lfw people با گزینه “min faces per person=60” استفاده می کنیم. این نشان می دهد که ما فقط می خواهیم افرادی را در مجموعه داده بگنجانیم که حداقل 60 عکس داشته باشند. بنابراین، ما اطمینان حاصل می کنیم که مدل ما داده های کافی برای یادگیری دارد. همچنین این امر خطر بیش از حد برازش را کاهش می دهد.
سپس داده ها و برچسب ها از شی faces استخراج شده و به متغیرهای 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 را می پذیرد. و آنها را به مجموعه های آموزشی و آزمایشی تقسیم می کند. ما در این مثال اندازه test=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'])
آموزش مدل
ما از تابع "fit" برای آموزش مدل استفاده خواهیم کرد.
ما دادههای آموزشی (قطار X) و برچسبهای مرتبط (ترن y) و همچنین تعداد دورهها (تکرار) را برای اجرای 10 تنظیم میکنیم. روش تمرین وزنهای مدل را برای کاهش ضرر (تفاوت بین) تغییر میدهد. برچسب های پیش بینی شده و واقعی) و بهبود دقت داده های آموزشی.
model.fit(X_train, y_train, epochs=10)
ارزیابی مدل
حال باید مدل آموزش دیده را بر روی داده های آزمون ارزیابی کنیم. ما از ضرر تست استفاده می کنیم و دقت تست برای ارزیابی عملکرد مدل استفاده می شود. در تست X دادههای تست و تست برچسبهای تست y، باید "عملکرد model.evaluate" را فراخوانی کنیم.
این تابع دقت تست و از دست دادن تست را خروجی می دهد. متغیرهای تست ضرر و دقت تست به ترتیب حاوی این مقادیر هستند. در نهایت، ما از تابع "چاپ" برای خروجی دقت تست استفاده می کنیم.
test_loss, test_accuracy = model.evaluate(X_test, y_test)
print("Test accuracy:", test_accuracy)
پیش بینی کلاس ها و دریافت کلاس های پیش بینی شده
با استفاده از مدل آموزشی و داده های آزمون، الگوریتم پیش بینی می کند. هنگامی که داده های تست به روش "model.predict" منتقل می شوند، آرایه ای از پیش بینی ها را برای هر تصویر در مجموعه آزمایشی به دست می دهد.
سپس نام کلاس هدف برای هر تصویر از لیست "نام های هدف" با استفاده از تابع "np.argmax" برای شناسایی شاخص با بیشترین احتمال پیش بینی شده بازیابی می شود. سپس از این شاخص برای تعیین کلاس پیش بینی شده برای هر تصویر استفاده می شود.
با استفاده از درک لیست، همه پیشبینیهای آرایه «پیشبینیها» تحت این روش قرار میگیرند و در نتیجه فهرست «کلاسهای پیشبینیشده» ایجاد میشود.
predictions = model.predict(X_test)
predicted_classes = [target_names[np.argmax(prediction)] for prediction in predictions]
تجسم پیش بینی ها
اکنون می توانیم ببینیم که مدل ما چگونه به نظر می رسد.
برای ارزیابی عملکرد مدل، 10 عکس اول و پیش بینی آنها نشان داده می شود. عکس ها را در مقیاس خاکستری رسم می کند و کلاس واقعی تصویر و کلاس پیش بینی شده توسط مدل را با استفاده از ماژول matplotlib.pyplot نمایش می دهد.
تابع "imshow" توسط حلقه for برای رسم هر یک از 10 عکس مجموعه آزمایشی اول استفاده می شود. نامهای هدف[y test[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 و تشخیص چهره احتمالاً در آینده به طور فزاینده ای در صنایعی مانند سیستم های امنیتی، احراز هویت بیومتریک و مراقبت های بهداشتی مورد استفاده قرار خواهند گرفت. به زودی شاهد نوآوری های جذاب خواهیم بود.
پاسخ دهید