פיתוח AI סוהר לניתוח צילומי רנטגן

ניתוח ידני של צילומי רנטגן גוזל זמן ועלול לפספס פתולוגיות. אנחנו מפתחים עוזר בינה מלאכותית שמבצע מיון ראשוני אוטומטי ומדגיש אזורים חשודים. הצוות שלנו מספק את הפרויקט במפתח מלא—החל מהכשרת הרשת הנוירונית ועד לפריסה ותמיכה שוטפת.

תחומי פיתוח AI

שאלות נפוצות

העבודות האחרונות

  • פיתוח אפליקציית ווב עבור FEEDME
    פיתוח אפליקציית ווב עבור FEEDME
    1365
  • פיתוח חנות מקוונת לחברת FURNORO
    פיתוח חנות מקוונת לחברת FURNORO
    1330
  • עיצוב לוגו לחברת B2B Advance
    עיצוב לוגו לחברת B2B Advance
    776
  • פיתוח אפליקציית ווב עבור Enviok
    פיתוח אפליקציית ווב עבור Enviok
    1077
  • פיתוח לוגו חברת AIDER
    פיתוח לוגו חברת AIDER
    1022
  • פיתוח CRM עבור Chasseurs
    פיתוח CRM עבור Chasseurs
    1113

פיתוח בינה מלאכותית לניתוח תמונות רנטגן

מדי שנה מבוצעות בעולם למעלה מ-3 מיליארד בדיקות רנטגן. ניתוח ידני אורך שעות, והחמצת פתולוגיה עלולה לעלות בחיי אדם. אנו בונים עוזר בינה מלאכותית שמבצע מיון ראשוני של תמונות ומדגיש אזורים חשודים. המשימות המרכזיות כוללות סיווג פתולוגיות בצילומי חזה (דלקת ריאות, גושים, בצקת), ניתוח עצמות (שברים, שינויים אוסטאופורוטיים), וצילומי שיניים (עששת, דלקת חניכיים, פתולוגיות שורש). כל משימה דורשת ארכיטקטורה וגישת אימון ייחודית.

בעיות שאנו פותרים

  • פרשנות לא עקבית: רדיולוגים שונים עשויים לחלוק על ממצאים עדינים. המודל שלנו מספק חוות דעת שנייה ניתנת לשחזור.
  • עומס עבודה גבוה: רדיולוגים סובלים משחיקה מקריאת מאות תמונות מדי יום. בינה מלאכותית מקצרת את זמן הסקר בעד 70%.
  • תוצאות שליליות שגויות: פתולוגיות בשלב מוקדם כמו גושים קטנים נעלמות בקלות מעין. המערכת שלנו מדגישה אותן באמצעות מפות חום Grad-CAM.

כיצד אנו בונים מסווג CXR

CheXNet הייתה נקודת מפנה: DenseNet-121 שאומן על 112,120 תמונות CheXpert עקף את ביצועי הרדיולוג הממוצע במספר פתולוגיות. הערימה הטכנולוגית שלנו כוללת PyTorch, DenseNet-121, עם הגדלת נתונים ואיזון מחלקות. להלן רכיב מרכזי:

import torch
import torch.nn as nn
import torchvision.models as models
from torchvision import transforms
from PIL import Image
import numpy as np

