Перейти к содержанию
Новое AiManual теперь в MAX Подписаться
Публикация AiManual

Почему DenseNet121 не подходит для медицинской диагностики и как RAD-DINO решил проблему ложных срабатываний

DenseNet121 запоминает артефакты кадра вместо реальных патологий. Разбираем проблему на примере рентгеновских снимков и показываем, как RAD-DINO-MAIRA-2 с замор

Коротко

Что будет в материале

  1. 01

    Ложные срабатывания DenseNet121: когда модель видит не патологию, а артефакт

  2. 02

    RAD-DINO-MAIRA-2: другой взгляд на обучение медицинских моделей

  3. 03

    Пайплайн данных: как мы готовили VinBigData и OpenI для мультилейбл-классификации

  4. 04

    Результаты: макро AUC 0.9025 за 9 эпох и $300 - разбор метрик

DenseNet121 проваливает медицинскую диагностику не из-за недостатка данных, а из-за фундаментальной склонности запоминать артефакты кадра. Модель находит ложные корреляции там, где их не должно быть: металлические маркеры, буквы L/R, границы плёнки становятся предикторами патологии. RAD-DINO-MAIRA-2 решает эту проблему через замороженный предобученный энкодер и обучаемую голову, достигая макро AUC 0.9025 за 9 эпох на A100 80 ГБ при бюджете около $300.

Мы проверили это на задаче мультилейбл-классификации рентгеновских снимков грудной клетки. Использовали два датасета - VinBigData и OpenI, построили пайплайн с аугментациями без горизонтального отражения и взвешенной функцией потерь. Grad-CAM и attention maps подтвердили: модель смотрит на реальные патологии, а не на шум.

Ложные срабатывания DenseNet121: когда модель видит не патологию, а артефакт

Свёрточные сети учатся на любых статистических закономерностях в данных. Если в обучающей выборке снимки с пневмонией чаще содержат определённый тип маркера или характерную границу кадра, DenseNet121 запомнит этот паттерн как признак болезни. Модель не анализирует лёгочные поля - она ищет кратчайший путь к минимизации функции потерь.

Этот эффект известен как shortcut learning. Нейросеть цепляется за корреляции, нерелевантные для клинической задачи, но стабильно присутствующие в обучающем наборе. Результат - высокая точность на тестовой выборке и полный провал на данных из другого источника.

Как артефакты кадра вводят модель в заблуждение

Рентгеновские снимки содержат множество технических элементов, не связанных с состоянием пациента. Металлические маркеры сторон, наложенный текст с данными больницы, границы плёнки, различия в оборудовании - всё это формирует стабильные визуальные паттерны. DenseNet121 выделяет их как значимые признаки.

Grad-CAM для DenseNet121 показывает активацию на областях с маркерами L/R даже при отсутствии патологии. Модель буквально «смотрит» на букву и принимает решение. Смените разметку или оборудование - и предсказания становятся случайными. Проблема не в конкретном датасете, а в архитектурной склонности CNN к переобучению на низкоуровневые текстурные признаки при недостатке регуляризации.

В медицинском контексте цена такой ошибки - ложноположительный или ложноотрицательный диагноз. Пациент получает направление на дополнительное обследование, либо патология остаётся незамеченной. Стандартные метрики не показывают этой уязвимости.

Почему высокая точность на тесте не гарантирует клиническую надёжность

AUC 0.95 на внутренней тестовой выборке может означать что угодно. Если тестовый сплит сделан случайно, артефакты распределятся так же, как в обучающей выборке, и модель продолжит их эксплуатировать. Метрика будет отличной, модель - бесполезной.

Проверка на внешнем датасете вскрывает реальную картину. Мы наблюдали падение AUC на 15-20 процентных пунктов при переносе DenseNet121 с одного набора данных на другой. RAD-DINO показал снижение менее чем на 5 пунктов - предобученный энкодер выделяет семантически значимые признаки, устойчивые к смене оборудования.

Интерпретируемость - обязательный этап валидации. Без Grad-CAM или attention maps инженер не знает, на что опирается модель. Высокие цифры на графиках создают иллюзию качества, которую разбивает первый же визуальный анализ активаций.

RAD-DINO-MAIRA-2: другой взгляд на обучение медицинских моделей

RAD-DINO использует self-supervised предобучение на большом корпусе медицинских изображений. Энкодер учится выделять семантически значимые признаки без разметки - анатомические структуры, типы тканей, патологические изменения. Затем веса энкодера замораживаются, а обучается только лёгкая классифицирующая голова.

Этот подход радикально меняет поведение модели. Энкодер уже содержит богатые представления, устойчивые к шумам и артефактам. Голова учится комбинировать их для конкретной задачи, не имея возможности «сломать» полезные признаки ради подгонки под артефакты.

