Обучение компьютеров описанию рентгеновского снимка с использованием глубокого обучения и обработки естественного языка.

Что такое подписи к изображениям?

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

Подпись к изображению в радиологии

Радиология, также известная как диагностическая визуализация, представляет собой серию тестов, которые делают снимки или изображения частей тела для диагностики и лечения заболеваний. Хотя существует несколько различных визуализирующих исследований, некоторые из наиболее распространенных включают рентген, МРТ, УЗИ, компьютерную томографию и ПЭТ.

Рентгенолог рассмотрит результаты определенного теста визуализации, чтобы найти соответствующее изображение, которое оценивает и поддерживает диагноз. После того, как пациент пройдет визуализирующие тесты, рентгенологи предоставят отчеты (образец радиологического отчета) о своих интерпретациях лечащим врачам. Типичный рентгенологический отчет включает следующие разделы: Название или тип исследования, Дата исследования, MeSH (тезаурус медицинских предметных рубрик), Интерпретация данных радиолога, История болезни, Методика, Сравнение, Результаты, Отпечаток и т. д.,

Итак, с помощью глубокого обучения и обработки естественного языка мы можем уменьшить усилия рентгенологов, описывая рентгеновские снимки, поэтому в этом тематическом исследовании мы извлечем результаты из рентгеновских снимков и сможем распространить ту же концепцию на другие разделы. как впечатления , MeSH и т. д.,

Почему важно решить эту проблему?

Согласно Американскому журналу рентгенологии и BMJ: British Medical Journal, рентгенологов очень мало по сравнению с населением в определенной области, особенно в сельской местности и небольших населенных пунктах, поэтому существуют огромные задержки в интерпретации медицинских изображений и каталогизации, которые задерживают медицинский диагноз и ставит под угрозу уход за пациентом.

Медицинские изображения прочитываются и интерпретируются специализированными медицинскими работниками (радиологами), а их выводы относительно каждого исследуемого органа сообщаются в виде письменных медицинских отчетов (радиологических отчетов). Процесс написания медицинских отчетов обычно занимает около 5–10 минут на отчет. В день врачи должны написать медицинские отчеты, исчисляемые сотнями, что может занять много времени. Разработанная нами модель может ускорить интерпретацию и каталогизацию медицинских изображений без какого-либо вмешательства рентгенолога, а каталогизаторы эффективно решают проблемы.

Давайте используем Deep Learning для решения этой проблемы!

Поскольку мы знаем, что изображения и текстовые предложения представляют собой информацию о последовательности, поэтому мы будем использовать RNN (рекуррентные нейронные сети), такие как LSTM или GRU, в настройках, подобных кодировщику-декодировщику, и давайте добавим механизм внимания, чтобы улучшить производительность нашей модели. В нашем следующем посте мы попробуем подписи к изображениям с помощью Transformers.

Ой! Как я должен оценить производительность моей модели?

BLEU: дублер двуязычной оценки

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

Выход BLEU всегда представляет собой число от 0 до 1. Это значение указывает, насколько текст-кандидат похож на справочные тексты, а значения ближе к 1 представляют более похожие тексты. Мы использовали BLEU, основанный на модифицированной точности n-грамм, поскольку он использует n-граммы для сравнения и оценки качества сгенерированного текста и выставления оценки, он быстро и просто вычисляется и широко используется.

Принцип работы BLEU прост. Учитывая некоторый вариант перевода предложения и группу эталонных предложений, мы используем подход с набором слов, чтобы увидеть, сколько вхождений BOW одновременно встречается как в переводе, так и в эталонных предложениях. BOW — это простой, но очень эффективный способ убедиться, что машинный перевод содержит ключевые фразы или слова, которые также содержатся в справочных переводах. Другими словами, BLEU сравнивает переводы-кандидаты с аннотированными эталонными переводами, созданными людьми, и сравнивает количество совпадений в предложении-кандидате. Чем больше хитов BOW, тем лучше перевод.

Прежде чем понять BLEU, нам нужно понять точность, модифицированную точность и штраф за краткость.