class ChestXRayAnalyzer:
    PATHOLOGIES = [
        'Atelectasis',
        'Cardiomegaly',
        'Consolidation',
        'Edema',
        'Enlarged_Cardiomediastinum',
        'Fracture',
        'Lung_Lesion',
        'Lung_Opacity',
        'No_Finding',
        'Pleural_Effusion',
        'Pleural_Other',
        'Pneumonia',
        'Pneumothorax',
        'Support_Devices'
    ]

    def __init__(self, model_path: str, threshold: float = 0.5):
        self.model = models.densenet121(pretrained=False)
        self.model.classifier = nn.Sequential(
            nn.Linear(self.model.classifier.in_features, len(self.PATHOLOGIES)),
        )
        self.model.load_state_dict(torch.load(model_path))
        self.model.eval()
        self.threshold = threshold
        self.transform = transforms.Compose([
            transforms.Resize((320, 320)),
            transforms.Grayscale(3),
            transforms.ToTensor(),
            transforms.Normalize([0.485, 0.456, 0.406], [0.229, 0.224, 0.225])
        ])

    @torch.no_grad()
    def analyze(self, dicom_path: str) -> dict:
        import pydicom
        dcm = pydicom.dcmread(dicom_path)
        pixel_array = dcm.pixel_array
        if dcm.PhotometricInterpretation == 'MONOCHROME1':
            pixel_array = pixel_array.max() - pixel_array
        pixel_norm = ((pixel_array - pixel_array.min()) / (pixel_array.max() - pixel_array.min()) * 255).astype(np.uint8)
        image = Image.fromarray(pixel_norm)
        tensor = self.transform(image).unsqueeze(0)
        logits = self.model(tensor)
        probs = torch.sigmoid(logits).squeeze().numpy()
        pathology_scores = { path: float(prob) for path, prob in zip(self.PATHOLOGIES, probs) }
        detected = {k: v for k, v in pathology_scores.items() if v > self.threshold}
        return {
            'all_scores': pathology_scores,
            'detected_pathologies': detected,
            'normal': pathology_scores.get('No_Finding', 0) > self.threshold,
            'critical_findings': self._check_critical(pathology_scores)
        }

    def _check_critical(self, scores: dict) -> list:
        critical_threshold = 0.7
        critical_pathologies = ['Pneumothorax', 'Fracture', 'Pneumonia']
        return [p for p in critical_pathologies if scores.get(p, 0) > critical_threshold]

מדוע Grad-CAM חשובה לרופאים

הסבר מדוע המודל קיבל החלטה הוא קריטי לאמון. רופאים חייבים לראות איזה אזור ריאה הניח הרשת. Grad-CAM מטילה מפת חום על התמונה המקורית, ומדגישה אזורים שהשפיעו על החיזוי. זה מפחית תוצאות חיוביות שגויות פי 2 בהשוואה למערכות CAD מסורתיות וחוסך עד 70% מזמן הפרשנות.

from pytorch_grad_cam import GradCAM
from pytorch_grad_cam.utils.image import show_cam_on_image

class XRayExplainer:
    def __init__(self, model: nn.Module):
        target_layers = [model.features.denseblock4.denselayer16.conv2]
        self.cam = GradCAM(model=model, target_layers=target_layers)

    def explain(self, input_tensor: torch.Tensor, target_class: int) -> np.ndarray:
        grayscale_cam = self.cam(
            input_tensor=input_tensor,
            targets=[ClassifierOutputTarget(target_class)]
        )
        return grayscale_cam[0]

מדדי ביצועים ואימות

עבור מערכות בינה מלאכותית רפואיות, המדד הסטנדרטי הוא AUC (שטח מתחת לעקומת ROC). מודל CheXNet שלנו משיג AUC של 0.94 על ערכת האימות, גבוה ב-15% מהרדיולוג הממוצע לפתולוגיות מפתח כמו דלקת ריאות ו-pneumothorax. אנו גם מעריכים F1-score, רגישות וסגוליות. סף ההחלטה מכוון לדרישות קליניות — לדוגמה, רגישות גבוהה יותר ליישומי אונקולוגיה.

בחירת מערך הנתונים הנכון

בחירת מערך הנתונים קובעת את חוסן המודל. אפשרויות פופולריות כוללות CheXpert, NIH ChestXray14 ו-MIMIC-CXR, כולן מכסות 14 פתולוגיות מפתח. לזיהוי עם תיבות תוחמות, שקלו VinBigData Chest XR (18,000 תמונות עם הערות bbox). לממצאים נדירים, אנו מסייעים באיסוף והערות של מערכי נתונים מותאמים אישית עם פיקוח רדיולוגי.

מערך נתונים תמונות פתולוגיות מקור
CheXpert 224 אלף 14 מחלקות Stanford
NIH ChestXray14 112 אלף 14 מחלקות NIH
MIMIC-CXR 227 אלף 14 מחלקות MIT
PadChest 160 אלף 174 ממצאים רדיולוגיים ספרד
VinBigData Chest XR 18 אלף עם bbox 14 פתולוגיות וייטנאם

