آموزش برنامه نویسی فناوری

تشخیص چهره چیست و چگونه عمل می کند-قسمت چهارم

امیرحسین عراقی
نوشته شده توسط امیرحسین عراقی

بخش سوم معرفی تشخیص چهره مدرن همراه با آموزش

ادامه  بخش سوم توضیح در مورد چگونگی عملکرد تشخیص چهره

روند پردازش این سلسله اندازه‌گیری‌ها با نگاهی به سه تصویر از چهره به طور همزمان انجام می شود:
١-بازیابی یا واکشی تصویر صورت شخصی که میشناسیم
٢ بازیابی یا واکشی یک تصویر دیگر از همان شخص
۳ بازیابی یا واکشی تصویری از یک شخص کاملا متفاوت
سپس الگوریتم نگاهی به اندازه گیری های انجام شده در مورد هر سه عکس جاری خواهد انداخت و شبکه عصبی را کمی می پیچاند یعنی می چرخاند تا اطمینان حاصل کند که حاصل اندازه گیری های بین عکس یک و دو کمی شبیه ترند تا عکس ٢ و ٣.

 

آموزش سه گانه تشخیص چهره
پس از میلیونها بار تکرار این مرحله برای میلیون‌ها تصویر، از هزاران شخص متفاوت ،شبکه عصبی می‌آموزد که به طور قابل اعتمادی ۱۲۸ کامل اندازه گیری برای هر فرد ایجاد کند.هر ده تصویر مختلف از یک شخص تقریبا باید اندازه گیری یکسانی به دهد.
اشخاصی که با ماشین آموزنده کار میکنند ۱۲۸ اجزای اندازه گیری هر چهره را نهفته می نامند ایده کاهش داده های خام پیچیده مثل یک عکس درون فهرستی از اعداد تولید شده توسط رایانه بسیار زیاد در ماشین آموزنده بالا میرود و افزایش می‌یابد (مخصوصاً در ترجمه یک زبان) راه حل دقیق برای چهره هایی که ما استفاده می کنیم در سال ۲۰۱۵ توسط محققان شرکت گوگل ابداع شد ضمن اینکه راه حل های دیگری نیز موجود است.

رمزگذاری تصویر صورتمان:

این پردازش شبکه سلسله عصبی پیچیده برای اینکه خروجی اجزای اندازه گیری شده نهفته داشته باشند نیازمند داده های بسیار قدرتمند و پردازش رایانه دارد.
تا با داشتن یک کارت گرافیک Nvidia Tesla گران قیمت حدود ۲۴ ساعت مداوم برای دریافت یک خروجی خوب و صحیح زمان صرف می شود.

اما شبکه یک بار تغییر داده شده است پس می‌توانند برای هر چهره حتی برای آنهایی که هرگز پیش از این ندیده است شاخص‌های اندازه‌گیری تولید کند.پس این مرحله تنها یکبار می بایست انجام شود خوشبختانه عزیزانمان در گروه Open face از پیش این کار را کرده و چندین شبکه یادگیری را که اکنون ما می توانیم از آنها استفاده کنیم منتشر کرده اند . از همینجا از براندن آموس و گروهش تشکر می کنیم !
پس تمام کاری که ما باید انجام دهیم، این است که تصاویر چهره مان را از طریق شبکه از پیش آموزش‌دیده آنها اجرا کنیم تا بتوانیم ۱۲۸ شاخص اندازه گیری را برای هر صورت به دست آوردیم. اینجا یک نمونه برای تصویر آزمایشی ما هست:

 

۱۲۸ شاخص اندازه گیری را برای هر صورت
خوب این ۱۲۸ عدد اندازه گیری دقیق چه بخشهای از چهره را شامل می شوند؟
این نشان می‌دهد که ما هیچ ایده‌ای نداریم و واقعا برایمان بی معنی است تمام چیزی که برای ما اهمیت دارد این است که وقتی شبکه به دو تصویر متفاوت از یک شخص خاص نگاه می کند همواره اعداد یکسانی را تولید می کند .
اگر می خواهید این مرحله را خودتان انجام دهید open face یک کد از پیش نوشته شده است.

