یکی از سریعترین و موثرترین راهها برای ساخت برنامه image classifier این است که از اهرمی بهنام transfer learning استفاده کنیم تا اشیایی که مورد نظر ما هستند را تشخیص بدهد. در این مقاله این رویکرد را با بهره وری از Google’s Inception v3 image classifier دنبال میکنیم.
توصیه میکنیم قبل از مطالعه مقاله برای دید بهتر ابتدا “ هوشمصنوعی با OPENCV ” را مطالعه کنید.
(ترجیحا اگر مطالب OpenCv سایت را بخوانید متوجه موضوع خواهید شد.)
مراحل پروژه:
راهاندازی و استفاده از Tensor Flow Docker Container
دانلود مجموعه اموزشی
آموزش دادن
تشخیص
گام اول
راهاندازی و استفاده از Tensor Flow Docker Container:
ابتدا باید از طریق لینکی که در ادامه قرار میدهیم نرمافزار موردنظر را نصب کنید.
برای دریافت نسخه ویندوز نرمافزار داکر باید از سایت رسمی آن دانلود کنید.(توجه کنید که تا log in نکنید نمیتونید چیزی دانلود کنید!)
برای دانلود، دو نوع نرمافزار برای دانلود است که اگر حوصله سر و کله زدن با ارور و باگها را ندارید نسخه stable را پیشنهاد میکنیم و اگر بیشتر و حرفهایتر میخواهید در این زمنیه کار کنید توصیه میکنیم نسخه edge نرمافزار را نصب کنید.
پس از اینکه نرمافزار را نصب کردید برای اطمینان از نصب میتوانید از پنجره Power Shell یا Command Prompt ورژن نرمافزار را چک کنید.
1 | docker version |
خب از این مرحله به بعد هر زمانی میخواهید با نرمافزار docker کار کنید اول باید نرم افزار رو باز کنید و مطمئن شوید که نرمافزار در حال اجرا است مانند تصویر زیر.
و با اجرای این دستور:
1 | docker run hello-world |
میتوانید مطمئن شوید که داکر میتواند ایمیج ها را دریافت و در نتیجه اجرا کند.
این دستور ایمیج تنسورفلو موردنظر را دانلود میکند و یک container را در پسزمینه اجرا میکند. وقتی container در حال اجرا است میتوانیم به نرمافزار متصل شویم (log in کنیم) و توسعه و کارهای موردنظر را در container انجام بدهیم.
1 | docker run -it -d macgyvertechnology/tensorflow |
حال میتوانیم ایمیج هایی را که داریم توسط دستور زیر چک کنیم.
1 | Docker images |
گام دوم
دانلود مجموعه آموزشی:
میتوانید از extention های مرورگرها استفاده کنید به طور مثال برای گوگل کروم میتوانید از اینجا کلیک کنید.
و همچنین برای فایرفاکس میتوانید اینجا کلیک کنید.
از دیتایی که دانلود کردیم حدود 90 درصد را برای آموزش و 10 درصد را برای تست و تشخیص جدا میکنیم.
مجموعه آموزشی را به مسیری بهنام trainingimages انتقال میدهیم.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | /training_images /dog image1.jpg image2.jpg ... /cat image1.jpg image2.jpg |
یا هر دو نوع کلاس دیگری که مایل هستید، اسم آن را بگذارید به طور مثال در این آموزش دو نوع سگ و هم دیتای تست ( منظور گربه است که جهت تست استفاده کردهایم) را انتخاب کردهایم.
دیتا تست:
برای دریافت ID container از دستور زیر استفاده میکنیم.
1 | docker ps -a |
حال فایل /training_images را درون docker container که در حال اجرا است کپی میکنیم. (برای اینکار باید اول به دایرکتوری دیتایی که دانلود کردیم برویم)
1 | docker cp training_images/ _container_id_:/ |
داده های تست هم همینطور به صورت زیر است.
1 | docker cp test_images / _container_id_:/ |
و در نهایت به container وارد میشویم.
1 | docker exec -it _container_id_ bash |
(دقت کنید که ازاینجا به بعد وارد محیط لینوکس شدیم میدونم پیچیده شده کاملا هم قبوله ولی شیرینه البته برای اهل دلش)
حال دایرکتوری روت را چک میکنیم.
1 2 3 | Cd / ls |
در نهایت لیست باید شامل نوشته زیر باشد که باشد ( اگر موفق به دیدن خط زیر شدین واقعا باید به خودتون تبریک بگین)
1 | Training_images test_images tensorflow |
گام سوم
آموزش شبکه عصبی:
دستور زیر retrain.py را اجرا و آموزش را شروع میکند.
1 2 3 4 5 6 7 8 9 10 11 | python tensorflow/tensorflow/examples/image_retraining/retrain.py \ --bottleneck_dir=/bottlenecks \ --model_dir=/inception \ --output_labels=/retrained_labels.txt \ --output_graph=/retrained_graph.pb \ --image_dir=/training_images/ |
(دقت کنید که خطوط بالا یک دستور است نه چند دستور)
خروجی شما باید و حتما شبیه عکس زیر باشد.
این مرحله نسبت به مراحل قبلی مقداری طول میکشد پس لطفا صبور باشید.
گام چهارم
تشخیص:
حالا میتوانیم ماژول آموزش داده شده را اجرا کنیم و ببینیم عملکرد آن برای دیتایی که برای تست قرار داده بودیم چیست؟
1 2 3 4 5 6 7 8 9 10 | python tensorflow/tensorflow/examples/image_retraining/label_image.py \ --graph=/retrained_graph.pb \ --labels=/retrained_labels.txt \ --image=/test_images/german-shepherd/german-shepherd-toy.jpeg german-shepherd-toy.jpeg عکسی از داده های تست که میخواهیم ماژول را با آن تست کنیم. دقت کنید که نگفتیم هر عکسی لطفا به انتخاب این عکسها با دقت عمل کنید. |
خروجی آخر هم باید مانند تصویری که در ادامه قرار میدهیم باشد.
1 2 3 4 5 6 7 | python tensorflow/tensorflow/examples/image_retraining/label_image.py \ --graph=/retrained_graph.pb \ --labels=/retrained_labels.txt \ --image=/test_images/dalmation/dalmation-toy.jpeg |
دو خط آخر در هر دو مثال درصد تخمین هر کلاس رو بیان میکند.
امیدواریم که این آموزش هم مورد توجه شما مخاطبین سیسوگی مفید واقع شده باشد.
سلام وخدا قوت بخش یادگیری ماشین واقعا جالبه وتشکر از اموزش شما اگر بشه بخش یادگیری ماشین رو با یک پروژه کابردی وبرای یک هدف مشخص اموزش بدید خیلی بهتر میشه تشکر از اموزشتان
سلام کیان عزیز. سپاس از نظر مثبت شما. موردی که میفرمائید را در برنامه قرار خواهیم داد.