Точность:

  • где tp и fp обозначают истинные и ложные срабатывания соответственно.
  • мы можем рассматривать позитивы как примерно соответствующие понятию попаданий или совпадений.
  • Другими словами, позитивы — это набор n-грамм слов, которые мы можем составить из данного кандидата на перевод.
  • Истинные положительные результаты — это n-граммы, которые появляются как в кандидате, так и в каком-то эталонном переводе.
  • ложные срабатывания - это те, которые появляются только в переводе-кандидате.

Измененная точность:

Простая метрика, основанная на точности, имеет огромные проблемы, например, если у нас есть выборка-кандидат в виде «это это это это это это это это это это это это это то, что простая точность дает 1 в качестве вывода, но данный кандидат очень плохой. Это связано с тем, что точность просто включает проверку того, произошло ли попадание или нет: она не проверяет повторяющийся набор слов. Следовательно, реализована модифицированная точность, и в модифицированной точности мы будем отсекать количество n-грамм, если они повторяются несколько раз. И формула следующая

  • Подсчетом понимается количество попаданий, которое мы присваиваем определенной n-грамме.
  • mw относится к количеству вхождений n-граммы в предложении-кандидате.
  • mmax — максимальное количество вхождений этой n-граммы в любом из эталонных предложений.

Наказание за краткость:

Штраф за краткость наказывает короткие переводы-кандидаты, таким образом гарантируя, что только достаточно длинные машинные переводы получают высокие баллы. Цель состоит в том, чтобы найти длину эталонного предложения, длина которого наиболее близка к длине рассматриваемого кандидата на перевод. Если длина этого эталонного предложения больше, чем предложение-кандидат, мы применяем некоторый штраф; если предложение кандидата длиннее, чем мы не применяем никакого наказания. Конкретная формула наказания выглядит следующим образом:

СИНИЙ:

Формула для BLEU выглядит следующим образом.

  • n указывает размер пакета слов или n-граммы
  • wn обозначает вес, который мы будем приписывать модифицированной точности pn.
  • pn измененная точность, полученная в этой конфигурации n-грамм.

Реализация BLEU:

Внедрение BLEU с нуля

Позволяет получать и понимать данные

Для этого тематического исследования давайте использовать данные из открытых источников из сети больниц Университета Индианы.

Источник: Сеть больниц Университета Индианы.

Данные изображения:

Университет Индианы — рентген грудной клетки (изображения в формате PNG): https://academictorrents.com/details/5a3a439df24931f410fac269b87b050203d9467d

  • Размер данных: 1,36 ГБ
  • Количество изображений: 7470
  • Все изображения в формате .png.
  • Нет проблем с обработкой этих изображений, можно использовать OpenCV для работы с изображениями.
  • Все изображения имеют одинаковую ширину 512 пикселей.
  • Но высота варьируется от 362 p до 873 px.
  • Доступные типы изображения: Фронтальное и боковое

Данные XML-отчета:

Университет Индианы — рентген грудной клетки (отчеты в формате XML):

https://academictorrents.com/details/66450ba52ba3f83fbf82ef9c91f2bde0e845aba9

  • Размер данных: 20,7 МБ
  • Всего отчетов: 3955
  • Нет проблем с обработкой данных, можно использовать xml.etree.ElementTree для анализа XML-отчетов.
  • Xml Содержит следующие важные данные, которые необходимо извлечь из XML.

а. Индикация:

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

Пример данных: положительный тест на туберкулез, боль в груди и т. д.,

б. Сравнение:

Эти данные описывают, сравнивается ли это новое исследование изображений с какими-либо доступными предыдущими исследованиями. Сравнения обычно включают исследования одной и той же области тела и типа исследования.

Образец данных: портативный сундук от XXXX, PA и боковой сундук, исправленный XXXX и т. д.,

в. Выводы:

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

Пример данных: сердце нормального размера. Средостение без особенностей. Легкие чистые и т. д.,

д. Впечатление:

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

Пример данных: нет острого заболевания, чистые легкие и т. д.,

Образец отчета:

Начнем с EDA (исследовательский анализ данных)