که نهفتگی تمام تصاویر را در درون یک شاخه (فولدر) تولید کرده و آنها را درون یک فایل csv میریزد . اگر می خواهید می توانید مانند اینجا تست کنید

مرحله ٤ : يافتن نام شخص از طريق كد گذارى

در واقع اين مرحله از ميان تمام مراحل ، آسان ترين است . تمام چيزى را كه بايد انجام دهيم اين است كه شخص را از ميان پايگاه اطلاعاتى افراد شناخته شده اى كه نزديك ترين اعداد اندازه گيرى شده به تصوير آزمايشى ما را دارند را بياييم
شما ميتوانيد آن كار را با استفاده از الگوريتم هاى ساده و اصاى دسته بندى ماشين آموزنده انجام دهيد. نياز به هيچ گونه دوز و كلك خيال انگيز براى ياد گيرى نيست. ما از يك دسته بندى كننده خطى SVM استفاده خواهيم كرد اما ضمنا الگوريتم هاى دسته بندى بسيار ديگرى نيز كار ميكنند.
تمام كارى را كه بايد بكنيم اين است كه به يك دسته بندى كننده ياد بدهيم كه از اعداد به دست آمده از يك تصوير جديد را گرفته و با اشخاص از پيش شناخته شده مطابقت داده و بگويد شبيه ترين فرد كيست.
انجام اين كار در كسرى از ثانيه صورت ميگيرد و نتيجه اش مشخص شدن نام شخص است.
سپس اجازه دهيد اين سيستم را آزمايش كنيم نخست من به يك دسته بندى كننده ٢٠ عكس كه هر يك مربوط به ويل فرد ، چاد اسميت و جيمى فالن بودند را دادم .

سپس دسته بندى كننده را روى هر يك از كليپ معروف ويديويى در youtube كه در باره همين سه شخص مذكور بود و دوتا از آن ها قصد داشتند تا خود را جاى ديگرى جا بزنند ( در برنامه جيمى فالن) اجرا كردم .

تشخیص چهره ویل فارل و جان اسمیت

تشخیص چهره ویل فارل و جان اسمیت

اون كاركرد ، و چقدر هم خوب روى دو چهره متفاوت با حالت مختلف كار كرد ! حتى روى چهره نيم رخ!

خودتان امتحان کنید

بگذاريد مراحلى را كه گذرانديم مرور كنيد

١- با استفاده از الگوريتم HOG براى ايجاد ساده ترين شكل تصوير ، كد گذارى ميكنيم. با استفاده از اين تصوير ساده شده بخش هايى از تصوير را كه به كد هاى توليد شده از يك تصوير به وسيله الگوريتم HOG شبيه ترين هستند را پيدا ميكنيم.
٢-حالت و زاويه چهره را با يافتن ويژگى هاى خاص اصلى درون صورت حل ميكنيم . از قبل آن نشانه ها را يافته و از آنها براى پيچاندن و چرخاندن تصوير استفاده ميكنيم. به طورى كه چشم ها و دهان در يك مركز قرار بگيرند.
٣- تصوير در مركز قرار گرفته را از ميان يك شبكه عصبى كه ميداند چطور ويژگى هاى صورت را اندازه گيرى كند ، عبور ميدهيم. يعنى آن ١٢٨ ويژگى چهره را ذخيره ميكند.
٤- با نگاهوى به تمامى چهره هايى كه در گذشته اندازه گيرى كرده ايم مقايسه ميكنيم كدام شخص ، به اندازه گيرى چهره شبيه ترين است.
حالا كه ميدانيم تمام اين روند چگونه عكل ميكند دستورالعمل هايى هستند كه آغاز تا پايان نشان ميدهند كه چطور چارچوب كلى فناورى شناخت چهره ، روى كامپيوترتان اجرا ميشود.

