پست وبلاگ

آموزش Caffe بخش سوم : اینترفیس ها و نحوه اجرا

بسم الله الرحمن الرحیم

بخش سوم : اینترفیس های مختلف Caffe (پایتون, متلب و رابط کاربری متنی)  و نحوه اجرای Caffe

Caffe دارای اینترفیس هایی برای command line , Python و MATLAB است که استفاده از آن را در تحقیقات و نمونه سازی های سریع  ممکن میسازد. درست است که Caffe در اصل یک کتابخانه به زبان سی++ بوده و یک اینترفیس ماژولار  برای توسعه ارائه میکند اما این به این معنا نیست که در تمام شرایط  نیاز به کامپایل کد سفارشی شده باشد. به عبارت بهتر برای استفاده از Caffe الزاما نیازی به تغییر و کامپایل چیزی نیست. بلکه میتوان از رابط های cmdcaffe , pycaffe و matcaffe  برای این منظور استفاده کرد.

خط فرمان

رابط خط فرمان cmdcaffe ,یکی از ابزارهای caffe است که برای آموزش مدل, امتیاز دهی و عیب یابی آن استفاده میشود. برای مشاهده اطلاعات بیشتر کافیست caffe را بدون هیچ آرگومانی اجرا کنید. این ابزار به اضافه ابزارهای دیگر را میتوانید در پوشه caffe/build/tools در لینوکس و در Caffe/Build/X64/Release در ویندوز پیدا کنید. (مثالهایی که در ادامه مشاهده میکنید, لازمه آنها, کامل کردن مثال LeNet/MNIST است )

آموزش : با اجرای caffe به همراه آرگومان train بصورت caffe train , با caffe قادر خواهید بود عملیاتهای زیر را انجام دهید :

  • یادگیری مدل از ابتدا
    • در تمامی آموزش ها باید تنظیمات solver را از طریق آرگومان solver به caffe ارائه کنیم : solver solver.prototxt-
  • از سرگیری یادگیری با استفاده از snapshot های ذخیره شده
    • برای از سرگیری آموزش بایستی با استفاده از آرگومان snapshot اطلاعات مورد نیاز را بصورت مقابل فراهم کنیم تا snapshot مربوط به solver  بار گذاری شود :   snapshot model_iter_1000.solverstate-
  • تنظیم دقیق مدلها برای داده ها و وظایف جدید
    • برای تنظیم دقیق مدل نیز لازم است مدل آموزش دیده قبلی را بوسیله آرگومان weight به caffe ارائه کنیم: weights model.caffemodel-

بعنوان مثال شما میتوانید کد زیر را اجرا  کرده و نتیجه را مشاهده کنید :

برای دیدن یک مثال کامل در رابطه با تنظیم دقیق (Fine-tuning) میتوانید به xamples/finetuning_on_flickr_style مراجعه کنید.البته فراخوانی آموزش بصورت زیر است :

آزمایش (Test)

برای آزمایش یک مدل در caffe , میتوان از سویچ test بصورت caffe test استفاده کرد. این سویچ باعث میشود caffe با اجرای مدل در فاز تست (آزمایش ) امتیاز شبکه را بدست آورده و آنرا و آنرا نمایش دهد. معماری شبکه باید بدرستی تعریف شده باشد تا یک معیار دقت یا خطا را بعنوان خروجی خود تولید کند. امتیاز هر دسته ابتدا گزارش شده و سپس امتیاز نهایی که میانگین همه امتیازات است در انتها گزارش میشود.

Benchmarking :

با استفاده از سویچ test میتوان زمان اجرای یک مدل را لایه به لایه benchmark گرفت. این ویژگی برای بررسی کارایی یک سیستم و اندازه گیری زمان نسبی اجرای مدلها مفید است.

Diagnostics :