Извлечение информации из XML:

Используя XML-библиотеку, мы извлекаем «Результаты», путь к изображению и информацию об идентификаторе пациента из XML-отчетов каждого пациента и формируем с ними набор данных.

Понимание количества изображений на пациента:

Всего 3851 уникальный пациент

Пациенты с 1 изображением: 446

Пациенты с 2 изображениями: 3208

Пациенты с 3 изображениями: 181

Пациенты с 4 изображениями: 15

Пациенты с 5 изображениями: 1

  • Итак, чтобы получить большую часть информации, мы вводим в модель два изображения. как показано ниже

Если у пациента есть один рентгеновский снимок, связанный с отчетом, мы дублируем одно и то же изображение дважды, как изображение1 и изображение2.

Если у пациента есть два рентгеновских снимка, связанных с отчетом, мы копируем первое изображение как изображение1, а второе — как изображение2.

Если у пациента есть более двух рентгеновских снимков, связанных с отчетом, мы случайным образом выбираем 2 рентгеновских снимка в качестве изображения1 и изображения2.

Предварительная обработка данных для результатов

Анализ нулевых значений

  • В столбце результатов есть около 13% нулевых значений (нет).
  • В столбце результатов будут удалены строки с нулевым значением, поскольку мы не можем заполнить нулевые значения некоторыми случайными результатами.

Преобразование в нижний регистр, расширение сокращений и удаление ненужных слов

Знакомство со статистикой результатов поиска

Мы видим, что в основном встречаются такие слова, как плевральный выпот, пневмотора, кардиомедиастнальный силуэт, нормальные пределы, и мы можем заметить, что эти слова не являются нормальными словами, но они являются специальными для медицинской области. И выглядит очень чистым после предварительной обработки.

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

Тестовая сплит-тренировка:

Если мы внимательно посмотрим на столбец результатов, мы увидим, что данные в столбце результатов смещены в сторону данных, не связанных с болезнью, и, поскольку у нас очень мало данных, около 3300 записей, этого совсем недостаточно для использования в подходе глубокого обучения, но мы попытаемся выполнить повторную выборку данных и сделать данные сбалансированными с помощью приведенного ниже подхода (мы пробовали несколько подходов и зафиксировали приведенные ниже значения)

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

Шаг 1. разделим набор данных на две части.

один с выводами более 25 случаев.

второй с выводами, меньшими или равными 5 случаям.

Шаг 2. давайте разделим наборы тестов поезда с test_size = 0,1 для результатов больше 5.

Шаг 3: давайте разделим наборы тестов для обучения с размером выборки 20 % для результатов, меньших или равных 5, и добавим этот выборочный тест и остальные для обучения.

Шаг 4.Повысьте выборку точек меньшинства и понизьте выборку большинства точек.

  • тем самым мы уменьшаем дисбаланс в наборе данных по отношению к выводам

И после повышающей выборки и понижающей выборки точек меньшинства и большинства, соответственно, мы получили 8795 записей в поезде и 604 записи в наборе тестовых данных, этот процесс является обязательным, поскольку у нас нет данных, и любые данные, которые у нас были, смещены в сторону отсутствия болезни. случай.

Давайте создадим Tokeniser

Подготовим и сохраним токенизатор и набор данных

Теперь набор данных подготовлен и готов к построению модели. Это образец набора данных, который мы подготовили и сохранили для построения модели.

Давайте построим модель подписи к изображению

Предпосылки для построения модели

Прежде чем строить модель, давайте разберемся с несколькими концепциями, которые мы использовали в модели кодировщика-декодера на основе внимания.

Чекснет:

ChexNet — это алгоритм глубокого обучения, который может обнаруживать и локализовать 14 видов заболеваний на рентгеновских снимках грудной клетки. Плотно связанная сверточная нейронная сеть из 121 слоя обучается на наборе данных ChestX-ray14, который содержит 112 120 рентгеновских снимков в фронтальной проекции от 30 805 уникальных пациентов. Результат настолько хорош, что превосходит показатели практикующих рентгенологов.

