EfficientNet V1,  EfficientNet  V2

مقدمهدر اين مطالعه مي­خواهيم به بررسي ايده و اهميت مقالهEfficientNet بپردازيم.بسياري از معماري هاي طراحي شده در راستاي استفاده از توان محاسباتي موجود به صورت بهينه مي باشند مانند MobileNet. حال مي‌خواهيم بدانيم اگر ميزان توان محاسباتي كاهش يا افزايش پيدا كند يا اگر بخواهيم يك شبكه زودتر آموزش داده شود، به چه طريق مي‌توان شبكه مورد نظر را scale كنيم.در معماري هاي طراحي شده در شبكه هاي كانولوشني، سه روش براي افزايش دقت استفاده مي­شود.اين سه روش شامل: افزايش عمق شبكه، ارتفاع شبكه و همچنين افزايش رزولوشن ورودي مي­باشد. كه افزايش هر كدامم از اين ويژگي­ها مي­تواند باعث بهبود عملكرد شبكه شود.در اين مقاله به بررسي رابطه اين سه ويژگي مي­پردازد و بديهي مي­باشد كه اين سه ويژگي با يكديگر ارتباط مستقيمي دارند، بدين صورت كه با افزايش رزولوشن، ويژگي بيشتري براي بررسي وجود دارد بنابراين شبكه مي­تواند عمق بيشتري داشته باشد.در واقع مي توان به effecientNet به عنوان يك نوع جستجو براي كارآمد ترين شبكه ي عصبي با توجه به ميزان توان محاسباتي نگاه كرد.در ادامه به بررسي ايده‌ي دو ورژن اين مقاله مي‌پردازيم.Efficient-Netدر اين قسمت به بررسي ايده مقالهي Efficient Net مي‌پردازيم. در اين مقاله ايده اي در ر‌ابطه با طراحي شبكه جديد مطرح نشده است. بلكه با توجه به اينكه دستگاه هاي مختلف از توان پردازشي متفاوتي بهره مند هستند مي‌خواهيم شيوه اي داشته باشيم كه با توجه به دستگاه در دسترس و توانايي پردازش موجود چگونه يك شبكه را Scale كنيم. همچنين اگر از نظر زماني، ميزان زمان لازم براي آموزش شبكه را در نظر بگيريم با scale down شبكه زود تر و با scale up شبكه به مدت طولاني تري نياز به آموزش دارد. به طور مثال اگر بخواهيم شبكه ي ما سريع‌تر آموزش ببيند و كمي كاهش دقت در نتايج شبكه مسئله ي خيلي مهمي نباشد ميتوان از اين روش استفاده نمود.بنابراين Efficient-net يك راهي براي به دست آوردن بهينه ترين ميزان براي scale up كردن با توجه به شرايط موجود مي باشد.شكل1 model scaling همان طور كه در شكل اول مي توان مشاهده نمود، با در نظر گرفتن يك baseline به صورت كلي سه روش براي scaling شبكه براي به دست آوردن دقت بهينه وجود دارد.سه روش براي scale up كردن يك شبكه ي كانوولوشني به صورت زير مي‌باشد:روش اول افزاش عمق: اين روش بيشترين استفاده را در معماري هاي موجود تا كنون داشته است. منظور از افزايش عمق، افزايش تعداد لايه هاي يك شبكه مي باشد.روش دوم افزايش عرض: از اين روش نسبت به عمق كمتر استفاده مي‌شود. منظور از عرض نيز مقدار كانال هاي يك شبكه مي ‌باشد.روش سوم افزايش resolution عكس ورودي: از اين روش نيز گاها در مقالات مشاهده شده كه استفاده شده است.در مقالات از يكي از اين سه روش براي scale كردن مدل استفاده ميشد.در اين مقاله يك روش مبتني بر افزايش عمق، عرض و resolution ورودي براي scale up كردن يك شبكه را بررسي مي نماييم كه در شكل 1 قسمت e قابل مشاهده است و آن زا compound scaling ناميده اند كه در ادامه به بررسي آن مي‌پردازيم.compound model scalingدر اكثر مقالات براي زماني كه مي خاهند مدل را بهبود ببخشند يك معماري جديد طراحي و معرفي مي كنند. اما در اين مقاله روشي معرفي شده است كه ابتدا يك مدل baseline در نظر گرفته و سعي مي كند با افزايش سه بعد طول، عرض و رزولوشن در مدل baseline بهبود ايجاد نمايد. مسئله كه وجود دارد براي پيدا كردن طول، عرض و رزولوشن مناسب فضايي كه بايد جستجو نماييم بسيار بزرگ ميشود بنابراين ما براي هر لايه در نظر ميگيريم كه به صورت يكنواخت با يك ضريب ثابت رشد كنند.همان طور كه در قسمت هاي قبي نيز اشاره شد بر اساس سه بعد طول، عرض و رزولوشن مي توان يك شبكه را scale كرد.يك از مشكلاتي كه scale up كردن شبكه مي تواند ايجاد كند، مشكل vanishing gradient شود كه با skip connection قابل حل مي باشد.شكل 2: ميزان دقت بر اساس افزايش هر يك از ابعاد عرض، طول و رزولوشن به صورت جداگانههمان طو كه در شكل دوم مشاهده مي‌شود، افزايش هر يك از اين ابعاد باعث افزايش دقت مي‌شود، اما با رسيدن به دقت 80% دقت اشباع شده و افزايشي صورت نمي‌گيرد.بنابراين سوالي كه پيش مي‌آيد اين است كه آيا مي‌توانبا تركيب اين سه بعد براي scale-up كردن به افزايش دقت بيشتري دست پيدا نمود؟شكل 3: ميزان افزايش دقت از تركيب دو بعد عمق و رزولوشنمشاهده‌اي كه صورت گرفته است و نتيجه ي آن را ميتوان در شكل سوم مشاهده نمود، نشان مي‌دهد كه مي‌توان با تركيب اين ابعاد با يكديگر به ميزان دقت بيشتري دست پيدا نمود. به عبارت ديگر مي‌توان بيان نمود كه اين ابعاد ازيكديگر مستقل ينستند. به طور مثال اگر عرض شبكه را افزايش دهيم، پيكسل هاي بيشتري داريم كه اطلاعات بيشتري به ما مي‌دهند بنابراين مي‌توانيم رزولوشن بالاتري نيزز داشته باشيم. يا از زاويه اي ديگر اگر بخواهيم بررسي كنيم مي‌توانيم بگوييم هر چقدر عمق بيشتر باشد، receptive field بزرگ تر مي شود بدين معنا كه ويژگي سطح بالاتري براي پردازش داريم.پس در ادامه به معرفي متد معرفي شده در اين مقاله به نام compound scaling method مي پردازيم. در واقع اين مسدله به صورت يك مسدله بهينه سازي ميباشد، كه به صورت فرمول زير مي‌توان مشاهده نمود بدين صورت كه آلفا، بتا و گاما به صورت ثابت در نظر گرفته ميشوند كه با استفاده از يك grid search مي توان آن هارا به دست آورد. و اگر بتوانيم هزينه‌ محاسباتي را افزايش دهيم با يك ضريب ثابت، مقدار phi را تغيير مي دهيم.Depth: d = alpha^phiWidth: w = betha^phiResolution: r = gama^phis.t. alpha.betha^2.gama^2 = 2alpha>=1, betha>=1, gamma>=1في نيز مي تواند تسط user بسته به مقدار منابع محاسباتي كه در اختيار، تغيير داده شود.ميزان تواان محاسباتي با FLOPS سنجيده مي شود كه در واقع نشان دهنده‌ي ميزان تعداد عمليات محاسباتي شناور كه در يك ثانيه قابل انجام است، مي باشد. محدوديت alpha.betha^2.gama^2 = 2 به اين معني مي‌باشد كه ميزان FLOPS ها به ميزان 2^phi مي‌توواند افزايش يابد.معماريمعماري كه به عنوان baseline در نظر گرفته مي شود نيز از اهميت بسياري برخوردار است، زيرا efficient netمعماري baseline را تغييري نمي دهد و صرفا آن را scale مي‌كند. و علاوه بر آن به طور مثال اگر ‌Alexnet به عنوان ‌baseline استفاده شود، و بعد از تغيير scale با استفاده از عرض، طول و رزولوشن روي همان Alexnet مقايسه مي‌شود و ب شبكه‌ي ديگري به طور مثال مانند REsnet مقايسه نمي شود. پس بنابراين داشتن يك baseline مناسب نيز از اهميت ويژه اي برخوردار است.efficientNet داراي هفت ورژن مختلف مي باشد. كه ابتدا B0 را با استفاده از روش و معماري معرفي شده به دست مي آورده و آن را به عنوان baseline در نظر گرفته و سپس با دو گام ورژن هايي ديگر (B1-B7) را به دست مي آوريم.گام ها به صورت زير مي باشند:گام اولابتدا phi را ثابت و برابر يك در نظر ميگيريم، فرض مي كنيم كه دو برابر توان محاسباتي در اختيار داريم و با استفاده از يك grid search ، alpha ، beta و gamma مناسب را پيدا ميكنيم. با در نظر گرفتن شرط ذكر شده alpha.betha^2.gama^2 = 2 .گام دومدر اين قسمت آلفا، بتا و گاما را ثابت در نظر گرفته و با در نظر گرفتن phi هاي مختلف baseline يعني B0 را scale up مي نماييم.سوالي كه در اين جا مي توان مطرح نمود اين است كه آيا مي توان بدون در نظر گرفتن baseline و بر روي شبكه هاي بزرگ تر آلفا، بتا و گاماي مناسب را جستجو نمود؟امكان جستجو جود دارد، ولي از لحاظ محاسباتي بسيار گران مي شود. و اين مسدله با به دست آوردن مقاذ=دير مناسب بر روي baseline و سپس scale كردن آن به مدل هاي بزرگ تر به دست آمده است.نتايجهمان طور كه در شكل 4 مي‌توان مشاهده نمود، دقت efficientnet نسبت به بقيه مدل ها بيشتر مي باشد.شكل 4: دقت EfficientNetسوالي كه پيش مي‌آيد اين است كه آيا ممكن است نتايج به دست آمده صرفا به خاطر معماري نمي باشد، آيا EfficientNet مدل هارا بهبود بخشيده است؟نويسندگان مقاله روش خود را بر روي چندين مدل پياده سازي كرده و نتايج مشابهي به دست آورده اند كه مي توان در شكل 5 مشاهده نمود. با توجه به اينكه پس از اعمال روش efficient net بر روي مدل هاي مختلف، دقت بهبود پيدا كرده است، بنابراين مي توان اين روش وافزايش دقت توسط آن را به تمامي مدل ها تعميم داد.شكل 5: ورژن هاي مختلف EfficientNetو همان طور كه در شكل 5 مي‌تان مشاهده نمود ‌EfficientNet در تمام ورژن‌هاي خود از مدل هاي ديگر داراي دقت بيشتر، مقدار پارامتر كمتر و FLOPS كمتري مي باشد. EfficientNet B7 به دقت 84.3% كه state-of-the-art مي باشد رسيده است و8.4x كوچك تر و 6.1x سريع تر مي باشد.براي اينكه به صورت تصويري نيز بتوانيم نتياج را مشاهده كنيم، مي توان در شكل 6 Activaton Map را مشاهده نمود. كه همان طور كه مشخص مي باشد با اضافه نمودن هر كدام از ويژگي هاي عمق، عرض و رزولوشن نتايج تا حدودي بهبود يافته اند، و زماني كه از روش معرفي شده در اين مقاله compound scaling براي scale كردن شبكه استفاده شده است مشاهده مي شود كه نسبت به سه روش قبلي بهبود چشم گيري ايجاد شده است.شكل 6: Activation Map EfficientNetنكات تكميليدر اين مقاله از يك سري ايده براي طراحي شبكه آن استفاده شده است كه در ادامه از اين شيوه هارا نام مي بريم:building block is mobile inverted bottleneck MBConvsqueeze-and-excitation optimizationstochastic depthEfﬁcientNetV2: Smaller Models and Faster Trainingدر كارهاي اخير با توجه به اينكه تعداد پارامترهاي مدل بيشتر و ميزان FLOPS در آن ها بيشتر است نسبت به EfficientNet با اين حال سرعت آموزش بهتري دارند. بنابراين در اين مقاله، به بررسي علل كند بودن و ايرادات EfficientNet1 پرداختن و چند ايده براي تسريع و بهبود پارامتر شيوه ي ارائه شده در مقاله مطرح شده است، مانند Fused-MBConv ، Progressive Learning ، بهينه كردن سرعت يادگيري و راندمان پارامتر ها كه در ادامه به بررسي آن ها مي‌پردازيم.بررسي EfficientNet1با بررسي EfficientNet1 به اين مسئله پي بردند كه:آموزش دادن شبكه كه ورودي آن ها عكس هايي با سايز بزرگ مي باشند كند است.در لايه هاي اوليه ‌depth-wise convolution كند مي باشد.در همه ي قسمت هاي شبكه Scale up كردن به صورت يكسان بهينه‌ي كامل نمي باشد.براي حل اين مشكلات راه كار هايي در اين مقاله ارائه شده است بدين صورت كه به صورت همزمان دقت، سرعت و سايز پارامتر هارا بهينه نمايد. در اين مقاله سعي شده است سرعت يادگيري و سايز پارامتر به صورت صريح در objective بهينه شوند.كند بودن آموزش شبكه با عكس هاي سايز بزرگهر چقدر عكس هاي ورودي سايز بزرگ تري داشته باشند، batch size قابل استفاده كوچك تر مي باشد. بنابرابن سرعت آموزش نيز كاهش مي يابد. در ادامه به بررسي شيوه اي براي حل اين مشكل مي‌پردازيم كه به صورت تصاعدي، سايز عكس ورودي را افزايش و ار روش هايي مانند data augmentation و dropout نيز استفاده مي‌شود.كند بودن depth-wise convolutionدر لايه هاي اولبراي بهبود سرعت مي توان از Fused-MBConv به جاي MBConv استفاده نمود. همان طور كه در شكل 7 مي توان مشاهده كرد، به جاي depthwise conv 3x3 و expantion conv 1x1x يك conv 3x3 جايگزين شده است.متد Fused-mbconvمي تواند باعث افزايش سرعت شود ولي از طرفي باعث افزايش Flops و پارامتر ها مي‌شود كه باعث كاهش سرعت مي‌شود. پس بنابراين براي به دست آوردن جواب بهينه به دنبال بهترين تركيب دو ماژول MBConv و Fused-MBConvd هستيم.شكل 7: بررسي Mbcov و Fused-MBConvاگر همه ي لايه هاي شبكه را Scale up كنيم بهينه ي كامل نمي باشد بنابراين به صورت non-uniform شبكه را scale مي‌كنيم كه بهينه تر است. بدين صورت كه به قسمت هاي انتهايي لايه‌هاي بيشتري اضافه مي‌شود.معماري و متد جستجوهدف اين مقاله به صورت همزمان بهينه كردن دقت و سايز پارامتر‌ ها مي‌باشد.و از EfficientNetبه عنوان backbone استفاده شده است. از متد NAS براي جستجو استفاده نمده اين ك سايز فضاي جستجو را با حذف نمودن قسمت هايي كه ضروري نبودند كاهش داده‌ايم. چون فضاي حالت كوچك است ميتوان از reinforcement learning يا جستجوي رندم استفاده نمود. پاداش جستجو به صورت زير مي باشد:A . S^w . p^vP = parameter sizeS = time stepW = -0.07V = -0.05به دليل اينكه w و v منفي مي باشند براي به دست آوردن پاداش بهينه، مي‌بايست مقادير S و P به سمت صفر ميل كنند. در واقع هر جقدر كوچك تر باشند بهتر است. به عنوان يك هيوريستيك نيز براي قسمت هاي انتهايي لايه‌هاي بيشتري اضافه مي كنيم.progressive Learningفرضيه موجود در اين مقاله به اين صورت بود كه، براي جلوگيري از overfittingعكس هاي كوچك تر regularization كم تر و عكس هايي كه بزرگ تر هستند نياز به regularization بيشتري دارند.شكل 8: دقت به ازاي سايز مدل و ميران regularizationهمان طور كه در شكل 8 مي توان مشاهده نمود، با افزايش سايز مدل، هر چقدر ميزان regularization بيشتر باشد، دق به دست آمده نيز بيشتر است.بنابراين شيوه ي استفاده شده بدين صورت مي باشد كه به ازاي تعداد گام هايي كه داريم، سايز عكس و شدت regularization درهر گام افزايش پيدا مي‌كند.انواع regularizationDropout:رگولاريزيشن در سطح شبكه هست كه به صورت رندم يك كانال را حذف مي كندRandaugment: آگمنتيشن رندم بر روي يك عكس، با ميزان مشخصmixup:در اين نوع از augmentation، دو جت عكس داريم با استفاده از يك ضريب به تركيب اين دوعكس و تركيب ليبل آن‌ها با همان ضريب مي‌پردازيم.زمان پيش بيني مدل مي‌بايست درصد تركيب دو عكس را پيش بيني نمايد.نتايجدقت EfficentNet2 تقريبا برابر با EfficientNet1B7 مي‌باشد با اين تفاوت كه با استفاده از منبع محاسباتي يكسان 11x سريع تر است.