حالا كه ميدانيد تمام اين ها چگونه كار ميكنند ، دستورالعمل هايى از شروع تا پايان داريم كه چگونگى اجراى تمام چارچوب فناورى تشخيص چهره را روى رايانه ى خودتان نشان ميدهد.
همچنین ميتوانيد مراحل زير را جهت استفاده از Open Face دنيال كنيد. هرچند اينجانب نسخه كتاب خانه ى جديدى از فناورى تشخيص چهره بر پايه ى زبان پايتون نوشته ام كه نصب و استفاده آن بسيار ساده تر است. بنابراين به جاى ادامه دادن مطالب پيش رو ، ابتدا توصيه ميكنم كه نسخه ى تشخيص چهره اى را كه خودم نوشته ام امتحان كنيد.
من حتى از قبل بك سيستم مجازى از پيش پيكربندى شده مجهز به برنامه خودم ، Open CV ، Tensor flow و كلى ديگر از ابزار هاى يادگيرى عميق آماده كرده ام. شما ميتوانيد به راحتى آن را دانلود كرده و روى رايانه خود به راحتى اجرا كنيد.
از اين ماشين مجازى ، يك عكس تهيه كنيد اگر نميخواهيد تمام اين كنابخانه ها را خودتان نصب كنيد.

دستورالعمل هاى Open Face :

قبل از شروع مطمین شويد كه open face , dlib و پايتون را نصب كرده ايد.شما ميتوانيد هم از روش دستى استفاده كنيد و هم از يك ماشين مجازى از پيش آماده شده بهره بردارى كنيد.

 

قبل از شروع
Make sure you have python, OpenFace and dlib installed. You can either [install them manually](https://cmusatyalab.github.io/openface/setup/) or use a preconfigured docker image that has everying already installed: 

```bash
docker pull bamos/openface
docker run -p 9000:9000 -p 8000:8000 -t -i bamos/openface /bin/bash
cd /root/openface
```

Pro-tip: If you are using Docker on OSX, you can make your OSX /Users/ folder visible inside a docker image like this:

```
docker run -v /Users:/host/Users -p 9000:9000 -p 8000:8000 -t -i bamos/openface /bin/bash
cd /root/openface
```

Then you can access all your OSX files inside of the docker image at `/host/Users/...`

```
ls /host
مراحل
## Step 1

Make a folder called `./training-images/` inside the openface folder.

```
mkdir training-images
```

## Step 2 

Make a subfolder for each person you want to recognize. For example:

```
mkdir ./training-images/will-ferrell/
mkdir ./training-images/chad-smith/
mkdir ./training-images/jimmy-fallon/
```

## Step 3 

Copy all your images of each person into the correct sub-folders. Make sure only one face appears in each image. There's no need to crop the image around the face. OpenFace will do that automatically.

## Step 4

Run the openface scripts from inside the openface root directory:

First, do pose detection and alignment:

`./util/align-dlib.py ./training-images/ align outerEyesAndNose ./aligned-images/ --size 96`

This will create a new `./aligned-images/` subfolder with a cropped and aligned version of each of your test images.

Second, generate the representations from the aligned images:

`./batch-represent/main.lua -outDir ./generated-embeddings/ -data ./aligned-images/`

After you run this, the `./generated-embeddings/` sub-folder will contain a csv file with the embeddings for each image.

Third, train your face detection model:

`./demos/classifier.py train ./generated-embeddings/`

This will generate a new file called `./generated-embeddings/classifier.pkl`. This file has the SVM model you'll use to recognize
new faces.

At this point, you should have a working face recognizer!

## Step 5: Recognize faces!

Get a new picture with an unknown face. Pass it to the classifier script like this:

`./demos/classifier.py infer ./generated-embeddings/classifier.pkl your_test_image.jpg`

You should get a prediction that looks like this:

```
=== /test-images/will-ferrel-1.jpg ===
Predict will-ferrell with 0.73 confidence.
```

From here it's up to you to adapt the `./demos/classifier.py` python script to work however you want.

Important notes:
* If you get bad results, try adding a few more pictures of each person in Step 3 (especially picures in different poses).
* This script will _always_ make a prediction even if the face isn't one it knows. In a real application, you would look at the confidence score and throw away predictions with a low confidence since they are most likely wrong.

منبع : Medium

درباره نویسنده

امیرحسین عراقی

امیرحسین عراقی

3 دیدگاه

درج دیدگاه