Мы использовали предварительно обученные веса ChexNet, чтобы получить вложения для рентгеновских лучей с использованием трансферного обучения. Поскольку веса ChexNet хорошо сходятся в таких задачах, как классификация заболеваний в наборе данных ChestX-ray14.

Ресурс: https://arxiv.org/pdf/1711.05225v3.pdf

Файл с весами: https://www.kaggle.com/datasets/theewok/chexnet-keras-weights

ChexNet использует архитектуру, аналогичную архитектуре DenseNet121, ниже приведена архитектура DenseNet.

ПЕРЧАТКА

GloVe расшифровывается как Global Vectors. GloVe — это алгоритм обучения без учителя для получения векторных представлений слов. Обучение выполняется на агрегированной глобальной статистике совпадения слов из корпуса, и полученные представления демонстрируют интересные линейные подструктуры векторного пространства слов.

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

Мы использовали предварительно обученные векторы слов для преобразования слов в вложения, а GloVe предоставляет многомерные переобученные векторы слов, и из них мы использовали 300-мерные векторы слов для преобразования встраивания слов.

Источник: https://nlp.stanford.edu/projects/glove/

Glove300d.zip: https://nlp.stanford.edu/data/glove.6B.zip

LSTM:

LSTM расшифровывается как Long Short-Term Memory RNN. Простой RNN не может справиться с долгосрочными зависимостями или хорошо работать с ними. LSTM специально разработаны, чтобы избежать проблемы долгосрочной зависимости. Запоминание информации в течение длительного периода времени практически является их поведением по умолчанию.

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

1. Забыть ворота:

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

2. Входные ворота:

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

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

3. Выходные ворота:

Последний слой в LSTM называется «слоем выходных ворот». Этот вывод будет основан на нашем текущем состоянии ячейки, предыдущем выводе и вводе (Xt). Мы отправим текущее состояние ячейки через Tanh, чтобы подтолкнуть значения к значениям от -1 до 1 и умножить их на выход сигмовидного вентиля.

изучите LSTM от Кристофера Олаха: https://colah.github.io/posts/2015-08-Understanding-LSTMs/

ГРУ:

GRU расшифровывается как Gated Recurrent Unit, это современные упрощенные версии LSTM, LSTM имеет проблему исчезающего градиента из-за долгой временной зависимости, эта проблема решается GRU, а GRU так же мощен, как LSTM, и быстрее обучается.

У GRU есть только 2 вентиля вместо 3 вентилей, таких как LSTM, эти вентили являются вентилями сброса и обновления. Поскольку у нас меньше уравнений в GRU для решения, у нас будет меньше частных производных и, следовательно, будет более быстрое обратное распространение по сравнению с LSTM.

Понимание различий в архитектуре между LSTM и GRU:

Понимание уравнений LSTM и GRU:

Ссылка: https://towardsdatascience.com/illustrated-guide-to-lstms-and-gru-s-a-step-by-step-explanation-44e9eb85bf21

Давайте разберемся с вниманием

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

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

Первоначальная цель моделей внимания состояла в том, чтобы помочь улучшить компьютерное зрение и систему нейронного машинного перевода на основе кодировщика-декодера. Эта система использует обработку естественного языка (NLP) и опирается на огромные библиотеки данных со сложными функциями. Однако использование моделей внимания помогает создавать карты для векторов фиксированной длины для создания переводов и понимания. Хотя они могут быть не совсем точными, они дают результат, отражающий общее настроение и намерение первоначальных входных данных.

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

Типы моделей внимания:

1. Модель самоконтроля

2. Модель глобального внимания

3. Модель локального внимания

Здесь мы используем модель глобального внимания для нашего тезиса, предложенную Багданау и Лунгом. И модель глобального внимания широко используется как механизм внимания.

Механизм глобального внимания:

Модель глобального внимания, которая также похожа на модель мягкого внимания, собирает входные данные из всех состояний кодировщика и декодера перед оценкой текущего состояния для определения выходных данных. Эта модель использует каждый шаг кодировщика и каждый шаг предварительного просмотра декодера для вычисления весов внимания или весов выравнивания. Он также умножает каждый шаг кодировщика на глобальные веса выравнивания, чтобы определить значение контекста для передачи в ячейку рекуррентных нейронных сетей (RNN). Это позволяет модели найти выход декодера.

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