با استفاده از سویچ device_query میتوان اطلاعات مربوط به GPU های موجود در یک سیستم را بدست آورد و از آن برای ارجاع و یا فهمیدن ترتیب GPU در سیستم بهره برد. ترتیب GPU ها در سیستم هایی که داری چند GPU هستند به این دلیل حائز اهمیت است که میتوان مشخص کرد جهت اجرا از کدام یک استفاده شود.

موازی سازی :

با کمک سویچ –gpu میتوان از چندین GPU برای اجرا caffe استفاده کرد. این سویچ میتواند لیستی از ID هر GPU که با کاما از یکدیگر جدا شده اند, دریافت کرده و به این ترتیب Caffe میتواند برای هر GPU یک solver و شبکه ایجاد کند.  به این ترتیب اندازه دسته در تعداد GPU ها ضرب میشود.

برای باز تولید آموزش بر روی GPU واحد , اندازه هر دسته (batch) در تعریف شبکه باید نتیجتا کاهش یابد.

Python

اینترفیس Python با نام pycaffe یکی از ماجولهای Caffe است که script های آن را میتوان در caffe/python یافت. برای انجام کارهایی مثل بارگذاری مدلها, انجام forward و backward pass, مدیریت IO, بصری سازی شبکه (visualize network), و حتی تغییر نحوه حل مدل کافیست caffe را در کد پایتون خود import کنید. تمام داده های مربوط به مدل,مشتقات و پارامترهای آن برای خواندن و نوشتن در دسترس هستند.

  • Net اینترفیس اصلی برای بارگذاری , تنظیم و پیکربندی و اجرای مدلهاست. caffe.Classifier و caffe.Detector هم اینترفیس های دیگری را جهت سهولت استفاده برای وظایف رایج فراهم میکنند.
  • SGDSolver اینترفیس حل یا Solving را ارائه میکند.
  • io ورودی و خروجی را به همراه پیش پردازش و protocol buffers مدیریت میکند
  • draw معماری شبکه را نمایش میدهد (visualize میکند)
  • blob های caffe برای سهولت استفاده و بهینگی بصورت آرایه های ndarray numpy ارائه شده اند.

آموزش های python را میتوان در بخش caffe/examples یافت.

برای کامپایل کردن ماجول pycaffe , make pycaffe را اجرا کنید. سپس مسیر ماجول را به $PYTHONPATH خود به اینصورت اضافه کنید :

MATLAB

اینترفیس MATLAB با نام matcaffe یک package مبتنی بر caffe است که میتوان انرا در caffe/matlab یافت.با استفاده از این package شما میتوانید از caffe در برنامه های متلب خود استفاده کنید .

در MatCaffe شما میتوانید :

  • در متلب چندیدن شبکه ایجاد کنید
  • فازهای forward و backward را انجام دهید
  • به هر لایه ای هر blob پارامتری در آن در شبکه دستیابی داشته باشید
  • به مقادیرdata و  diff موجود در تمامی blob های موجود در شبکه دسترسی داشته  و یا چیزی در آن ها وارد کنید و در این کار محدود به blob های ورودی و یا خروجی نیستید.
  • پارامترهای یک شبکه را در درون یک فایل ذخیره کرده و یا از یک فایل بارگذاری کنید.
  • blob و شبکه را Reshape کنید
  • پارامترهای شبکه را ویرایش کرده و هر تغییری در شبکه بدهید
  • چندین solver برای آموزش در متلب ایجاد کنید
  • با استفاده از snapshotها فاز آموزش را از سر بگیرید
  • به شبکه آموزشی و شبکه های آزمایشی در یک solver دسترسی داشته باشید
  • به تعداد مشخصی شبکه را اجرا کرده وبعد از اتمام اجرا, کنترل به متلب برگردد.
  • کدهای اختیاری متلب را با گام های گرادیانت مخلوط کنید.

