الرؤية الحاسوبية2015متوسط12 دقيقة قراءة
U-Net: شبكات التفافية لتجزئة الصور الطبية الحيوية
U-Net: Convolutional Networks for Biomedical Image Segmentation
Ronneberger, O. · Fischer, P. · Brox, T. — MICCAI
المشكلة
في التصوير الطبي الحيوي لا يكفي أن تعرف «هل توجد خلية في الصورة؟» — المطلوب هو رسم حدود كل خلية بكسلاً ببكسل. حتى 2015 كان الحل السائد هو تمرير نافذة صغيرة على الصورة رقعةً بعد رقعة: تأخذ رقعة حول كل بكسل، تمرّرها في شبكة التفافية، وتأخذ التصنيف. ثلاث مشكلات جعلت هذا الأسلوب غير عملي: أولاً البطء الشديد، لأن كل بكسل يحتاج تمريرة أمامية كاملة مستقلة. ثانياً التكرار في الحسابات، لأن الرقع المتجاورة تتشارك معظم بكسلاتها ومع ذلك تُعاد فيها الحسابات من الصفر. ثالثاً المفاضلة بين السياق والدقة: الرقعة الصغيرة تعطيك موقعاً دقيقاً لكن بلا فهم لما حولها، والرقعة الكبيرة تعطيك سياقاً لكن تطمس الموقع. وفوق كل ذلك، البيانات الطبية المُعنوَنة نادرة جداً — قد لا يتوفر لدى الباحث سوى 30 صورة تدريب مشروحة.
الإسهام
شبكة U-Net: بنية متناظرة على شكل حرف U تتكوّن من مرمِّز وفاكّ ترميز. المرمِّز () يضغط الصورة تدريجياً عبر التفافات متكررة حتى يستخلص سمات عالية المستوى. فاكّ الترميز () يعيد بناء الصورة بدقتها الكاملة عبر . الابتكار الجوهري هو وصلات التخطّي التي تنقل خرائط السمات من كل مستوى في المرمِّز إلى المستوى المقابل في فاكّ الترميز، فتستعيد التفاصيل المكانية التي أضاعها التجميع. ومع تعزيز بيانات مكثّف — خصوصاً التشوهات المرنة — حققت U-Net أفضل نتائج التجزئة انطلاقاً من عدد ضئيل جداً من صور التدريب. كما صمّم الباحثون دالة فقد إنتروبيا تقاطعية موزونة مع خريطة أوزان حدودية خاصة تُجبر الشبكة على تعلّم حدود الخلايا حتى حين تتلامس.
الأثر
أصبحت U-Net البنية المرجعية لتجزئة الصور الطبية، ثم تجاوزت هذا المجال بمراحل. تبنّت Pix2Pix قالب المرمِّز-فاكّ الترميز مع وصلات التخطّي لترجمة الصور، واعتمده Stable Diffusion عموداً فقرياً لإزالة الضجيج في نماذج الانتشار الكامن، وأبقت عليه SegFormer ومجزّئات حديثة أخرى. الفكرة القائلة بأنك تحتاج فهماً شاملاً (من ) وتفاصيل مكانية دقيقة (من وصلات التخطّي) في الوقت نفسه صارت بديهية في مهام التنبؤ الكثيف. أكثر من 80,000 اقتباس أكاديمي تجعلها من أكثر الأوراق تأثيراً في تاريخ الرؤية الحاسوبية.
تخيّل رسّامة خرائط تريد رسم خريطة لمدينة. تصعد أولاً بمروحية لترى المخطط الكامل — الطرق الرئيسية والأحياء والأنهار — لكنها من ذلك الارتفاع لا تستطيع قراءة لافتات الشوارع. فتنزل حياً بحي، لكنها فقدت رؤية المخطط العام.
U-Net تفعل الأمرين معاً: تبتعد عبر لتفهم الصورة الكبيرة، ثم تقترب عبر لترسم حدوداً دقيقة. والحيلة الذكية هنا أن رسّامة الخرائط تلتقط صوراً للتفاصيل الأرضية عند كل ارتفاع قبل أن تصعد أعلى. وحين تنزل مجدداً تلصق كل صورة على الخريطة عند الارتفاع المطابق. فتحصل في النهاية على خريطة تجمع بين فهم المروحية ودقة الشارع.
تلك الصور هي . بدونها ستحمل الخريطة تصنيفات الأحياء الصحيحة لكن بحدود ضبابية خاطئة. أما معها، فكل غشاء خلوي وكل حافة مبنى يقع في مكانه الصحيح تماماً.
المشكلة: خرائط على مستوى البكسل من بيانات شحيحة
في التصوير الطبي الحيوي لا يكفي أن تسأل «هل في الصورة خلية؟» — المهمة هي : أن تحدّد لكل بكسل فئته، هل هو غشاء خلوي أم خلفية أم نواة.
حتى عام 2015 كان الأسلوب السائد هو الشبكة الالتفافية بالنافذة المنزلقة (Ciresan وآخرون): لكل بكسل تقتطع رقعة محورها ذلك البكسل، تمرّرها في الشبكة، وتأخذ التصنيف الناتج. ثلاث مشكلات جعلت هذا الأسلوب مكلفاً:
-
بطء شديد. كل بكسل يحتاج مستقلة. صورة بدقة 512×512 تعني 262,144 تمريرة.
-
حسابات مكررة. البكسلات المتجاورة تتشارك الجزء الأكبر من رقعتها، ورغم ذلك تُعاد من الصفر في كل مرة.
-
مفاضلة بين السياق والدقة. الرقعة الصغيرة تحدّد الموقع بدقة لكن بلا سياق محيط (هل هذه الحافة جزء من خلية أم مجرد خدش؟). والرقعة الكبيرة تضيف سياقاً لكن تطمس الموقع الدقيق.
في الوقت نفسه كان Long وآخرون قد قدّموا (FCN) التي تعالج الصورة دفعة واحدة. لكن مخرجاتها بعد التكبير كانت خشنة — تصيب المنطقة العامة لكن تلطّخ الحدود.
شكل الحرف U: انقباض ثم توسّع
بنية U-Net تتألف من ثلاثة أجزاء تشكّل معاً حرف U المميز:
المسار الانقباضي (المُرمِّز) يعمل كأي شبكة التفافية تصنيفية: كتل متتالية يتكوّن كل منها من التفافين 3×3 (يتبع كلاً منهما )، ثم تجميع بالقيمة القصوى 2×2 يقلّص الدقة المكانية للنصف. مع كل خطوة تصغير يتضاعف عدد : 64 ← 128 ← 256 ← 512 ← 1024. تخيّلها كمروحية تصعد تدريجياً — الصورة تصغر لكن الفهم يتعمّق.
عنق الزجاجة هو أعمق طبقة في الشبكة (1024 قناة عند أصغر دقة مكانية). هنا يبلغ أقصى اتساعه — الشبكة «ترى» أكبر قدر من السياق — لكن بأخشن دقة ممكنة. بمعنى آخر: هنا تُجاب «ما هذا الشيء؟» لكن تضيع «أين بالضبط؟».
المسار التوسعي (فاكّ الترميز) يعكس المرمِّز. كل خطوة تبدأ بـالتفاف معكوس 2×2 يضاعف الدقة المكانية وينصّف القنوات، ثم تُلحَق المرمِّز المقابلة عبر وصلة تخطّي، ثم يُطبَّق التفافان 3×3. الطبقة الأخيرة هي التفاف 1×1 يحوّل خريطة السمات ذات 64 قناة إلى عدد الفئات المطلوب.
وصلات التخطّي: الابتكار الجوهري
المعضلة الأساسية في التجزئة الدلالية هي أن فهم السياق يتطلب تصغير الصورة، بينما الدقة المكانية تتطلب الإبقاء على الدقة الكاملة. المُرمِّز يفهم ما الذي في الصورة عبر ضغطها، لكنه ينسى أين تقع الأشياء. فاكّ الترميز يحاول استعادة التفاصيل المكانية، لكن التكبير وحده أشبه بتكبير صورة مصغّرة — تحصل على الشكل العام لكن بلا حواف واضحة.
وصلات التخطّي في U-Net تحلّ هذه المعضلة بإلحاق خرائط سمات المرمِّز مباشرة بفاكّ الترميز عند كل مستوى دقة مطابق. في كل خطوة من فاكّ الترميز تتلقى الشبكة مصدرين:
-
من الأسفل (السمات العميقة بعد التكبير): ماذا تحتوي هذه المنطقة.
-
من اليسار (وصلة التخطّي): أين تقع الحدود بالضبط.
هذا الإلحاق يضاعف عدد القنوات، ثم تتولى الالتفافات اللاحقة تعلّم كيفية دمج «الماذا» مع «الأين». لاحظ أن العملية هنا ليست جمعاً حسابياً (كما في ResNet)، بل إلحاق — الشبكة تحتفظ بالسمات عالية الدقة الأصلية والسمات العميقة الغنية دلالياً جنباً إلى جنب، وتتعلم أفضل طريقة لتوحيدهما.
المسار الانقباضي: كيف يُلتقط السياق
كل مستوى في المُرمِّز يتبع النمط نفسه: التفافان 3×3 بدون ، يتبع كلاً منهما ReLU، ثم تجميع بالقيمة القصوى 2×2 بخطوة 2. في U-Net الأصلية لم يُستخدم أي حشو (التفافات صحيحة)، لذلك تتقلّص خريطة السمات قليلاً عند كل التفاف — وهذا هو السبب في قصّ خرائط سمات وصلة التخطّي قبل الإلحاق لتتوافق مع أبعاد فاكّ الترميز.
عند كل خطوة تجميع تتنصّف الدقة المكانية ويتضاعف عدد القنوات:
-
المستوى 1: 572×572 ← 568×568 ← 284×284، بـ64 قناة
-
المستوى 2: 284×284 ← 280×280 ← 140×140، بـ128 قناة
-
المستوى 3: 140×140 ← 136×136 ← 68×68، بـ256 قناة
-
المستوى 4: 68×68 ← 64×64 ← 32×32، بـ512 قناة
-
عنق الزجاجة: 32×32 ← 28×28، بـ1024 قناة
مضاعفة القنوات عند كل مستوى ليست عشوائية بل مقصودة: كلما تقلّصت الأبعاد المكانية عوّضت الشبكة ذلك بزيادة أنواع السمات القابلة للكشف. المستويات الأولى تكتشف الحواف والأنسجة البسيطة، والمستويات الأعمق تكتشف بنى كاملة كنوى الخلايا أو حدود الغدد.
المسار التوسعي: استعادة التفاصيل المكانية
كل مستوى في فاكّ الترميز يمرّ بثلاث مراحل: (1) يُطبَّق التفاف معكوس 2×2 يضاعف الدقة المكانية وينصّف القنوات، (2) تُستقبَل خريطة السمات المقصوصة من مستوى المُرمِّز المقابل عبر وصلة التخطّي وتُلحَق على محور القنوات، (3) يُشغَّل التفافان 3×3 (كل منهما يتبعه ReLU) على الحجم المُلحَق.
الالتفاف المعكوس (يُسمى أحياناً «» أو «الالتفاف التصاعدي») هو تكبير مُتعلَّم: بدلاً من استكمال بسيط (ثنائي الخطية أو أقرب جار)، تتعلم الشبكة الخاصة للتكبير. فكّر فيه كالتفاف يعمل بالاتجاه المعاكس — بدلاً من ضغط منطقة 2×2 إلى قيمة واحدة، يبسط قيمة واحدة إلى منطقة 2×2.
بعد آخر مستوى في فاكّ الترميز، يحوّل التفاف 1×1 المخرج ذا 64 قناة إلى عدد فئات التجزئة (مثلاً فئتان: خلية وخلفية). هذا ينتج خريطة احتمالات بدقة قريبة من دقة المدخل الأصلي — كل بكسل يحصل على تنبؤ بفئته.
دالة الفقد وترجيح الحدود
المعتاد يعامل كل بكسل بالتساوي، لكن في تجزئة الخلايا بعض البكسلات أهم بكثير من غيرها. الفجوات الضيقة بين الخلايا المتلامسة حرجة جداً — لأن الشبكة إذا أخطأت فيها تندمج خليتان منفصلتان في كتلة واحدة. لذلك صمّم Ronneberger وآخرون فقد إنتروبيا تقاطعية موزونة يركّز اهتماماً إضافياً على بكسلات الحدود.
تتكوّن من مركّبتين: الأولى تعوّض اختلال التوازن بين الفئات (بكسلات الخلفية أكثر بكثير من بكسلات الخلايا)، والثانية وزن حدودي يعتمد على المسافة:
تعزيز البيانات: كيف تكفي 30 صورة
دُرِّبت U-Net على 30 صورة فقط في تحدي ISBI لتجزئة الخلايا — وفازت. السلاح السري كان . فوق أساليب المعتادة (كالتدوير والقلب والإزاحة)، طبّق Ronneberger وآخرون حقول إزاحة عشوائية ناعمة على الصورة و معاً.
لماذا التشوهات المرنة بالذات؟ لأن الأنسجة الحيوية مرنة بطبيعتها — الخلايا تتمدد وتنضغط وتتشوّه في العيّنات الحقيقية. حين تولّد تشوهات عشوائية تحاكي هذا التنوّع الطبيعي، تتعلم الشبكة أنماط ثبات تطابق التوزيع الفعلي للبيانات. كان هذا أهم قرار تعزيز في الورقة — أساليب التعزيز المعتادة وحدها لم تكن كافية.
يُولَّد التشوه بأخذ عيّنات إزاحة عشوائية على شبكة خشنة 3×3، ثم استكمالها بالاستكمال التكعيبي لتشكيل حقل إزاحة ناعم على مستوى البكسل. تُشوَّه الصورة و بشكل متطابق.
إستراتيجية التبليط المتداخل: تجزئة صور بأي حجم
بما أن U-Net الأصلية تستخدم التفافات صحيحة (بدون حشو)، فإن خريطة التجزئة الناتجة أصغر من الصورة المُدخلة. ولتجزئة الصورة كاملة بلا انقطاع، ابتكر Ronneberger وآخرون : تُقسَّم الصورة إلى بلاطات متداخلة، ويُتنبَّأ بكل بلاطة على حدة، ثم تُجمَّع النتائج باستخدام المنطقة الصالحة (غير الحدودية) فقط من كل تنبؤ.
بالنسبة للبكسلات القريبة من حافة الصورة حيث تمتد البلاطة خارج حدودها، يُستكمَل المدخل عبر عند الحدود. أي أن الشبكة تستقبل دائماً بلاطة كاملة الحجم حتى عند حواف الصورة وزواياها.
هذه الإستراتيجية تجعل U-Net قابلة للتطبيق على صور بأي حجم — حتى شرائح الأنسجة المرضية ذات المليارات من البكسلات — لأن كل بلاطة تسع في ذاكرة المعالج الرسومي، والتداخل يضمن سلاسة الحدود بين البلاطات.
البنية في الكود
مبسَّط لإظهار الفكرة — ليس التنفيذ الحقيقي.
import torch
import torch.nn as nn
class DoubleConv(nn.Module):
"""التفافان 3×3، كل منهما يتبعه تسوية دُفعة + ReLU."""
def __init__(self, in_ch, out_ch):
super().__init__()
self.block = nn.Sequential(
nn.Conv2d(in_ch, out_ch, 3, padding=1), # U-Net الحديثة تستخدم حشواً
nn.BatchNorm2d(out_ch),
nn.ReLU(inplace=True),
nn.Conv2d(out_ch, out_ch, 3, padding=1),
nn.BatchNorm2d(out_ch),
nn.ReLU(inplace=True),
)
def forward(self, x):
return self.block(x)
class UNet(nn.Module):
def __init__(self, in_ch=1, out_ch=2):
super().__init__()
# المرمِّز (المسار الانقباضي)
self.enc1 = DoubleConv(in_ch, 64)
self.enc2 = DoubleConv(64, 128)
self.enc3 = DoubleConv(128, 256)
self.enc4 = DoubleConv(256, 512)
self.pool = nn.MaxPool2d(2) # ينصّف الأبعاد المكانية
# عنق الزجاجة
self.bottleneck = DoubleConv(512, 1024)
# فاكّ الترميز (المسار التوسعي)
self.up4 = nn.ConvTranspose2d(1024, 512, 2, stride=2)
self.dec4 = DoubleConv(1024, 512) # 512 مكبَّر + 512 وصلة = 1024 مدخل
self.up3 = nn.ConvTranspose2d(512, 256, 2, stride=2)
self.dec3 = DoubleConv(512, 256)
self.up2 = nn.ConvTranspose2d(256, 128, 2, stride=2)
self.dec2 = DoubleConv(256, 128)
self.up1 = nn.ConvTranspose2d(128, 64, 2, stride=2)
self.dec1 = DoubleConv(128, 64)
self.final = nn.Conv2d(64, out_ch, 1) # التفاف 1×1 ← خريطة فئات
def forward(self, x):
# المرمِّز
e1 = self.enc1(x) # 64 قناة
e2 = self.enc2(self.pool(e1)) # 128
e3 = self.enc3(self.pool(e2)) # 256
e4 = self.enc4(self.pool(e3)) # 512
# عنق الزجاجة
b = self.bottleneck(self.pool(e4)) # 1024
# فاكّ الترميز — تكبير، إلحاق وصلة التخطّي، التفاف
d4 = self.dec4(torch.cat([self.up4(b), e4], dim=1))
d3 = self.dec3(torch.cat([self.up3(d4), e3], dim=1))
d2 = self.dec2(torch.cat([self.up2(d3), e2], dim=1))
d1 = self.dec1(torch.cat([self.up1(d2), e1], dim=1))
return self.final(d1) # (B, عدد_الفئات, H, W)
# الإلحاق torch.cat([مكبَّر, وصلة_المرمِّز], dim=1)
# هو ابتكار U-Net بالكامل. كل شيء آخر هو شبكة التفافية معيارية.لماذا كانت مهمة
2015
U-Net — وصلات التخطّي تغيّر قواعد التجزئة
فاز Ronneberger وفريقه بتحدي ISBI لتجزئة الخلايا بـ30 صورة تدريب فقط، مثبتين أن قالب المرمِّز-فاكّ الترميز مع وصلات التخطّي يصلح للتنبؤ الكثيف.
2016
V-Net — نقل U-Net إلى الأحجام ثلاثية الأبعاد
وسّع Milletari وآخرون بنية U-Net لتعمل على بيانات طبية ثلاثية الأبعاد (كالتصوير المقطعي والرنين المغناطيسي)، وقدّموا دالة فقد Dice التي تحسّن مقياس تداخل التجزئة مباشرة.
2017
Pix2Pix — توظيف U-Net في ترجمة الصور
استخدم Isola وآخرون U-Net كمولّد داخل شبكة تنافسية شرطية لترجمة الصور — من رسومات إلى صور فوتوغرافية، ومن مشاهد نهارية إلى ليلية، ومن تصنيفات إلى واجهات مبانٍ.
2018
nnU-Net — نسخة ذاتية الضبط من U-Net
بنى Isensee وآخرون نظاماً مؤتمتاً يضبط المعاملات الفائقة لشبكة U-Net تلقائياً حسب كل مجموعة بيانات، وفاز بـ33 من أصل 53 تحدي تجزئة طبية.
2021
SegFormer — المُحوِّل يتبنّى نمط U
استبدل Xie وآخرون الالتفافات بمرمِّز محوِّل هرمي، لكنهم أبقوا على فاكّ ترميز متعدد المقاييس مع وصلات التخطّي — نمط U-Net باقٍ حتى في عصر الانتباه.
2022
Stable Diffusion — شبكة U-Net في قلب إزالة الضجيج
اعتمد Rombach وآخرون شبكة U-Net عموداً فقرياً لإزالة الضجيج في نماذج الانتشار الكامن، فأطلقوا ثورة توليد الصور من النصوص. أصبح شكل U محرّك الذكاء الاصطناعي التوليدي.
من أغشية الخلايا إلى Stable Diffusion، أثبت نمط U-Net أنه عابر للمجالات: اضغط لتفهم، وسّع لتُظهر، واربط الجانبين معاً. وصلات التخطّي فيه هي الامتداد المعماري لـ في ResNet — كلتاهما تضمنان أن المعلومات الدقيقة تصل سالمة رغم عمق الشبكة.
المرجعRonneberger, Fischer, Brox. U-Net: Convolutional Networks for Biomedical Image Segmentation. MICCAI, 2015.
مصطلحات هذه الورقة
- التجزئة الدلالية للصورةSemantic Segmentation
- الاتصال التجاوزيSkip Connection
- مرمِّز-فاكّ ترميزEncoder-Decoder
- التفاف معكوسTransposed Convolution
- عنق الزجاجةBottleneck
- التشوُّه المرنElastic Deformation
- إستراتيجية التبليط المتداخلOverlap-Tile Strategy
- المسار الانقباضيContracting Path
- المسار التوسعيExpanding Path
- خريطة الأوزانWeight Map