U-Net
معمارية المشفر-المفكك بوصلات التخطي التي أصبحت معياراً في تقسيم الصور الطبية.
البنية
- مسار التقليص: كتل من التفافين 3×3 مع ReLU ثم Max Pooling، ويتضاعف عدد القنوات مع كل مستوى.
- عنق الزجاجة: أعمق تمثيل وأصغر دقة مكانية.
- مسار التوسيع: تكبير ثم دمج مع خرائط المستوى المقابل من المشفر (وصلة التخطي) ثم التفافان.
- الطبقة الأخيرة: التفاف 1×1 يعطي قناة لكل فئة.
تطبيق مختصر في PyTorch
import torch, torch.nn as nn
def block(cin, cout):
return nn.Sequential(
nn.Conv2d(cin, cout, 3, padding=1), nn.BatchNorm2d(cout), nn.ReLU(inplace=True),
nn.Conv2d(cout, cout, 3, padding=1), nn.BatchNorm2d(cout), nn.ReLU(inplace=True))
class UNet(nn.Module):
def __init__(self, in_ch=1, n_classes=1, base=32):
super().__init__()
self.e1, self.e2, self.e3 = block(in_ch, base), block(base, base*2), block(base*2, base*4)
self.pool = nn.MaxPool2d(2)
self.mid = block(base*4, base*8)
self.u3, self.d3 = nn.ConvTranspose2d(base*8, base*4, 2, 2), block(base*8, base*4)
self.u2, self.d2 = nn.ConvTranspose2d(base*4, base*2, 2, 2), block(base*4, base*2)
self.u1, self.d1 = nn.ConvTranspose2d(base*2, base, 2, 2), block(base*2, base)
self.out = nn.Conv2d(base, n_classes, 1)
def forward(self, x):
e1 = self.e1(x); e2 = self.e2(self.pool(e1)); e3 = self.e3(self.pool(e2))
m = self.mid(self.pool(e3))
d3 = self.d3(torch.cat([self.u3(m), e3], 1))
d2 = self.d2(torch.cat([self.u2(d3), e2], 1))
d1 = self.d1(torch.cat([self.u1(d2), e1], 1))
return self.out(d1) # logits
print(UNet()(torch.randn(2, 1, 128, 128)).shape) # (2, 1, 128, 128)التدريب
def dice_loss(logits, target, eps=1e-6):
p = torch.sigmoid(logits)
inter = (p * target).sum(dim=(2, 3))
return 1 - ((2 * inter + eps) / (p.sum(dim=(2, 3)) + target.sum(dim=(2, 3)) + eps)).mean()
bce = nn.BCEWithLogitsLoss()
loss_fn = lambda lo, t: bce(lo, t) + dice_loss(lo, t)الامتدادات
- 3D U-Net: لأحجام CT وMRI.
- Attention U-Net وUNet++: تحسينات على وصلات التخطي.
- nnU-Net: يضبط المعالجة والمعمارية والتدريب تلقائياً، ويُعد خط أساس قوياً جداً في مسابقات التقسيم الطبي.
- MONAI: إطار مفتوح مبني على PyTorch لتطبيقات الذكاء الاصطناعي الطبي.
مصطلحات الدرس
- nnU-Net no-new-Net
- إطار يضبط تلقائياً المعالجة المسبقة ومعمارية U-Net والتدريب وفق خصائص مجموعة البيانات.
- الالتفاف المنقول Transposed Convolution
- عملية تكبير قابلة للتعلم تزيد الأبعاد المكانية لخريطة السمات.
- وصلة التخطي Skip Connection
- وصلة تنقل خرائط السمات من طبقة في المشفر إلى الطبقة المقابلة في المفكك لاستعادة التفاصيل المكانية.
الملخص
قدّم Ronneberger وزملاؤه U-Net عام 2015 لتقسيم الصور الطبية الحيوية. تتكون من مسار تقليص (مشفر) يلتقط السياق، ومسار توسيع (مفكك) يستعيد الدقة المكانية، ووصلات تخطي تنقل خرائط السمات عالية الدقة من المشفر إلى المفكك. تعمل جيداً مع بيانات تدريب محدودة بمساعدة زيادة البيانات، وتُدرب غالباً بخسارة Dice أو مزيج Dice وCross-Entropy. لها امتدادات ثلاثية الأبعاد، ويوفر إطار nnU-Net ضبطاً آلياً لها.
أسئلة مراجعة
-
ما دور وصلات التخطي في U-Net؟
نقل التفاصيل المكانية الدقيقة من المشفر إلى المفكك، لأن التقليص يفقد معلومات الموقع الدقيقة اللازمة لحدود دقيقة.
-
لماذا تُستخدم خسارة Dice كثيراً مع U-Net في الصور الطبية؟
لأن منطقة الآفة صغيرة غالباً مقارنة بالخلفية، وDice أقل تأثراً بهذا عدم التوازن من Cross-Entropy وحدها.
المصادر والمراجع
إكمال الدرس
أكملت كل دروس المسار! يمكنك الآن طلب شهادة إكمال المسار.
اطلب الشهادة