یک نمونه مثال از دسته بندی تصویر رقابت ILSVRC را میتوانید در آدرس caffe/matlab/demo/classification_demo.m   پیدا کنید. لطفا توجه کنید برای اجرای این دمو, شما نیازمند دانلود CaffeNet از ModelZoo هستید . ModelZoo بخشی است که مدلها های مختلف از پیش آموزش داده شده قرار دارند تا محققان براحتی بتوانن از این مدلها در تحقیقات خود با استفاده از Caffe  بهره ببرند..

اطلاعات بیشتر در مورد پیکربندی و کامپایل در ادامه همین پست داده میشه (هرچند در بخش ابزارها داده شده)

ورژن کامپایل شده Caffe (ورژن Pre-built caffe)

من برای راحتی کار Caffe رو به سه صورت کامپایل کردم (wrapper متلب (۲۰۱۴b) و پایتون ۲ (آناکوندا۲ نصب کنید) هم بیلد شدن و قابل استفاده هستن) .
ورژن CPU only رو من تست کردم اما دوتا ورژن دیگه رو نه هر کسی باید بر اساس کارت گرافیکش (انویدیا ) تست کنه و اطلاع بده اگه مشکلی هست.

  1.  ورژن CPU_only 
  2. GPU with cudnn support : ورژن با پشتیانی از CPU و GPU و Cudnn
  3. GPU without cudnn support : ورژن با پشتیانی از CPU و GPU  بدون پشتیبانی از cudnn

برای کسایی که نمیتونن از OneDrive دانلود کنن میتونن از لینک زیر از UploadBoy دانلود کنن (با IDM هم میتونید دانلود کنید) (البته از OneDrive هم میتونید با IDM دانلود کنید.منتها انگار فایرفاکس و اپرا مشکل دارن . من بدون مشکل از IE با IDM دانلود کردم)

  1.  ورژن CPU_only 
  2. GPU with cudnn support : ورژن با پشتیانی از CPU و GPU و Cudnn
  3. GPU without cudnn support : ورژن با پشتیانی از CPU و GPU  بدون پشتیبانی از cudnn

Anaconda2 رو هم باید نصب کنید (هر کدوم از ورژن های بالا رو دانلود بخوایید بکنید اناکوندا نصب باید بکنید)

  • خب CPU only رو همه میتونن دانلود کنن و ربطی به اینکه چه کارت گرافیکی دارید نداره چون روی cpu اجرا میشه .(میتونید تو مجازی ساز هم اجراش کنید )
  • اون کسایی که کارت گرافیک انویدیای قدیمی یا ضعیف دارن از ورژن بدون پشتیبانی از cudnn استفاده کنن. این ورژن از کارت گرافیک استفاده میکنه و از cpu خیلی بهتره ولی از cudnn که یه کتابخونه مخصوص یادگیری عمیق هست پشتیبانی نمیکنه .
  • اون کسایی هم که کارت گرافیک انویدیا دارن با compute capability 3 و بالاتر ورژن GPU با پشتیبانی از cudnn رو باید دانلود کنن چون سرعتش چندین برابر بیشتر از استفاده از cuda معمولی هست.(سرعت cpu خیلی خیلی خیلی کمه و اصلا قابل قیاس با کارت گرافیک نیست)
    کسایی هم که از کارت گرافیک میخوات استفاده کنن باید حتما Cuda 7.5 رو دانلود کنن. لینکش در بخش ابزارها هست.
  • پس بطور خلاصه افراد با کارتهای دارای compute 2.1 و پایین تر انویدیا از ورژن بدون cudnn استفاده کنن.
    افراد با کارتهای دارای compute 3.0 به بالا از ورژن با پشتیبانی cudnn استفاده کنن.
    کسایی که کارت گرافیک انویدیا ندارن از ورژن cpu_only استفاده کنن یه خودشون ورژن OpencCL Caffe رو که لینکش در بخش ابزارها هست کامپایل کنن .
  • برای اینکه بدونید compute کارتتون چیه اینجا یا اینجا کلیک کنید
  • دیتاست mnist هم ساخته شده و میتونید از پوشه examples/mnist بعد از دانلود شروع به تست کنید.

