در این پست مقاله SqueezeNet را بررسی می‌کنیم و با ایده‌های مطرح شده در آن آشنا می‌شویم.

مقاله SqueezeNet یکی از اولین و قدیمی‌ترین مقالات موجود در زمینه فشرده‌سازی شبکه‌های عصبی عمیق می‌باشد که در سال ۲۰۱۶ توسط محققین دانشگاه برکلی و استنفورد منتشر شد. آن‌ها توانستند با ارائه یک معماری جدید به شبکه‌ای با دقت مشابه AlexNet دست یابند که تعداد پارامترهای آن ۵۰ برابر کمتر از AlexNet بود. این امر به واسطه استفاده از ماژولی به نام ماژول آتش و چند تکنیک دیگر محقق شد که در ادامه آن‌ها را بررسی خواهیم کرد.

استراتژی‌های کلی برای معماری شبکه

نویسندگان مقاله SqueezeNet از سه استراتژی کلی برای طراحی شبکه خود استفاده کردند:

  • استراتژی اول – جایگزینی فیلترهای 3×3 با فیلترهای 1×1: در این معماری سعی می‌شود تا بیشتر فیلترهای کانولوشنی با سایز 1×1 انتخاب شوند زیرا این فیلترها نسبت به فیلترهای 3×3، ۹ برابر پارامتر کمتری دارند.
  • استراتژی دوم – کاهش تعداد کانال‌های ورودی به فیلترهای 3×3: این کار با کمک لایه Squeeze در ماژول آتش انجام می‌شود که در ادامه آن را بررسی خواهیم کرد.
  • استراتژی سوم – رزولوشن نقشه‎های ویژگی دیرتر کاهش یابد تا لایه‌های آخر شبکه نیز به نقشه‌های ویژگی بزرگ دسترسی داشته باشند: این کار با قرار دادن لایه‌های Pooling در انتهای شبکه میسر می‌شود.

ماژول آتش (Fire Module)

ماژول آتش شامل یک لایه Squeeze (تنها دارای فیلترهای 1×1) و یک لایه Expand (دارای فیلترهای 1×1 و 3×3) است که خروجی لایه Squeeze به لایه Expand داده می‌شود. این ماژول در شکل ۱ نشان داده شده است.

Fire Module
شکل ۱: نحوه قرارگیری فیلترها در ماژول آتش. در این مثال s1×1=3 و e1×1=e3×3=4 قرار داد شده است.

ماژول آتش سه هایپرپارامتر دارد: s1×1 و e1×1 و e3×3. پارامتر s1×1 نشان‌دهده تعداد فیلترهای موجود در لایه Squeeze می‌باشد (که همگی 1×1 هستند)، e1×1 نشان‌دهنده تعداد فیلترهای 1×1 در لایه Expand و e3×3 نشان‌دهنده تعداد فیلترهای 3×3 در لایه Expand می‌باشند. در ماژول آتش همیشه مقدار s1×1 کمتر از (e1×1+e3×3) در نظر گرفته می‌شود. این کار باعث می‌شود تا تعداد کانال‌های ورودی به فیلترهای 3×3 محدود شود. این کار معادل استراتژی دوم می‌باشد که در بخش قبل به آن اشاره کردیم.

معماری SqueezeNet

معماری SqueezeNet در شکل ۲ نشان داده شده است. این معماری با یک لایه کانولوشن ساده شروع می‌شود و با ۸ ماژول آتش ادامه می‌یابد. در انتها نیز یک لایه کانولوشن ساده دیگر قرار دارد. به طور تدریجی تعداد فیلترها در ماژول‌های آتش افزایش می‌یابد. اگر دقت نمایید متوجه می‌شوید که لایه‌های Pooling بیشتر در سمت انتهای شبکه قرار گرفته‌اند که این کار با توجه به استراتژی سوم (توضیح داده شده در بالا) انجام شده است.

SqueezeNet architecture
شکل ۲: معماری SqueezeNet

همچنین همانطور که در شکل ۲ پیداست در معماری SqueezeNet از استفاده از لایه‌های تماما متصل (FC) پرهیز شده است که همین امر نیز باعث کاهش دوچندان تعداد پارامترها و کوچک شدن شبکه می‌شود.

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