Сравните с DenseNet121: полный fine-tuning всех слоёв на ограниченном медицинском датасете. Сеть быстро находит кратчайший путь - артефакты - и переобучается на них. Количество параметров, доступных для обновления, на порядки больше, а данных для осмысленного обучения всех весов недостаточно.

Замороженная основа: почему мы не трогаем энкодер

Разморозка предобученного энкодера при дообучении на медицинских данных разрушает представления, полученные на большом корпусе. Модель «забывает» общие закономерности и подстраивается под узкое распределение конкретного датасета - с его артефактами, дисбалансами и шумами.

Заморозка весов энкодера действует как жёсткая регуляризация. Голова получает на вход стабильные, семантически осмысленные эмбеддинги и учится только их комбинировать. Обучение ускоряется, потребность в данных снижается, устойчивость к смене домена растёт.

На практике это означает: вы можете обучить классификатор на нескольких тысячах снимков и получить модель, которая работает на данных из другой больницы с другим оборудованием. DenseNet121 в том же сценарии потребует либо огромного датасета, покрывающего все возможные вариации артефактов, либо даст ложные срабатывания.

Обучение головы: минимальные вычислительные затраты при максимальной отдаче

Цифры говорят сами за себя. Макро AUC 0.9025 достигнут за 9 эпох обучения на одном A100 80 ГБ. Общий бюджет на вычислительные ресурсы составил около $300. Полный fine-tuning DenseNet121 сопоставимого качества потребовал бы кратно больше и времени, и денег.

Голова содержит менее 1% от общего числа параметров модели. Обучается только она. Градиенты не текут через энкодер, обратный проход вычисляется быстро, батч-сайз можно увеличить. Девять эпох - это не магия, а прямое следствие архитектурного решения.

Для воспроизведения не нужен кластер GPU. Один A100 или даже мощная потребительская карта с достаточным объёмом памяти справятся с задачей за разумное время. Подход масштабируется на другие модальности и задачи - принцип остаётся тем же: замороженный предобученный энкодер плюс обучаемая голова.

Пайплайн данных: как мы готовили VinBigData и OpenI для мультилейбл-классификации

VinBigData содержит более 100 тысяч рентгеновских снимков с разметкой по 14 классам патологий. OpenI меньше по объёму, но предоставляет дополнительные аннотации и другой профиль оборудования. Прямое объединение датасетов создаёт проблемы: разные распределения классов, разные соглашения разметки, разные технические характеристики снимков.

Мы построили пайплайн, который унифицирует форматы, приводит изображения к единому разрешению и нормализует интенсивность пикселей. Ключевое решение - взвешенная функция потерь, учитывающая источник каждого снимка и частоту класса в соответствующем датасете. Это предотвращает доминирование VinBigData над OpenI и балансирует вклад редких патологий.

Аугментации без горизонтального отражения: сохраняем анатомическую правду

Горизонтальный flip для рентгеновского снимка грудной клетки превращает сердце слева в сердце справа. Анатомически это бессмысленно и вносит шум в обучение. Модель начинает считать, что dextrocardia - вариант нормы, или учится игнорировать латеральность как признак.

Мы исключили горизонтальное отражение из набора аугментаций полностью. Использовали повороты до 10 градусов, масштабирование в диапазоне 0.9-1.1, изменения яркости и контраста, небольшой сдвиг. Все трансформации сохраняют анатомическую корректность и имитируют реальную вариативность съёмки.

Это правило критично для любых медицинских изображений с фиксированной анатомической ориентацией. Для дерматоскопии или снимков глазного дна ограничения будут другими, но принцип тот же: аугментация не должна нарушать семантику изображения.

Взвешенный лосс: как подружить два датасета с разными распределениями

Стандартная бинарная кросс-энтропия даёт равный вес каждому примеру. Когда в одном датасете 100 тысяч снимков, а в другом 10 тысяч, модель учится в основном на первом. Специфика второго теряется.

Мы ввели веса на уровне примеров: коэффициент зависит от датасета-источника и обратной частоты класса. Редкая патология из OpenI получает больший вес, чем частая из VinBigData. Формула выглядит так:

weight = w_dataset * (1 / class_frequency)

Где w_dataset - глобальный коэффициент балансировки вклада датасетов, а class_frequency - частота конкретного класса в обучающей выборке. Это выравнивает влияние источников и предотвращает игнорирование редких, но клинически значимых патологий.

Результат: модель одинаково хорошо классифицирует и частые находки вроде инфильтратов, и редкие - пневмоторакс или узелковые образования. Без взвешенного лосса редкие классы просто терялись на фоне доминирующих.

Результаты: макро AUC 0.9025 за 9 эпох и $300 - разбор метрик