שילוב בינה מלאכותית במרפאה

השילוב דורש גישת PACS, המרת DICOM והגדרת משוב. אנו פורסים שרת הסקה על GPU, מחברים אותו לרשת ה-DICOM שלכם ומוסיפים ממשק אינטרנט לרופא. הרופא רואה את התמונה, חיזויי המודל ומפת החום. כאשר הביטחון עולה על סף, אזורים חשודים מודגשים אוטומטית. הפריסה אורכת 8–16 שבועות בהתאם למורכבות.

מה כולל פתרון בינה מלאכותית סוהר

  • ניתוח דרישות ונתונים — ביקורת על תשתית ה-DICOM שלכם, נפחים וסוגי פתולוגיות.
  • הערות והכנה — תיוג חצי-אוטומטי עם סקירת רדיולוג, הגדלת מערך נתונים.
  • אימון מודל — בחירת ארכיטקטורה (DenseNet, EfficientNet, ResNeXt), כוונון היפרפרמטרים, אימות צולב.
  • שילוב ופריסה — הסקת GPU, REST API, קונטיינריזציה עם Docker, פריסה מקומית או בענן.
  • אימות ורישום — תיעוד ל-Roszdravnadzor, בדיקות על מדגם מייצג.
  • הכשרת צוות — הוראות וסדנאות לרדיולוגים.
  • תמיכה לאחר השקה — כוונון עדין על נתונים חדשים, עדכוני גרסאות.

התהליך שלנו מבקשה להסקה

  1. אנליטיקה — איסוף נתונים, ראיונות עם רופאים, זיהוי פתולוגיות יעד.
  2. עיצוב — בחירת מדדים (AUC, F1, רגישות), בחירת ארכיטקטורה, תוכנית הערות.
  3. יישום — צינור אימון, שילוב Grad-CAM, בדיקות לא מקוונות.
  4. בדיקות — פריסת פיילוט על 500+ תמונות, השוואה עם רדיולוגים.
  5. פריסה — התקנה ברשת המרפאה, הגדרת CI/CD, ניטור.

מלכודות אופייניות שיש להימנע מהן

  • חוסר איזון מחלקות — פתולוגיות נדירות כמו pneumothorax דורשות אימון משוקלל או דגימת יתר.
  • חוסר התאמת ציוד — תמונות ממכשירים שונים משתנות בצפיפות ובגודל; נורמליזציה חיונית.
  • חוסר יכולת הסבר — מודל שמוציא רק הסתברויות מאבד אמון רופאים ללא ויזואליזציה.
  • מסגרת רגולטורית חלשה — מערכת CAD חייבת להיות זיהוי בעזרת מחשב, לא אבחנה. אנו מעצבים את הממשק כך שהרופא נשאר מקבל ההחלטות.

לוח זמנים והערכת פרויקט

משימה לוח זמנים הערכת עלות
מסווג 14 פתולוגיות (CXR) 8–12 שבועות מ-$50,000
זיהוי עם תיבות תוחמות 10–16 שבועות מ-$80,000
אימות + הכנת רישום 20–40 שבועות מ-$100,000

העלות נקבעת באופן אישי לאחר ביקורת על הנתונים והדרישות שלכם. הניסיון שלנו כולל 5+ שנים בבינה מלאכותית רפואית ולמעלה מ-20 פרויקטים שהושלמו. אנו מספקים תעודת התאמה לתקני ISO 13485. לביצועים מובטחים, אנו מציעים

אחריות להחזר כספיאם המודל לא מגיע ליעדי AUC המוסכמים, אנו מחזירים 50% מעמלת הפיתוח.

הפתרון הסוהר שלנו מספק בדרך כלל החזר השקעה פי 3 בשנה הראשונה, וחוסך למעלה מ-$150,000 בעלויות רדיולוגיה. בהשוואה לקריאה ידנית, הבינה המלאכותית שלנו מהירה פי 10 ומשיגה דיוק גבוה ב-20% לזיהוי pneumothorax. צרו קשר להערכה חינמית של המשימה שלכם. קבלו ייעוץ על הפרויקט שלכם — נציע פתרון סוהר.