الرؤية الحاسوبية2017متوسط11 دقيقة قراءة
تحويل الصور دون أزواج متطابقة باستخدام شبكات تنافسية ذات اتساق دوري
Unpaired Image-to-Image Translation Using Cycle-Consistent Adversarial Networks
Zhu, J.-Y. · Park, T. · Isola, P. · Efros, A. A. — ICCV
المشكلة
تحويل الصور من مجال إلى آخر — كتحويل رسم تخطيطي إلى صورة فوتوغرافية، أو مشهد نهاري إلى ليلي، أو حصان إلى حمار وحشي — كان ممكناً بفضل Pix2Pix، لكن بشرط واحد: أن تملك أزواجاً متطابقة من الصور، أي المشهد نفسه مُصوَّراً في المجالين. المشكلة أن الحصول على أزواج كهذه مكلف جداً أو مستحيل في معظم التطبيقات. وإذا حاولت شبكة تنافسية بدون هذه الأزواج، فإنها قد تتعلم توليد صور حمير وحشية مقنعة بصرياً لكنها تتجاهل الحصان المُدخَل تماماً — تُخرج أي حمار وحشي عشوائي بدلاً من تحويل الصورة المعطاة لها.
الإسهام
الفكرة الأساسية في CycleGAN هي خسارة : تُدرَّب شبكتان توليديتان (G: X→Y وF: Y→X) مع مُميِّزَين في الوقت نفسه، ويُفرض شرط أن F(G(x)) ≈ x وG(F(y)) ≈ y. هذا القيد — قيد الذهاب والإياب — يُغني تماماً عن البيانات المُزدوَجة، لأنه يُجبر المولِّدين على الاحتفاظ ببنية كافية تسمح بإعادة البناء، فيتعلمان تحويلات ذات معنى بدلاً من تحويلات عشوائية. وحين يُضاف إلى ذلك خسارة تنافسية تدفع المخرجات لتبدو كأنها عيّنات حقيقية، يصبح CycleGAN قادراً على إنتاج تحويلات عالية الجودة بين عشرات المجالات دون أي أزواج متطابقة.
الأثر
كسر CycleGAN الحاجز الرئيسي أمام تحويل الصور بين المجالات: الحاجة إلى أزواج متطابقة. بفضله أصبح ممكناً نقل الأسلوب الفني، وتحويل الفصول، وتوليد صور طبية اصطناعية، ونقل بيئات المحاكاة إلى الواقع في تطبيقات الروبوتات — أي سيناريو يتوفر فيه مجالان دون أمثلة متطابقة بالبكسل. امتد تأثير مبدأ الاتساق الدوري لاحقاً ليشمل ترجمة الفيديو والتوليد ثلاثي الأبعاد ونقل الأسلوب النصّي والتكيّف الصوتي، وأصبح من أكثر الأفكار استشهاداً وتطبيقاً في مجال النماذج التوليدية.
تخيّل أن لديك مترجمَين: الأول يترجم من الإنجليزية إلى الفرنسية، والثاني يترجم بالاتجاه المعاكس. المشكلة أنه لا يوجد قاموس ثنائي اللغة بين أيديهم — كل ما يملكانه كومة كتب إنجليزية وكومة أخرى فرنسية، ولا رابط بينهما.
كيف تتحقق من أنهما يترجمان بأمانة؟ أعطِ المترجم الأول جملة إنجليزية ليكتبها بالفرنسية، ثم مرّرها للمترجم الثاني ليعيدها إلى الإنجليزية. إذا عادت الجملة مطابقة للأصل، فهذا دليل على أن كليهما يؤدي عمله بإتقان. اختبار الذهاب والإياب هذا هو بالضبط ما يفعله CycleGAN — لكن مع الصور بدلاً من الجمل.
عنق الزجاجة: البيانات المُزدوَجة نادرة
أثبت Pix2Pix أن الشرطية قادرة على تحويل الصور بنتائج مُبهرة — من حواف إلى أحذية، ومن تسميات إلى واجهات مبانٍ، ومن مشاهد نهارية إلى ليلية — لكن بشرط أساسي: أن تتوفر أمثلة مُزدوَجة في التدريب، أي أن يكون المشهد نفسه مُصوَّراً في كلا المجالين، بكسلاً ببكسل.
في الواقع، هذا الشرط نادراً ما يتحقق. لا يمكنك تصوير المنظر الطبيعي ذاته في الصيف والشتاء من الزاوية نفسها بالضبط. لا يمكنك أن تطلب من مونيه أن يرسم صورة فوتوغرافية بعينها. ولا يمكنك تصوير العضو الطبي ذاته بتقنيتَي تصوير مختلفتين في اللحظة ذاتها. بدون هذه الأزواج المتطابقة، يعجز Pix2Pix عن العمل.
الفكرة: مولِّدان وقاعدة الرحلة ذهاباً وإياباً
يعمل CycleGAN بأربع شبكات تتدرّب معاً في الوقت نفسه:
- G يحوّل من المجال X إلى المجال Y (مثلاً: حصان ← حمار وحشي)
- المُولِّد F يحوّل بالاتجاه المعاكس من Y إلى X (حمار وحشي ← حصان)
- يحكم إن كانت الصورة تبدو حقيقية من المجال Y أم لا
- المُميِّز يحكم إن كانت الصورة تبدو حقيقية من المجال X أم لا
التنافسية تدفع كلا المولِّدين لإنتاج صور واقعية. لكن الواقعية وحدها لا تكفي — لأن المُولِّد G مثلاً يمكنه أن يحوّل كل حصان إلى الحمار الوحشي الجميل ذاته متجاهلاً الصورة الأصلية تماماً. هنا يأتي دور قيد الاتساق الدوري: إذا حوّلت صورة من مجال إلى آخر ثم أعدتها، يجب أن تعود كما كانت. هذا القيد هو ما يُجبر المولِّدين على الحفاظ على المحتوى — الوضعية والتكوين والخلفية — مع تغيير الأسلوب أو المجال فقط.
الخسارة التنافسية: جعل المخرجات تبدو حقيقية
في جوهره، يبني CycleGAN على اللعبة التنافسية المعروفة من GAN الأصلية: المُولِّد يحاول خداع المُميِّز، والمُميِّز يحاول كشف التزييف. الأمر أشبه بمزوِّر لوحات ومُفتّش فنّي — كل منهما يتحسّن حتى يعجز المفتّش عن التفريق بين الأصل والتقليد.
الفرق أن CycleGAN يُجري هذه اللعبة مرتين — مرة لكل اتجاه تحويل. المُميِّز يتفحّص الصور التي يولّدها G ليحكم هل هي حقيقية أم مُصطنَعة، والمُميِّز يفعل الشيء ذاته مع مخرجات F. وقد استخدمت الورقة خسارة المربعات الصغرى (LSGAN) بدلاً من الخسارة اللوغاريتمية الأصلية، لأنها تُعطي تدريباً أكثر استقراراً ونتائج أوضح.
الاتساق الدوري: ضمان الرحلة ذهاباً وإياباً
وحدها لا تضمن أن G(x) يحتفظ بمحتوى الصورة الأصلية x. فهناك عدد لا نهائي من التحويلات الممكنة من الخيول إلى الحمير الوحشية التي تُنتج صوراً واقعية، لكن معظمها يتجاهل وضعية الحصان ومشهده تماماً. لحلّ هذه المشكلة وتضييق الهائل للتحويلات الممكنة، يُقدّم CycleGAN خسارة الاتساق الدوري.
الفكرة بسيطة: لو ترجمت جملة من الإنجليزية إلى الفرنسية ثم أعدتها إلى الإنجليزية، يُفترض أن تعود كما كانت. الشيء ذاته ينطبق على الصور:
- الدورة الأمامية:
- الدورة العكسية:
هذا القيد يفرض ضغطاً بنيوياً قوياً على المولِّدين. لم يعد بإمكانهما اختلاق مخرجات من فراغ — يجب أن يحتفظا بمعلومات كافية تسمح لـالمولِّد العكسي بإعادة بناء المُدخل الأصلي. وضعية الحصان، وتكوين المشهد، وبنية الخلفية — كل ذلك يجب أن ينجو من رحلة الذهاب والإياب.
خسارة الهوية: الحفاظ على الألوان حين ينبغي ذلك
ثمة مشكلة دقيقة لا يكفي الاتساق الدوري وحده لمنعها. لنفترض أن المُولِّد G مهمته تحويل لوحات مونيه إلى صور فوتوغرافية. إذا أعطيته صورة فوتوغرافية بالفعل، فقد يُجري عليها تعديلات لا داعي لها — كتغيير الألوان أو إضافة تشوّهات. خسارة الهوية تعالج هذا بأسلوب ناعم من : حين يستقبل G صورة تنتمي فعلاً إلى المجال المستهدف Y، يُفترض أن يُخرجها كما هي دون تعديل.
تظهر أهمية هذه الخسارة بوضوح في المهام التي تتطلب الحفاظ على الألوان، كنقل الأسلوب بين اللوحات والصور. بدونها قد يتعلم المُولِّد تبديلاً عشوائياً للألوان يُرضي شرط الاتساق الدوري رياضياً لكنه يبدو مصطنعاً بصرياً.
دالة الهدف الكاملة: ثلاث خسائر وهدف واحد
تتكوّن الكاملة لـ CycleGAN من ثلاثة مكونات، لكلٍّ منها دور محدد:
- الخسارة التنافسية: تدفع المخرجات لتبدو واقعية (نسختان، واحدة لكل اتجاه تحويل)
- خسارة الاتساق الدوري: تحفظ المحتوى خلال رحلة الذهاب والإياب
- خسارة الهوية: تمنع التعديلات غير الضرورية حين يكون المُدخل ينتمي أصلاً إلى المجال المستهدف
يتحكّم في ثقل الاتساق الدوري نسبةً إلى الخسارة التنافسية. الورقة تستخدم ، وهذا يعني أن يُعطي أولوية كبيرة للحفاظ على المحتوى — يفضّل أن يُنتج صورة أقل واقعية بقليل على أن يفقد بنية الصورة الأصلية.
البنية المعمارية: ماذا بداخل G وD؟
يعتمد المُولِّد على بنية و مع في المنتصف، وهي مستوحاة من أبحاث نقل الأسلوب العصبي. يمكنك تخيّله كخط معالجة من ثلاث مراحل:
- المُرمِّز: يخفض أبعاد الصورة عبر — كأنك تبتعد عن الصورة لترى تكوينها العام
- الكتل المتبقّية: 6 أو 9 كتل تعمل على لتغيير المحتوى — كأنك تعيد رسم التفاصيل على نسخة مصغّرة
- فاكّ الترميز: يُعيد رفع الأبعاد إلى الحجم الكامل بالتفاف معكوس — كأنك تقترب من اللوحة لترى ما رسمته
نقطة مهمة هنا: تُستخدم تسوية المثيل (Instance Normalization) بدلاً من ، لأنها تُسوّي كل صورة على حدة. هذا بالغ الأهمية في مهام نقل الأسلوب، لأن الأسلوب البصري يتجلّى عادةً في الإحصاءات الخاصة بكل صورة منفردة.
أما المُميِّز فهو من نوع PatchGAN — البنية نفسها التي استخدمها Pix2Pix. الفكرة أنه بدلاً من تصنيف الصورة بأكملها على أنها حقيقية أو مزيّفة، يفحص رقعاً متداخلة بقياس 70×70 بشكل مستقل. هذا يجعله يركّز على واقعية النسيج المحلي — وهو تقسيم عمل ذكي، لأن الاتساق الدوري يتكفّل أصلاً بالحفاظ على البنية الكلّية للصورة.
حِيَل التدريب المهمة
هناك عدة خيارات عملية تجعل CycleGAN يعمل فعلاً على أرض الواقع:
- مخزن الإعادة المؤقت (): بدلاً من أن يرى المُميِّز فقط آخر الصور التي أنتجها المُولِّد، يحتفظ CycleGAN بمخزن مؤقت يضم 50 صورة مُولَّدة سابقاً ويُحدّثه تدريجياً. الفائدة أن المُميِّز يرى تنوعاً أوسع من المُزيَّفات، فلا يُفرط في التكيّف مع أسلوب المُولِّد في لحظة بعينها.
- جدولة : يبدأ التدريب بمعدّل 0.0002 خلال أول 100 ، ثم يتناقص خطياً إلى الصفر على مدى الـ100 حقبة التالية. هذا التخفيض التدريجي يساعد النموذج على الاستقرار والوصول إلى توازن مناسب.
- خسارة المربعات الصغرى: LSGAN بدلاً من الأصلية — وجد المؤلفون أنها تُعطي تدريباً أكثر استقراراً ونتائج أقل ضبابية.
- بدون تقطيع عشوائي أو انعكاس في بعض المهام — لأن استراتيجية تعتمد على طبيعة المجال.
الفكرة في شيفرة برمجية
مبسَّط لإظهار الفكرة — ليس التنفيذ الحقيقي.
import torch
import torch.nn as nn
def cycle_gan_step(G, F, D_X, D_Y, real_x, real_y, lambda_cyc=10.0):
"""خطوة تدريب واحدة لـ CycleGAN — المنطق الكامل."""
mse = nn.MSELoss() # LSGAN تستخدم MSE بدلاً من BCE
l1 = nn.L1Loss()
# ── الترجمات الأمامية ────────────────────────────────
fake_y = G(real_x) # حصان → حمار وحشي
fake_x = F(real_y) # حمار وحشي → حصان
# ── إعادة البناء الدوري (رحلة الذهاب والإياب) ────────
recon_x = F(fake_y) # حصان → حمار وحشي → حصان (يجب ≈ real_x)
recon_y = G(fake_x) # حمار وحشي → حصان → حمار وحشي (يجب ≈ real_y)
# ── الخسائر التنافسية (اجعل المزيف يبدو حقيقياً) ────
loss_G_adv = mse(D_Y(fake_y), torch.ones_like(D_Y(fake_y)))
loss_F_adv = mse(D_X(fake_x), torch.ones_like(D_X(fake_x)))
# ── خسائر الاتساق الدوري (احفظ المحتوى) ─────────────
loss_cycle = l1(recon_x, real_x) + l1(recon_y, real_y)
# ── خسائر الهوية (اختيارية، تحافظ على الألوان) ──────
loss_id = l1(G(real_y), real_y) + l1(F(real_x), real_x)
# ── الخسارة الكلية للمولِّدين ────────────────────────
loss_gen = loss_G_adv + loss_F_adv \
+ lambda_cyc * loss_cycle \
+ 0.5 * lambda_cyc * loss_id
return loss_gen
# هذا جوهر CycleGAN. لا حاجة لبيانات مُزدوَجة —
# فقط مجموعتان منفصلتان من صور كل مجال.النتائج: ما يستطيع CycleGAN فعله
تستعرض الورقة قدرات CycleGAN على طيف واسع من المهام، وجميعها دون أي بيانات تدريب مُزدوَجة:
- حصان ↔ حمار وحشي: المثال الأشهر — يتغيّر نسيج الحيوان بينما تبقى الوضعية والخلفية والإضاءة كما هي
- مونيه/فان جوخ/سيزان ↔ صورة فوتوغرافية: تحويل صورة عادية إلى لوحة بأسلوب فنان معين
- صيف ↔ شتاء: تبديل فصل المشهد الطبيعي
- تفاح ↔ برتقال: استبدال نسيج الفاكهة
- صورة فوتوغرافية ↔ خريطة: التحويل بين صور الأقمار الاصطناعية والخرائط
يتألّق CycleGAN حين يقتصر التحويل على تغييرات في النسيج والأسلوب دون تغيير الشكل الهندسي. أما إذا تطلّب الأمر تحويلات هندسية — كتحويل كلب إلى قطة مثلاً — فإنه يعاني، لأن ذلك يستلزم تغيير الشكل لا النسيج فقط، وعادةً ما يكتفي المُولِّد بأقل تغيير نسيجي ممكن بدلاً من إجراء تحويل حقيقي.
القيود: أين يفشل CycleGAN
ومن القيود الأخرى التي ينبغي الانتباه لها:
- في اتجاه واحد: قد يهيمن أحد المولِّدين بينما يُنتج الآخر مخرجات ضبابية أو مكرّرة
- تفاصيل مُختلَقة: قد يرسم المُولِّد خطوط حمار وحشي على الطريق أو السماء وليس على الحيوان فقط — ببساطة لأنه لا يفهم المحتوى الدلالي للصورة
- عدم استقرار التدريب: كحال جميع الشبكات التنافسية التوليدية، قد يتذبذب CycleGAN أو يتشتّت إذا لم تُضبط المُعاملات الفائقة بعناية
- حدود : الورقة الأصلية تعمل بدقة 256×256، والانتقال إلى دقّات أعلى يتطلب سعة أكبر ووقت تدريب أطول
لماذا كان مؤثراً
2014
GAN الأصلية
قدّم غودفيلو فكرة اللعبة التنافسية بين المولِّد والمُميِّز. النتائج كانت صوراً صغيرة وضبابية، لكن الإطار النظري الذي أسّسه غيَّر المجال بأكمله.
2016
Pix2Pix — الترجمة بأزواج متطابقة
أثبت إيزولا وزملاؤه أن الشبكات التنافسية الشرطية قادرة على تحويل الصور حين تتوفر أزواج متطابقة. نتائج مُبهرة، لكن اشتراط الأزواج كان عائقاً أمام كثير من التطبيقات.
2017
CycleGAN — الترجمة بدون أزواج
تخلّص جو وزملاؤه من شرط الأزواج عبر مبدأ الاتساق الدوري. خيول تتحوّل إلى حمير وحشية، وصور تصير لوحات بأسلوب مونيه، وصيف يُصبح شتاءً — كل ذلك دون أزواج متطابقة.
2018
StarGAN — متعدد المجالات
مولِّد واحد يُجري التحويل بين مجالات متعددة في آنٍ واحد (شاب ↔ كبير، ذكر ↔ أنثى، غاضب ↔ سعيد)، في توسعة مباشرة لفكرة CycleGAN.
2019
CUT — الترجمة التبايُنية بدون أزواج
يستغني عن الاتساق الدوري ويستبدله بخسارة تبايُنية تحفظ المحتوى من خلال تطابقات على مستوى الرقع، ويكتفي بمولِّد واحد بدلاً من اثنين.
2020
تبنّي التصوير الطبي
انتشر استخدام CycleGAN في مجتمع التصوير الطبي لتحويل الصور بين أجهزة التصوير المختلفة (CT ↔ MRI)، ولتعزيز بيانات الأمراض النادرة، ولنقل المحاكاة إلى الواقع في الروبوتات الجراحية.
أثبت مبدأ الاتساق الدوري مرونة مدهشة تتجاوز عالم الصور بكثير. طُبّق على نقل أسلوب النصوص (رسمي ↔ عامّي)، وتكييف مجالات الموسيقى، وتحويل لكنات الكلام، وتحويل الأشكال ثلاثية الأبعاد. الدرس الجوهري هنا واضح: حين تفرض أن يكون التحويل قابلاً للعكس، فإنك تُقيّد الحلول الممكنة بحيث لا يبقى إلا التحويلات ذات المعنى. هذا المبدأ أصبح اليوم أداة أساسية في عُدّة كل من يعمل في مجال .
المرجعZhu, Park, Isola, Efros. Unpaired Image-to-Image Translation Using Cycle-Consistent Adversarial Networks. ICCV, 2017.
مصطلحات هذه الورقة
- الشبكات التوليدية التنافسيةGenerative Adversarial Network (GAN)
- الاتساق الدوريCycle-Consistency
- نقل المجالDomain Transfer
- الموّلد التخليقيGenerator
- الـمُميِّز الحاكمDiscriminator
- الخسارة التنافسيةAdversarial Loss
- غير مُزدوَجUnpaired
- ترجمة الصورImage-to-Image Translation
- الكتلة المتبقّيةResidual Block
- تسوية النسخةInstance Normalization