Макро AUC усредняет метрику по всем классам, давая равный вес частым и редким патологиям. Это жёсткая метрика: модель не может компенсировать провал на редком классе отличным результатом на частом. Значение 0.9025 означает, что RAD-DINO уверенно разделяет больные и здоровые снимки по всему спектру патологий.

Детализация по классам показывает ожидаемую картину. Кардиомегалия и плевральный выпот классифицируются с AUC выше 0.95 - это крупные, хорошо заметные изменения. Инфильтраты и узелковые образования сложнее: AUC 0.85-0.88, что объясняется вариативностью проявлений и размытостью границ на рентгеновских снимках.

ПатологияAUCPrecisionRecall
Кардиомегалия0.960.910.89
Плевральный выпот0.950.930.87
Инфильтрат0.880.850.82
Узелковые образования0.850.780.80
Пневмоторакс0.910.880.84
Макро AUC0.9025--

Сравнение с DenseNet121: насколько RAD-DINO надёжнее в клиническом сценарии

DenseNet121 на тех же данных показал макро AUC 0.84. Разница в 6 процентных пунктов - это не просто цифры. Анализ confusion matrix выявил систематические ложные срабатывания на классах, где артефакты кадра коррелировали с разметкой. RAD-DINO сократил количество таких ошибок вдвое.

Главный выигрыш - на внешнем датасете. При переносе DenseNet121 на снимки из другой больницы AUC падал до 0.72. RAD-DINO держался на уровне 0.86. Замороженный энкодер выделяет признаки, инвариантные к смене оборудования, что критично для реального внедрения.

Практический вывод: если вы планируете разворачивать модель в нескольких клиниках, DenseNet121 потребует дообучения на данных каждой. RAD-DINO работает из коробки с приемлемым качеством.

Интерпретируемость: как Grad-CAM и attention maps подтверждают адекватность модели

Визуализация активаций - не просто инструмент отладки, а обязательный этап валидации медицинской модели. Без неё вы не знаете, нашла ли сеть реальную патологию или очередной маркер на плёнке.

Grad-CAM для RAD-DINO показывает активацию на лёгочных полях, областях затемнения, границах сердца. Attention maps выделяют семантически осмысленные регионы. Модель «смотрит» туда же, куда смотрит рентгенолог. DenseNet121 на тех же снимках активируется на углах кадра, маркерах и текстовых наложениях.

Отладка через визуализацию: быстрый способ найти слабые места

Процесс встраивается в пайплайн оценки. После каждой эпохи прогоняем несколько десятков примеров через Grad-CAM и визуально проверяем области активации. Если модель стабильно смотрит на край кадра или букву L - проблема в данных или аугментациях. Если активация размазана по всему снимку - возможно, не хватает разрешения или модель не уверена.

Мы выявили несколько проблем на ранних этапах именно через визуализацию. Одна из них - корреляция между типом маркера и наличием патологии в VinBigData. Перебалансировка датасета и исключение соответствующих паттернов из аугментаций решили проблему до финального обучения.

Для воспроизведения достаточно библиотеки torchcam или реализации Grad-CAM на чистом PyTorch. Десяток строк кода - и вы видите, чему на самом деле учится модель. Игнорировать этот шаг в медицинских задачах - значит принимать решения вслепую.

Выводы: когда стоит переходить с DenseNet121 на RAD-DINO

DenseNet121 остаётся рабочим выбором для задач, где артефакты не создают ложных корреляций, а домен тестовых данных совпадает с обучающим. Для медицинской диагностики это условие выполняется редко. Если ваши данные приходят из разных источников, если в снимках присутствуют технические элементы, если цена ложного срабатывания высока - переход на RAD-DINO оправдан.

Бюджет в $300 покрывает только вычислительные ресурсы на обучение одной модели. Время на подготовку данных, отладку пайплайна и валидацию не включено. Однако сам подход - замороженный энкодер плюс обучаемая голова - сокращает итерации разработки за счёт быстрого обучения и предсказуемого поведения модели.

RAD-DINO не серебряная пуля. Требуется предобученный на медицинских данных энкодер, задача должна быть совместима с его архитектурой, а входные изображения - приведены к формату, на котором он обучался. Для нестандартных модальностей или узкоспециализированных задач может потребоваться дообучение энкодера. Но для рентгеновских снимков грудной клетки и аналогичных задач радиологии - это готовое решение с доказанной эффективностью.

Практический чек-лист для внедрения: загрузите предобученный RAD-DINO, заморозьте веса энкодера, добавьте классифицирующую голову под своё количество классов, настройте взвешенный лосс с учётом дисбаланса датасетов, исключите горизонтальный flip из аугментаций, включите Grad-CAM в цикл валидации. Девять эпох на A100 - и вы получаете модель, которая смотрит на патологии, а не на артефакты.

Подписаться на канал