به بخش پرسش و پاسخ یادگیری عمیق خوش آمدید,
این نسخه آزمایشی سایت است.
لطفا به نکات زیر توجه کنید:
  • برای ارتباط با مدیران میتوانید از صفحه مدیران اقدام کنید.
  • سوال و جواب ها باید به زبان فارسی باشند. استفاده از زبان انگلیسی یا فینگلیش برای پاسخ دادن مجاز نیست.
  • لطفا بعد از پرسش سوال لینک سوال خود را در گرو تلگرام (Iran Deep Learning Group) معرفی کنید تا سریعتر به جواب برسید. برای دسترسی به آخرین لینک از منابع یادگیری استفاده کنید
  • لطفا بجای عکس از متن استفاده کنید. اگر متون طولانی هستند از سایت pastebin.com برای اپلود استفاده کرده و لینک حاصل را در سوال خود قرار دهید. برای قرار دادن تصویر ، از بخش ارسال تصویر ادیتور سایت استفاده کنید.
  • بعد از دریافت پاسخ، بهترین پاسخ را از طریق کلیک بر روی علامت تیک انتخاب کنید
  • اگر با خطا و یا مشکلی مواجه شدید از بخش تماس با ما در انتهای صفحه و یا ایمیل Coderx7@gmail.com موضوع را اطلاع دهید.

با تشکر

دسته بندی ها

0 امتیاز

سلام عرض ادب
دوستانی که با معماری های عمیق تسلط کامل دارند یا حتی خودشون طراح معماری هستند لطف کنند در مورد این سوال پاسخ دهند
وقتی در computer vision دو خاصیت scale invariant and aspect ration invariant مهم هستند چرا در ترین شبکه معمولا از square size image استفاده میکنند بنظر من خوب نیست از multi-scale image برای ترین شبکه استفاده بشه تا شبکه نسبت به scale invariant روباست (Robust) باشه ؟؟ و همچنین برای اینکه ویژگی aspect ratio رو حفظ کنیم چرا تصاویری که بصورت 1:1 نیستند (full image) را به فرم square (1:1) ریشیپ (reshape) میکنیم بعدش شبکه رو ترین میکنیم؟ چرا از حالت عادی خودشون (full image) استفاده نمیکنیم ؟

توسط (389 امتیاز)

1 پاسخ

0 امتیاز
 
بهترین پاسخ

سلام
اتفاقا معمولا این اتفاق نمی افته، یعنی سعی میشه نسبت ابعاد یا aspect ratio حفظ بشه و به خاطر تغییر اندازه distortion توی تصویر به وجود نیاد
اگه در بعضی جاها می بینید مثلا از سایزهای مربعی مثل 224 در 224 استفاده شده، معمولا اینطوری نیست که تمامی تصاویر ورودی به این ابعاد تغییر اندازه پیدا کنند و اندازه تصویر از این ابعاد بزرگتره و تصویر 224x224 یا از مرکز تصویر crop میشه یا به صورت رندوم از جاهای مختلف تصویر بدست میاد
مقالات مرتبط با imageNet رو بخونید خیلی از این روشها استفاده شده
توی مثال دیگه، pascal voc رو در نظر بگیرید یا ms coco، توی این دیتاستها، برای اینکه سایز تصاویر معمولا بزرگه، برای اینکه حجم محاسبات رو مدیریت کنن، معمولا یکی از اضلاع تصویر(مثلا ضلع کوچیکتر) رو به یه اندازه ثابت تغییر میدن، مثلا همون 224، و ضلع دیگه رو به اندازه ای تغییر می دن که aspect ratio حفظ بشه
یکی از مهمترین دلیلهایی هم که از اندازه کامل تصاویر استفاده نمیشه، به علت حجم محاسباتیه و از طرف دیگه برای بعضی از مسائل، یه تصویر بزرگ مثل در حد full hd می تونه به کلی تصویر 224x224 تقسیم بشه که حجم دیتاست رو بزرگتر میکنه و نتیجه بهتری میشه گرفت.

در مورد multi-scale هم حرف شما درسته و به خصوص توی یکسال اخیر خیلی ایده چندتا scale و pyramid و این چیزا توی بورس بود. برای مثال بعضیها تصویر رو توی scaleهای 1 و 1.5 و 2 , ... به شبکه میدن و در نهایت جوابها رو ترکیب می کنن.
برای نمونه و ایده‌های پیشرفته تر در این زمینه(، این مقاله ها در حوزه semantic می تونه مفید باشه:

Attention to Scale: Scale-aware Semantic Image Segmentation

https://arxiv.org/pdf/1511.03339

G-FRNet: Gated Feedback Refinement Network for Dense Image Labeling

http://www.cs.umanitoba.ca/~ywang/papers/cvpr17.pdf

توسط (1.6k امتیاز)
انتخاب شده توسط
یه سوال:
وقتی که از اسکیل های 1.5 و 2 و.... برای شبکه میدن قطعا سایز تصویر بزرگتر میشه برای این هم از crop استفاده میکنند ؟ این اسکیل ها  برای تصویر اورجینال میزنند یا اینکه برای تصاویر crop شده ها؟
و اینکه خود فریم ورک ها قابلیت این رو دارند که از برای تصاویر اورجینال crop تولید کنند ؟ یا اینکه با یک ابزار دیگه ابتدا crop ها تولید میشوند و سپس به شبکه fed میشوند ؟ اگه در حین آموزش خود فریم ورک ها crop تولید میکنند اونوقت ram کامپیوتر اینجا بیشتر بدردمون میخوره درسته ؟
راه کارهای دادن تصویر با سایز اصلی
بستگی به مساله داره، ممکنه شبکه شما fcn باشه، در نتیجه نیازی به crop کردن نیست، ولی خروجی بزرگتری هم بهتون می ده که وقتی می خواید با خروجی های بقیه scale ها ترکیبش کنید، نیازه تا کارهایی شبیه resize انجام بدید
در بقیه موارد اگه شبکه مثالا برای classification ساخته شده و سایز مهم باشه، بله، باید بعد از scale کردن، قسمتهای مورد نظر رو crop کرد
در مورد اینکه scale روی تصویر اصلی اعمال بشه یا crop ها، بسته به پیاده سازی داره و می تونه هر دو نوعش باشه.
خوده فریم ورکها هم معمولا توابع مرتبط با crop دارند که می تونید ازش استفاده کنید، برای مثال tf، تابع random_crop هم داره. اما توی مراحل آموزش تا جایی که خوده من کار کردم، معمولا تابع تولید کننده batch رو خودمون نوشتیم چون ساده بوده و این کارا مثل random cropping و بقیه پردازشها هم اونجا انجام میشه (البته میشه توی دل شبکه هم به کار برد، یعنی روی feature map ها یا ...)
توی keras هم برای این موضوع یه سری کارا توی ImageDataGenerator انجام شده:
https://github.com/fchollet/keras/issues/3338
بله اگه حین آموزش داده‌ها تولید بشن، مسلما ram مهم میشه تا اینکه اول دیتاها تولید و روی دیسک ذخیره بشن و بعدش توی آموزش لود بشن
البته اگه خیلی دیتاها زیاد باشه میشه از دیسک یه batch لود کرد و از روی این batch یه سری mini batch تولید کرد
...