Все скрытые состояния кодировщика (вперед и назад) и декодера используются для генерации вектора контекста, в отличие от того, как только последнее скрытое состояние кодировщика используется в seq2seq без внимания.

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

Модель предсказывает целевое слово на основе векторов контекста, связанных с исходной позицией и ранее сгенерированными целевыми словами. Модель Seq2Seq с механизмом внимания состоит из кодера, декодера и уровня внимания.

Слой внимания состоит из

  1. Слой выравнивания
  2. Веса внимания
  3. Контекстный вектор

Слой выравнивания:

Показатель выравнивания отображает, насколько хорошо совпадают входные данные вокруг позиции "j" и выходные данные в позиции "i". Оценка основана на скрытом состоянии предыдущего декодера, s₍ᵢ₋₁₎непосредственно перед предсказанием целевого слова и скрытого состояния, hⱼ входного предложения

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

Внимание:

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

Вектор контекста:

Вектор контекста используется для вычисления конечного результата декодера. Вектор контекста 𝒸ᵢ представляет собой взвешенную сумму весов внимания и скрытых состояний кодировщика (h₁, h₂, …, hₜₓ), которая отображается во входное предложение.

Предсказание целевого слова:

Чтобы предсказать целевое слово, декодер использует

а. Вектор контекста (𝒸ᵢ),

б. Выход декодера с предыдущего временного шага (yᵢ₋₁) и

в. Скрытое состояние предыдущего декодера (sᵢ₋₁)

Модель глобального внимания учитывает все скрытые состояния кодировщика при вычислении вектора контекста 𝒸ₜ. Векторы выравнивания переменной длины aₜ, равные размеру количества временных шагов в исходной последовательности, получаются путем сравнения текущего целевого скрытого состояния h с каждым из исходное скрытое состояние hₛ Оценка выравнивания называется функцией, основанной на содержании, для которой мы рассматриваем три различных альтернативы, и из этих трех альтернатив мы используем конкатенированную версию оценки.

Вектор глобального контекста 𝒸ₜ рассчитывается как средневзвешенное значение в соответствии с вектором выравнивания aₜ по всем исходным скрытым состояниям hₛ. Поскольку модель глобального внимания учитывает все слова исходной последовательности для прогнозирования целевых слов, это становится дорогостоящим в вычислительном отношении и может быть сложным для перевода более длинных предложений. И это решается с помощью локального внимания.

Ссылка на внимание: https://lilianweng.github.io/posts/2018-06-24-attention/

Достаточно предварительных требований, давайте начнем строить модель, я знаю, вам понравится😰

Не торопитесь ……..😜😜

Построение модели кодировщика-декодера на основе внимания

Давайте использовать CheXNet для передачи обучения

Чтобы понять трансферное обучение, обратитесь: https://machinelearningmastery.com/transfer-learning-for-deep-learning/

Реализовали ChexNet, загрузив веса, которые мы скачали, и не включая верхние слои после загрузки модели, мы установили для обучаемых параметров модели ChexNet значение false, так как мы хотим каждый раз использовать одни и те же веса и не хотим обновлять эти веса при обратном распространении.

Давайте использовать Glove для встраивания слов

Мы загрузили и использовали предварительно обученные векторы GloVe с 300 измерениями, и мы создаем матрицу весов для слов в учебных документах с целью встраивания слов из предварительно обученных векторов GloVe.

Создание конвейера данных

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

Изменяет размер изображения до 255x255 пикселей.

Размечает выводы и дополняет все выводы до одинаковой длины для всех выводов, и в конце выполняется заполнение.

Применяется увеличение изображения, и применяемые нами методы переворачивают изображения по горизонтали и вертикали с одинаковой вероятностью. Если вероятность меньше 33%, то переверните по горизонтали, если от 33 до 66%, переверните по вертикали, иначе увеличение изображения не произойдет.