توجه مهم : 

برای کامپایل کردن از این سورس کد استفاده نکنید. همیشه سعی کنید از آخرین ورژن سورس کد که لینکش تو بخش ابزارها اومده استفاده کنید. هرچند تو کامپایل سورس کد این ورژنهایی که گذاشتم مشکلی ندارید اما بخاطر اینکه هر روز که میگزره این بیلد قدیمی تر میشه شما باید سعی کنید موقع کامپایل برای خودتون همیشه از اخرین ورژن موجود استفاده کنید تا باگها و مشکلات مختلف برطرف بشه.

بخش بعدی : fine-tuning
بخش قبلی : تنظیمات Solver

سید حسین حسن پور متی کلایی

درباره ی سید حسین حسن پور متی کلایی

موسس و مدیر سایت. اطلاعات در مورد فعالیت های کاری و تحصیلی : linkedIn . برای ارتباط از بخش تماس با ما یا در باره من استفاده کنید.

مقالات مرتبط

35 دیدگاه در “آموزش Caffe بخش سوم : اینترفیس ها و نحوه اجرا

  1. سلام،چندین بار هست که دارم تلاش میکنم نمیتونم فایل : ورژن با پشتیانی از CPU و GPU و Cudnn را از سایت deeplearning دانلود کنم تا چند مگ دانلود میکنه بعد قطع میشه لطفا اگه امکان داره راهنمایی بفرمایین

  2. از لینک شماره ۲ GPU with cudnn support : ورژن با پشتیانی از CPU و GPU و Cudnn، کلیک می کنم صفحه One Drive میاد که اونجا فقط روی خوده بروزر باز میشه ،لطفا لینک IDM رو قرار دهید

    1. سلام
      اینها روی سرور oneDrive مایکروسافت اپلود شدن متاسفانه لینک مستقیم رو پشتیبانی نمیکنه .
      افراد دیگه هم دانلود کردن و مشکلی نداشتن احتمالا مشکل از آی اس پی شماس
      سعی کنید یکبار با فیلتر شکن بزارید دانلود بشه شاید مشکلش برطرف بشه
      من هم یه نگاه میکنم ببینم میتونم اینو جای دیگه اپلود کنم یا نه

        1. تو UploadBoy هم اپلود شدن.
          البته من چک کردم از OneDrive هم شما میتونید با IDM بصورت مستقیم و با سرعت بالا دانلود کنید.
          منتها اینم باید بگم که برای من با اینترنت اکسپلورر بخوبی دانلود کرد اما تو فایرفاکس و اپرا نه IDM عمل نمیکرد(احتمالا بخاطر بروز نبودن پلاگین IDM برای این دو مرورگر بود)
          به هر صورت از هر کدوم خواستید میتونید دانلود کنید
          در پناه حق انشاالله همیشه موفق و سربلند باشید

  3. سلام. عذر می خوام ممکنه من را راهنمایی کنید
    الان Anaconda2 را نصب کردم و می خوام فقط از ورژن Cpu-only استفاده کنم ، نیازی به نصب Cuda هست یا نه؟
    مورد دیگه اینکه ویژوال اسودیو را هم باید نصب کنم؟؟؟؟؟
    با چی باید کامپایل کنم ؟ ممکنه توضیح بدهید چطوری باید کامپیایل کنم؟ ببخشید سوال هام خیلی ابتدایی بود چون تازه کارم ، ممنون

    1. سلام
      برای CPU_only نیازی به نصب Cuda ندارید. فقط آناکوندا۲ رو نصب کنید تمامه.
      نه نیازی به نصب ویژوال استودیو ندارید مگه اینکه دلتون بخواد برنامه نویسی کنید و یا چیزی رو تغییر بدید.
      نیازی به کامپایل هیچ چیزی نیست. همه چیز از قبل کامپایل شده و آماده استفاده است.

  4. سلام
    فایلی که کامپایل شده است با ویندوز ۶۴ بیتی است
    اگر نسخه ۳۲ بیتی هم دارید لینک دانلود بزارید ممنون می شم چون من هیچی بلد نیستم

  5. سلام آقای حسن پور
    اول بابت مطالب خوب و توضیحات عالی تون بسیار سپاس گزارم

    بنده از ورژن ویندوز caffe استفاده می کنم و طبق آموزش شما بدنبال cmdcaffe یا ابزار خط فرمان caffe هستم ولی متاسفانه در مسیری که فرمودید در سیستمم چنین فایلی وجود ندارد و یکسری فایل های اجرایی مثل caffe، classification و… وجود دارند که بعد از باز شدن بلافاصله بسته می شوند

    و ی سوال دیگه راهی وجود نداره که بتونم برنامه ها رو از طریق محیط ویژوال اجرا کنم؟

    1. cmdcaffe منظور همون فایل caffe.exe هست که باید تو cmd اجراش کنید (اگه تو ویندوز هستید- تو پوشه Build\x64\Release هست ) .
      چون caffe یه فایل اجرایی کامند پرامپتی هست اگه بصورت دستی بخوایید اجراش کنید سریع اجرا میشه و بسته میشه برای اینکه بتونید کار کنید اول cmd رو اجرا کنید و بعد caffe رو در اون اجرا کنید. اینطور میتونید یه خلاصه از سویچهای کار با اون رو ببینید.
      محیط ویژوال استودیو برای کد نویسی استفاده میشه . میتونید با استفاده از توابع caffe عمل ترینینگ و یا کلسیفیکیشن رو خودتون بنویسید و اجرا کنید.
      مشکلی نیست در هر صورت. ولی معمولا راحت تر همین گزینه اول هست.
      برای اینکه خوب هم بیاد دستتون چه اتفاقی داره میوفته پیشنهاد میکنم فایل bat مربوط به یکی از مثالهای مثل mnist رو ببینید (https://github.com/Coderx7/caffe_win/blob/master/examples/mnist/train_lenet.bat )
      نحوه فراخونی caffe رو نشون میده.

  6. با سلام
    ضمن تشکر و سپاسگذاری بابت سایت مفید و راهنمایی های شما در اولین فرصت ممکن چه در سایت خودتون چه در سایت quara و ایمیلی
    سوالی که برای من پیش اومده اینکه برای اجرای Classification demo من یک جا خوندم باید نسخه BVLC caffe رو دانلود کرد؟ یا نه Caffe windows؟
    و اینکه من خواستم caffe.sln رو کامپایل کنم کلی ارور داد و در آخر کامپایل نشد(CommonSettings.props متناسب با کارم تغییر داده شد)

    ۱>LINK : fatal error LNK1181: cannot open input file ‘cudnn.lib’
    ۱>Done Building Project “D:\Deep learning\Caffe\caffe-windows\windows\caffe\caffe.vcxproj” (Build target(s)) — FAILED.
    Build FAILED.

    حتی به صورت جدا خواستم matcaffe رو build کنم متاسففانه باز با ارور مواجه شدم.

  7. سلام و عرض ادب
    متاسفانه کارت گرافیک من cudnn رو پشتیبانی نمیکنه؟
    مراحل نصب همانند حالتی است که پشتیبانی میکته هستش؟فقط تویcommand setting.promp قسمت مربوط بهcudnn را falseکنم؟مثل تنظیمات شما؟
    و اینه بعد از طی مراحاح باید برم Anconda دانلود کنم
    در اخر هم کامپایل کنم
    درسته؟
    ممنون

  8. سلام
    واقعا خسته نباشید مطالبتون فوق العاده اس از خدا میخوام بهترینها رو براتون رقم بزنه
    میخواستم یکم راجب OpencCL بگید منظورم اینه در قیاس با کارت گرافیک انویدیا و cudnn چه جوریه ؟کاراییش مثل همونه؟
    مورد دیگه که هست اینه که جواب یکی از دوستان گفتید “محیط ویژوال استودیو برای کد نویسی استفاده میشه . میتونید با استفاده از توابع caffe عمل ترینینگ و یا کلسیفیکیشن رو خودتون بنویسید و اجرا کنید.”
    کدنویسی تو محیط ویژوال در حد هون تعریف لایه هاس (که تا حالا توضیحاتشو دادید) یا باید نحوه عملکرد لایه رو خودمون کد بزنیم ؟ کدوم روش بهتره منظورم اینه نتیجه کار فرقی میکنه؟
    با تشکر از لطفتون

    1. سلام .
      اولا کامنت قبلی در مورد Lr_policy و type رو بخونید من یه اشتباه کرده بودم که الحمدالله متوجه شدم و توضیحات مورد نیاز رو دادم .
      دوما سعی کنید سوالها رو در بخش پرسش و پاسخ بپرسید که برای بقیه قابل استفاده باشه
      سوم کارایی OpenCL فعلا پایین تره و هنوز کار داره تا بخواد به خوبی و سرعت cuda و خصوصا cudnn برسه که اختصاصی برای این کار طراحی شده.
      بله شدن میشه فکر کنم یه نمونه کد سی++ رو تو بخش پرسش و پاسخ برای یکی از سوالها فرستاده باشم .
      برای پایتون هم اگر فرصت بکنم سعی میکنم یه آموزش کامل بزارم ولی زمانش مشخص نیست.
      ساده ترین شکل کار کردن همینی هست که گفته شده یعنی بدون نیاز به کد نویسی تعریف میکنید و تنظیمات رو لحاظ میکنید. با کد نویسی هم میتونید تعریف شبکه رو هم از طریق فایل بخونیدو هم خودتون با کد نویسی شبکه رو تعریف کنید و آموزش بدید .
      کد نویسی دست ادم رو خیلی بازتر میزاره قائدتا ولی سادگی کار برای شروع و اموزش دادن معمولی خب یه چیز دیگه اس.
      در نتیجه کار فرقی نداره اصلا.

  9. سلام روزتان بخیر
    مهندس یه سوال، قرار براین است که من بر تصاویر کار کنم.اما من تنها سه تصویر دارم.
    سوال من این هست که این امکان در caffe وجود دارد که من تصاویرورودی و داده train و داده تست را به صورت وکتور به caffe معرفی کنم و نه به صورت تصویر؟یعنی دقیقا ورودی های من دقیقایک ماتریس برداری باشه .یعنی من سه ماتریس داشته باشم که یکی برای ورودی ، دیگری برای داده train و یکی دیگر تست.
    یعنی نحوی ورودی من میخواهم مانند شبکه های عصبی مصنوعی باشه.

      1. ممنون
        یعنی این امکان وجود ندارد حتی من ازmatcaffe استفاده کنم ؟ یا متلب۲۰۱۶a?
        باید حتما از ابتدا cnn خودم کدشو بنویسم؟

        1. منظور این نبود که اصلا نمیشه! منظورم اینه که بدون کد نویسی (استفاده از API کفی ) نمیشه .
          در کفی کارها به دو صورت قابل انجام هست ۱٫توسط فایلهای اسکریپتی prototxt (که فایل پیکربندی و تنظیمات بهینه سازی انجام میشن) ۲٫توسط برنامه نویسی (سی++ یا پایتون یا متلب)
          نیازی به نوشتن CNN نیست.شما خودتون باید داده رو reshape کنید و با استفاده از توابعی که کفی بشما میده بعنوان ورودی به لایه کانولوشن و الخ بدید.

پاسخ دهید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *