آموزش کلاسیفیرهای آبشاری (HAAR,LBP,HOG) - هفت خط کد انجمن پرسش و پاسخ برنامه نویسی

آموزش کلاسیفیرهای آبشاری (HAAR,LBP,HOG) [بسته شد]

0 امتیاز
برای آموزش این نوع کلاسیفیرها به دو دسته تصویر نیاز داریم.
دسته اول:
تصاویر خود آبجکت مورد نظر یا اصطلاحاً تصاویر مثبت گفته میشه .این تصاویر بیانگر خود آبجکت هستند می تونن یک مقدار از ناحیه واقعی آبجکت بزرگتر هم باشند .
دسته دوم :
تصاویر پس زمینه تصاویری که در آنها آبجکت دیده نشود یا اصطلاحاً تصاویر منفی گفته میشه. این تصاویر می تونن به هر اندازی باشند تصاویر بزرگ توسط پروسه آموزش بخش بندی می شوند .یکی از مشکلات
آموزش کلاسیفیر های آبشاری همین تهیه تصاویر پس زمینه هستش.
 
حالا فلدری به نام train ایجاد کنید و در این فلدر دو فلدر دیگر به نام های foreground و background و cascades ایجاد کنید.2 فایل متنی با نام background.txt و foreground.txt هم
در این فلدر ایجاد کنید که در ادامه توضیح خواهیم داد که چه چیزهایی باید داخل این فایل ها قرار بدید.
کل تصاویری که برای پس زمینه تهیه کردید در فلدر foreground بریزید و کل تصاویر مربوط به آبجکت را در foreground  بریزید.تصاویر مربوط به foreground
می تونه تصویر کامل یا تصویر برش خورده باشه در هر صورت باید فایل ground thruth تهیه کنید برای دو دسته از تصاویر.
 
فایل ground thruth یا فایل annotation فایلی هستش که در آن  اطلاعات تصاویر اعم از نام تصویر و یا متا دیتا مربوط به هر یک از تصاویر از جمله مهم ترین آنها ناحیه آبجکت
هستش ذخیره میشه.
فرمت فایل annotation مربوط به فایل پس زمینه  با نام background.txt که قبلا ایجادش کردیم به شرح زیر است.
background/img1.jpg
background/img2.jpg

 

اسم هر فایل تصویری را در یک سطر قرار می دیم مسیر هم به صورت relative داده شده یعنی آدرس از فلدر جاری.
فرمت فایل annotation مربوط به فایل آبجکت ها  با نام foreground.txt که قبلا ایجادش کردیم به شرح زیر است.
img1.jpg  1  140 100 45 45
img2.jpg  2  100 200 50 50   50 30 25 25

 

اسم هر فایل در یک سطر پس از آن تعداد آبجکت ها که در تصویر اول 1 آبجکت و در تصویر دوم 2 آبجکت مشخص شده پس از تعداد آبجکت ها اطلاعات مربوط به نواحی هر آبجکت
در تصویر مورد نظر باید درج شه که به ترتیب برای هر ناحیه به صورا x,y,width,height هستش برای وارد کردن نواحی بعدی هم یک فاصله قرار بدید به همین ترتیب اطلاعات
نواحی بعدی را وارد کنید.
 
قبل از اینکه بریم سراغ آموزش کلاسیفیر های آبشاری شما می بایست اطلاعات مربوط به تصاویر آبجکت ها یا تصاویر مثبت را به فایلی به نام vec تبدیل کنید trainer کتابخانه 
opencv این نوع تصویر را به عنوان ورودی تصاویر آبجکت ها از شما دریافت می کنه.
 
نحوه ساخت فایل vec:
 
برای ساخت فایل vec بایستی از یکی از نرم افزارهای utility  همراه opencv  به نام opencv_createsamples.exe استفاده کنید.
این فایل  در فلدر bin این کتابخانه قرار داده شده است.فرض کنید ما 150 تصویر از آبجکت ها داریم و کوچکترین آبجکتی که باید شناسایی بشه 40*40 هستش یه صورت زیر عمل می کنیم.
opencv_createsamples.exe -vec foregound.vec -info foreground.txt -w 40 -h 40 -num 150

 

 -vec برای مشخص کردن فایل خروجی vec هستش.
 -info فایل annotation مربوط به تصاویر آبجکت ها را مشخص می کنه.
-w پهنای آبجکت
-h ارتفاع آبجکت
-num تعداد تصاویری که قصد داریم با آنها آموزش را انجام بدیم.
 