Реализован загрузчик данных для пакетной обработки и перетасовки на месте.

Создание кодировщика изображений

Реализован слой кодировщика, который кодирует наши входные рентгеновские снимки с весами ChexNet и затем объединяет их на второй оси, а позже мы использовали пакетную нормализацию и отсева и возвращали закодированный вектор изображения.

Уровень внимания

Одношаговый декодер:

Пошаговый механизм декодера шаг за шагом:

1. Передайте input_to_decoder слою внедрения, а затем получите вывод (batch_size, 1, embedding_dim)

2. Используя скрытое состояние encoder_output и decoder, вычислить вектор контекста.

3. Объедините вектор контекста с выходными данными шага A.

4. Передайте выходные данные Step-C в LSTM/GRU и получите выходные данные и состояния декодера (скрытое состояние и состояние ячейки).

5. Передайте выходные данные декодера в плотный слой (размер словарного запаса) и сохраните результат в выходных данных.

6. Вернуть состояния из шага D, выходные данные из шага E, веса внимания из шага -B

Слой декодера

Декодирует вывод кодировщика и заголовок. Декодер повторяет все временные шаги до максимального значения заполнения и генерирует каждое слово одно за другим, принимая во внимание предыдущие слова.

Пользовательские потери и обратные вызовы

Создана пользовательская функция потерь, чтобы применить маску к существующей функции потерь SparseCategoricalCrossentropy(), и мы используем пользовательскую функцию потерь для получения значения маски, чтобы не учитывать те слова, которых нет в истинном заголовке.

Мы добавляем четыре обратных вызова, и они:

  1. Ранняя остановка:

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

2. Контрольная точка модели:

Мы ставим контрольные точки на тренировках и сохраняем лучшие веса только в процессе тренировки. Для этого нам нужно указать путь для сохранения весов.

3. Тензорная доска:

Мы используем доску Tensor для компромисса дисперсии смещения и следим за весами, есть ли какие-либо взрывные или уменьшающиеся градиенты.

4. Уменьшить LROnPlateau:

Этот обратный вызов используется для отслеживания потери проверки и снижения скорости обучения, если нет улучшения потери проверки для уровня терпения 2, что означает, что для непрерывных 2 итераций мы использовали начальное обучение как 10**–2 и используя этот вызов Скорость обратного обучения может уменьшиться до минимума 10 **–7 в соответствии с нашими настройками.

Модель глобального внимания и ее краткое изложение

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

лучшие гиперпараметры указаны ниже

размер_пакета = 100

embedding_dim = 300

плотный_тусклый = 512

лстм_юниты = плотный_тусклый

частота отсева = 0,2

lr (скорость обучения) = 10**-2

количество эпох = 10

min_lr (минимальная скорость обучения) =10**-7

Запуск модели для 10 эпох, и мы видим, что потери поезда составляют 0,5577, точность поезда составляет 0,8466, потери проверки и точность составляют 1,4386 и 0,6907 соответственно, и если мы запустим модель еще дальше, мы можем получить лучшие потери и точность, но похоже, что модель переоснащение, и мы получили лучшие результаты с 10 эпохами, поскольку данных, которые у нас есть, меньше, если мы запускаем все больше и больше эпох, есть вероятность переобучения.

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

Проверить прогнозирование подписей и оценку BLEU с помощью жадного поиска

Жадный поиск:

Жадный алгоритм — это подход к решению задачи путем выбора наилучшего из доступных на данный момент вариантов. Не беспокоит, принесет ли текущий лучший результат общий оптимальный результат. Алгоритм никогда не отменяет предыдущее решение, даже если выбор неверен.

Мы выбрали жадный поиск, так как мы предсказываем текст, и мы хотим предсказать вероятность следующего наилучшего слова после каждого слова, и это не требует больших вычислительных ресурсов. совершенно невозможно, даже если мы используем хороший графический процессор (Google Colab Pro Tesla P100 GPU) в качестве вычислительной мощности для построения этой модели.

внедрение жадного поиска

