Post Top Ad

Your Ad Spot

الأربعاء، 26 يونيو 2019

Style Transfer Black and White image to RGB (Project No (2) )

كيف ستكون الاهرامات بقلم دافنشي ؟

السؤال داه كان بداية صناعة حاجة عظيمة في ال Deep Learning وهي ال Style Transefer وهو عبارة عن اننا ناخد صورتين وندمجهم مع بعض ناخد محتوي الصورة الاولي و ال style بتاع الصورة التانية ونطلع لوحة فنية بتدمج الحاضر بالماضي بالمستقبل .

ال Paper الي هنشتغل عليها


مبدأيا احنا هنستخدم حاجة اسمها VGG16 ودا عبارة عن Pretrained Model هنستخدم ك Feature Extractor ودورها في الموضوع انها بتاخد من الصورة ال Representation لل Style - Content عن طريق تجميعا لاكبر عدد من ال Feature

الخطوة الأولي :
احنا قلنا بنستخدم VGG ك Features Extractor بس مقلناش ازاي ال VGG بداخلها Layers كتير جدا فيه منها بيعمل Representaion لل style وفيه منها بيعمل Representaion لل Content طيب وداه معناه ايه ؟

- افتكر معايا كداه احنا ليه كنا بنزود Layer لما كنا بنعمل CNN كنا بنزودها لاننا كان هدفنا الاساسي أننا نطلع ب Features اكتر تخلي ال Model قادر انه يتعلم اكتر صح كداه فا فيه بعض ال Layers بتوضح خصائص ال Content بتاع الصورة ذات نفسه وفيه Layers تانية بتوضح ال style بتاع الصورة ايوة يعني ايه ال style بتاعها ؟
يعني مثلا توزيع الألوان في الصورة , تكرار الخطوط والحواف , الاضاءة وتشتتها كل التفاصيل دي هتكون style .

- لو بصينا في ال Result بتاع ال paper هنلاقي انهم بيقولو أنهم قدرو يعرفو انهو Layer بالظبط مسؤلة عن ال content وهي : conv4 2’
اما ال Layers دي (‘conv1 1’, ‘conv2 1’, ‘conv3 1’, ‘conv4 1’ and ‘conv5 1’)
دول كانو مسؤلين عن ال style.

فكدا احنا هنشغل For Loop علي كل ال Layers الي عندنا لو الصورة content ناخد الcontent features بتاعتها ولو الصورة style هناخد ال style features بتاعها ( فيما بعد ) ولكن حاليا احنا بنجمع كل ال Feautres بالعنوان بتاعها.


الخطوة التانية :-
طيب بعد ما قدرنا اننا نجمع كل ال Feautres بتاعتنا هتكون عاملة ازاي؟
لو نراجع علي ال CNN فهنلاقي ان ال OUTPUT بتاع كل CONV عبارة عن :

`batch_size`, A depth, `D` and some height and width (`H, `W`)

صح كداه طيب فيه حاجة اسمها Gram Function

- سيبك بقي من ال Batch size دلوقتي عندنا Depth,Width,height
- هنضرب ال Width*Height فكدا عملنا Flatted لكل spatial dimensions حلو جدا
- الخطوة التاهنضرب ال reshaped tensor الي طلعناه في بعد ما ضربنا ال width في ال height وهنضربه في مقلوبه وبكدا نكون حسبنا ال Gram Function


الخطوة الثالثة :-

دلوقتي هنحط كل حاجة :

- الخطوة الاولي هناخد ال Featuers من الصورتين(content-style)

- الخطوة الثانية هنحسب ال Style grams لكل style layer

- من الطبيعي ان ال loss function بتاعتنا تتأكد من ان ال output image تحمل اكبر قدر من ال content واكبر قدر من ال image فهتكون حاجة ممتازة اننا نبدأ بنسخة من صورة ال content كأنها Target value

* كل Layer في ال Style ليها weight معين علشان كداه هما اقترحو ان أول 2 Layers يكونو ليهم وزن اعلي مقارنة بالباقي عشان ال style يندمج بشكل أفضل.

*عندنا معطي الأول اسمه ألفا a والثاني b بيتا
دايما ال a بتعتبر عن ال content وال b بتعبر عن ال style



- الخطوة الجاية احنا للأسف معندناش حاجة اسمها epoch ولكن عندنا step هما رجحو ان اقل حاجة 2000 step علشان نحصل علي نتائج ايجابية الي حد ما طيب العملية بتقوم ازاي.

الاول هندخل داخل ال 2000 step بداخل كل step هنحسب ال content loss والي هتكون معادلته :
content_loss = (Target Feature of content layer - content Feature of content layer) **2

وثانيا هناخد ال style image بدورنا هنمشي علي كل ال layers الي فيها باستخدام LOOP : - هناخد ال ال target features of this layer
- هنحسب الGram function of target features of this layer
- هنحسب ال shape of target features of this layer
- هنحسب ال style grams of style features of this layer

وبعدين هيكون عندنا ال layer_style_loss ودا معادلته هتكون كالتالي :

layer_style_loss = style_weights[this layer] * torch.mean((target_gram(of this layer) - style_gram(of tih layer ))**2)

وبعد كداه نقوم بجمع كل ال layer_style_loss في حاجة اسمها style_loss ولكن تزكر قسمه الloss علي ال features shape


الحطوة الاخيرة :


    total_loss = content_weight * content_loss + style_weight * style_loss

content_weight= alpha (a)
Style_weights = beta (b)

وبعد كداه هنروح رايحين نعمل Backward بواسطة ال Loss function الي معانا والي هتخلينا ناخد step في ال optmizer بتاعنا علشان نعمل update لل weights بتاعتنا وبالتالي الصورة بتاعتنا تاخد نمط الصورة الثانية ونمط الصورة الأولي.



وهسيبكم مع حبة صور لحسي الفني المبهج أتمني تستمتعوا .
تصدقوا بعلمكم لعله يشفع لكم يوم القيامة .

- اي سؤال اتمني تسيبه في الكومنتات.
- اخر خطوة تم اختصارها نظرا لاننا مش هنعيد شرح الشبكات العصبية تاني ANN.
- الكود هتلاقوه مرفق : هنا.
- المقالة دي ممتازة اتمني تقروها هتفهمو أكتر للناس الي بتهتم بالتفاصيل شبهي : 
-   المقالة


ودي كانت بعض نتائج الشغل بتاعنا :






وكمان مننساش اننا ممكن نستخدم نفس التكتيك في اننا نحول الصور من BW الي صور ألوان يمكن يكون فيها بعض الاخطاء بس ممكن نشتغل عليها في المستقبل القريب





ليست هناك تعليقات:

إرسال تعليق

Post Top Ad

Your Ad Spot

Datalizer