حالا برای اینکه مطمئن شوید که فایل vec ساخته شده به درستی ایجاد شده می تونید به صورت زیر عمل کنید.
تصاویر موجود در فایل vec را به شما نشان می دهد با فشردن کلیدی می تونید تصاویر بعدی را ببینید.
opencv_createsmaples.exe -vec foreground.vec -w 40 -h 40 -show

برای انجام عملیات آموزش از فایل opencv_traincascade.exe که در فلدر bin قرار داره استفاده می کنیم.

فایل های مربوط به آموزش به صورت مرحله به مرحله به صورت فایل stage ذخیره میشه که این تعداد stage توسط کاربر مشخص میشه در ضمن عملیات آموزش به هر نحوی بسته شه از آخرین stage آموزش شروع میشه .
 
بسته شد با پیغام: آموزش
سوال شده اردیبهشت 5, 1396  بوسیله ی مصطفی ساتکی (امتیاز 21,998)   23 34 75
بسته شد اردیبهشت 7, 1396 بوسیله ی مصطفی ساتکی

1 پاسخ

0 امتیاز
توجه - اگر قصد دارید عملیات آموزش را ابتدا شروع کنید فایل های موجود در فلدر casacde را پاک کنید.
یکی از نکاتی را که باید به آن توجه داشته باشید هرچقدر میزان ram سیستم شما بیشتر باشه شما می تونید سریع تر عملیات را انجام بدید چون trainer می تونه تصاویر بیشتر را در حافظه 
باز کنه .
برای انجام عملیات آموزش به صورت زیر عمل می کنیم.

opencv_traincascade -data cascades -vec foreground.vec -bg background.txt
-numStages 16 -minHitRate 0.999 -maxFalseAlarmRate 0.5 -numPos 100
-numNeg 60 -w 40 -h 40 -mode ALL -precalcValBufSize 1024
-precalcIdxBufSize 1024
-featureType HAAR
 
-data مقدار cascades را به آن نسبت دادیم همان فلدری که از قبل ساخته شده کلیه فایل های stage در هر مرحله در آن قرار می گیرد.
-vec فایلی vec که از تصاویر آبجکت ها ساخته شده را دریافت می کند.
-bg فایل background.txt فایل annotation مربوط به فایل های پس زمینه
-numstage تعداد stage ها را مشخص می کند در هنگام عملیات آموزش میزان خطا در هر stage به شما نشان داده می شود چنانچه در هر stage میزان خطا کمتر از 1e-5 شد می تونید به عملیات آموزش پایان بدید. اجازه ندید که خطا کوچک تر از این مقدار باشه
که در غیر اینصورت overtraing رخ میده.
-numpos تعداد تصاویر آبجکتی که باید در هر stage مورد استفاده قرار گیرید به طور معمول 85 درصد از تصاویر کل آبجکت ها را شامل می شود.
-numNeg تعداد تصاویر پس زمینه ای که باید در هر stage مورد استفاده قرار گیرد به طور معمول 50 درصد از تصاویر کل پس زمینه را شامل می شود.
-precalcValBufSize -precalcIdxBufSize میزان حافظه ای که برای feature ها و weak classifier ها در نظر می گیریم به mb هم باید وارد کنید به نظر من 4000 تا کمتر ندید.
-featureType نوع ویژگی که قرار استخراج بشه که سه نوع ویژگی را پشتیبانی می کنه که شامل :haar,lbp,hog هستش.
-minHitRate مشخص می کنه که در stage چند تا از آبجکت ها اجازه دارند اشتباها به عنوان پس زمینه کلاسیفی بشن. مقدار 0.999 به معنای 1 در 1000 هستش 0.995 به معنای 5 در 1000 هستش. اگر داده هاتو نویزی هستش این مقدار رو کوچکتر بدید مثلا 0.990
-maxFalseAlarmRate این مقدار نشان دهنده آن است که در هر stage چه مقدار از نمونه پس زمینه بدرستی پس زمینه کلاسیفی شن .مقدار پیش فرض 0.5 است به این معناست که weak کلاسیفیر به احتمال 0.5 پس زمینه ها را در هر stage کلاسیفی می کنه.
مقدارشو بیشتر نکنید چون باعث میشه که عملیات در هر stage طولانی بشه.وقتی در هر stage بیام 50 درصد را به درستی کلاسیفی کنیم 50 درصد مابقی میره برای stage بعدی همینطور تا آخر پس نیازی نیست همشو تو همون stage اول فیلتر کنیم.
 
پاسخ داده شده اردیبهشت 5, 1396 بوسیله ی مصطفی ساتکی (امتیاز 21,998)   23 34 75
...