Оценка BLEU

После всего этого GYAN почему только 28,3% BLEU Score. Как мы знаем, для глубокого обучения требуется много данных, но данных, которые мы дали нашей модели, очень мало, и они смещены в сторону данных, не связанных с болезнью, даже после большой повторной выборки, поэтому этот показатель BLEU хорош для данных, с которыми мы работали, если мы иметь хороший объем данных, тогда та же модель будет работать исключительно хорошо и давать гораздо лучшие результаты.

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

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

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

несколько примеров прогнозов

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

Заключение:

Мы успешно можем генерировать подписи (результаты) для рентгеновских изображений и можем достичь оценки BLEU около 28,3% с помощью моделей кодировщика-декодера на основе глобального внимания с GRU. Поскольку данных, которые у нас есть, очень мало и они смещены в сторону данных, не связанных с заболеванием, мы не можем получить исключительно хорошую оценку BLEU, но если у нас есть хороший объем сбалансированных данных для работы, то тот же фрагмент кода может исключительно хорошо предсказывать подписи. для изображений.

Будущая работа:

  • Мы можем использовать BERT для получения вложений заголовков вместо использования слоев встраивания с весами векторов перчаток и использовать их в качестве входных данных для декодера.
  • Мы также можем использовать Visual BERT. Или попробуйте использовать GPT-2 или GPT-3 в декодере для создания титров.
  • Мы можем использовать Transformer вместо архитектуры кодировщика-декодера на основе Attention.
  • Получите больше рентгеновских снимков с заболеваниями, так как большинство данных, доступных в этом наборе данных, относятся к категории «без заболеваний».

Чтобы увидеть код и модель в действии

  • Увидеть модель в действии StreamLit
  • Вы можете ссылаться на код на GitHub
  • Вы можете связаться со мной на Linkedin

Использованная литература:

Отправлено 10 февраля 2015 г. (v1), последняя редакция 19 апреля 2016 г. (данная версия, v3)] Покажи, посети и расскажи: генерация подписи к изображению на нейронах с визуальным вниманием Кельвин Сюй, Джимми Ба, Райан Кирос, Кёнхён Чо, Аарон Курвиль, Руслан Салахутдинов, Ричард Земель, Йошуа Бенжио

Декабрь 1997 г. Neural Computation 9(8):1735–80 Долгая кратковременная память Зеппа Хохрайтера, Университет Иоганна Кеплера, Линц.

[Отправлено 3 марта 2022 г.] Глубокая нейронная структура для создания подписей к изображениям с использованием механизма внимания на основе ГРУ Рашид Хан, М. Шуджа Ислам, Хадиджа Канвал, Мансур Икбал, доктор медицинских наук Имран Хоссейн, Чжунфу Йе

[Отправлено 26 февраля 2021 г.] Изучение переносимых визуальных моделей на основе наблюдения за естественным языком Алек Рэдфорд, Чон Вук Ким, Крис Халласи, Адитья Рамеш, Габриэль Гох, Сандхини Агарвал, Гириш Састри, Аманда Аскелл, Памела Мишкин, Джек Кларк, Гретхен Крюгер , Илья Суцкевер.

КЛИП: https://openai.com/blog/clip/

Внимание: https://lilianweng.github.io/posts/2018-06-24-attention/

https://github.com/uzaymacar/внимание-механизмы#местное-внимание

[Представлено 14 ноября 2017 г. (v1), последняя редакция 25 декабря 2017 г.] CheXNet: Обнаружение пневмонии на уровне рентгенолога на рентгенограммах грудной клетки с помощью глубокого обучения Пранав Раджпуркар, Джереми Ирвин, Кейли Чжу, Брэндон Янг, Хершел Мехта, Тони Дуан, Дэйзи Дин, Арти Багул, Кертис Ланглотц, Кэти Шпанская, Мэттью П. Лунгрен, Эндрю Ю. Нг

GloVe: глобальные векторы для представления слов Джеффри Пеннингтон, Ричард Сочер, Кристофер Д. Мэннинг, факультет компьютерных наук, Стэнфордский университет