Статья исходит от Чжоу Цзунвэя Zhihu.Он является первым мастером модели Unet++.Он подробно проанализировал модель Unet++ в конце 2019 года и очень хорошо ее объяснил. Так вот транспорт + личное понимание.Выделенная жирным шрифтом часть текста является личным примечанием.. Друзья, которым нужно обсудить и пообщаться, могут добавить мой WeChat: cyx645016617 или присоединиться к группе общения по алгоритму ИИ с очень хорошей атмосферой, которую я создал. Я всего лишь первокурсник, который медленно продвигается по дороге интеллектуальных алгоритмов.
Справочный каталог: [Оглавление]
1 предзнаменование
В области компьютерного зрения полностью сверточная сеть (FCN) является относительно известной сетью сегментации изображений.В направлении обработки медицинских изображений можно сказать, что U-Net является более популярной сетью.В принципе, для всех задач сегментации, мы будем использовать U-Net Сначала посмотрите на основные результаты, а затем сделайте «волшебное изменение».
U-Net очень похож на FCN.U-Net был предложен позже, чем FCN, но оба были опубликованы в 2015 г. По сравнению с FCN, первая особенность U-Net заключается в том, что он полностью симметричен, то есть слева и справа стороны очень симметричны.Точно так же декодер FCN относительно прост, используется только одна операция деконволюции, и тогда он не поспевает за структурой свертки. Второе отличие заключается в пропуске соединения, FCN использует суммирование, а U-Net использует конкатенацию. Это все детали, дело в том, что в их структуре используется относительно классическая идея, то есть кодер-декодер, которая была предложена Хинтоном еще в 2006 году и опубликована на природе.
В то время основной ролью, предложенной этой структурой, была не сегментация, а сжатие изображения и шумоподавление. Вход представляет собой изображение.После кодирования с пониженной частотой дискретизации получается ряд признаков, меньших, чем исходное изображение, что эквивалентно сжатию, а затем после декодирования идеальной ситуацией является восстановление исходного изображения. В этом случае, когда мы сохраняем изображение, нам нужно сохранить только одну функцию и один декодер. Я лично думаю, что эта идея довольно крутая. Точно так же эту идею можно использовать и для шумоподавления исходного изображения.Метод заключается в том, чтобы искусственно добавлять шум к исходному изображению на этапе обучения, а затем помещать его в кодек.Цель – восстановить исходное изображение.
Позже эта идея была использована в проблеме сегментации изображений, которая представляет собой структуру U-Net, которую мы видим сейчас.За три года, прошедшие с момента ее предложения, было много-много статей о том, как улучшить U-Net или FCN. Однако основная топология этой сегментированной сети остается неизменной. Например, Маска RCNN, предложенная Каймингом на ICCV в прошлом году, эквивалентна набору обнаружения, классификации и сегментации.Давайте подробнее рассмотрим его часть сегментации.На самом деле используется эта простая структура FCN. Это показывает, что эта "U-образная" структура кодирования и декодирования действительно очень лаконична, и самое главное, что она проста в использовании.
Кратко пробежимся по этой сетевой структуре знаменитостей, выделив сначала ее топологическую структуру, что облегчит анализ ее сути и устранит помехи многих деталей.
Вход — это изображение, а выход — результат сегментации цели. Продолжая упрощать, это изображение, кодирование или понижение частоты дискретизации, а затем декодирование, то есть повышение частоты дискретизации, а затем вывод результата сегментации. Основываясь на разнице между результатом и реальной сегментацией, для обучения этой сети сегментации используется обратное распространение. Можно сказать, что самыми захватывающими частями U-Net являются следующие три части:
- субдискретизация;
- повышение частоты дискретизации;
- skip connection (Это конкатенация степеней признаков одного и того же масштаба, полученных путем понижения и повышения дискретизации в измерении канала, конкатенация)
Продолжение на этом рисунке представляет собой интуитивно понятный процесс обработки модели.Выходные и входные размеры задачи сегментации одинаковы, что касается сплошной линии вниз, это означает, что изображение необходимо подвергнуть субдискретизации (процесс кодирования), а сплошной линии вверх линия означает, что изображение обрабатывается Upsampling (процесс декодирования), Unet, описанный в предыдущей статье, очень хорошо отражает этот процесс.
Гиперссылка
2 Развернуть
Основное предзнаменование завершено. Глядя на эту топологию, очень широкая проблема:
Действительно ли в этой топологии трехлетней давности нет ничего плохого?
За последние три года U-Net получил более 2500 цитирований, а FCN — почти 6000. Какие улучшения вы вносите? Если бы вас попросили улучшить эту классическую структуру, на что бы вы обратили внимание?
Первый вопрос: насколько уместна глубина?
Здесь я хочу подчеркнуть, что во многих документах предлагаются предлагаемые сетевые структуры, включая множество деталей, таких как какую свертка использовать, сколько слоев использовать, как понижать дискретизацию, какую скорость обучения, какой оптимизатор использовать, этиВсе они являются относительно интуитивными параметрами.На самом деле, эти параметры, приведенные в статье, не обязательно являются лучшими, поэтому нет смысла обращать внимание на эти параметры.Для сетевой структуры нам действительно нужно обратить внимание на то, что информация, которую передает его дизайн. Возьмем, к примеру, U-Net, структура, приведенная в оригинальной статье, заключается в том, что исходное изображение подвергается четырехкратной понижающей и четырехкратной повышающей дискретизации для получения результата сегментации.На самом деле, почему четыре раза? Автору это нравится, или набор данных, используемый автором в то время, эффект от четырех понижений дискретизации хороший, мы также можем быть более профессиональными, рецептивное поле или размер рецептивного поля четырех понижений разрешения как раз подходит для обработки изображения. Или даунсемплинг в четыре раза больше подходит для размера входного изображения и т.д. Причин много, но вы в это верите? Не так.
Сначала я приведу сеть сегментации под названием PSPNet, опубликованную на CVPR в 2017 г. Вы обнаружите, что общая архитектура по-прежнему похожа на U-Net, но количество субдискретизаций уменьшено.Конечно, они также нацелены на повышение сложности сети. ссылка для захвата промежуточной функции.
Если вы считаете, что этой работы недостаточно, чтобы показать, что 4-кратное понижение дискретизации не требуется, давайте взглянем на недавнюю статью о сегментации изображений группой Йошуа Бенжио, Это предложенная ими структура, называемая Тирамису.Это также U-образная структура, но вы обнаружите, что они используют только три понижения частоты дискретизации. Так какой глубины она должна быть?Чем глубже, тем лучше? Все еще открытый вопрос.
Первое сообщение, которым я хочу поделиться: обратите внимание на общее направление статьи и не ограничивайтесь деталями в статье. Подобная настройка подробных параметров является относительно простой методологией глубокого обучения, которая легко может стоить вам много времени и в конечном итоге не повышает ваш собственный уровень научных исследований.
Итак, мы возвращаемся к вопросу о том, насколько глубоко нам нужно идти. На самом деле, это очень гибко.Одним из задействованных моментов является экстрактор функций.Почему U-Net и FCN успешны, потому что это эквивалентно предоставлению сетевой структуры, какой экстрактор функций использовать, просто случайно. В это время появился Гао Инь, и различные микроинновации в кодировщиках были бесконечны.Самым прямым из них было использование звездной структуры в ImageNet.BottleNeck, Residual в предыдущие годы и DenseNet в прошлом году, Это быстрее, чем кто-либо, кто публикует статья. Этот тип документа эквивалентен прогрессии от 1 до 10, в то время как предлагаемая низкоуровневая структура U-Net — от 0 до 1. В качестве отступления, такая статья от 1 до 10, цитируемость часто не выше статьи от 0 до 1, потому что неосознанно ограничивает собственное пространство расширения, например, я сказал, я пишу статью, Сказано, что экстрактор признаков должен быть плотным блоком, или это должен быть остаточный блок с хорошим эффектом, а затем имя DenseUNet или ResUNet, и это конец. Так что вопрос о том, для чего используется магистраль, на этот раз не в центре моего выступления.
Что касается вопроса о том, насколько он глубок, есть расширенный вопрос: нужна ли даунсэмплинг для сегментации сети? Причина, по которой задается этот вопрос, заключается в том, что, поскольку вход и выход имеют карту одинакового размера, зачем беспокоиться о понижении, а затем о повышении?
Более прямой ответ - это, конечно, теоретическое значение субдискретизации. Позвольте мне просто прочитать его вслух. Это может повысить устойчивость к некоторым небольшим нарушениям входного изображения, таким как перевод изображения, вращение и т. Д., Снизить риск переобучения, уменьшить объем вычислений и увеличить размер рецептивного поля. Самая большая функция повышающей дискретизации на самом деле состоит в том, чтобы восстановить и декодировать абстрактные признаки до размера исходного изображения и, наконец, получить результат сегментации.
Объяснения этих теорий разумны.На мой взгляд, на этапе выделения признаков поверхностная структура может захватывать некоторые простые черты изображения, такие как границы и цвета, в то время как глубокая структура имеет большое рецептивное поле и пропускает больше операции свертки, и некоторые абстрактные признаки, неясные и неясные в изображении, могут быть уловлены, что является все более и более метафизическим. Тогда я собираюсь задать более острый вопрос: поскольку важны как поверхностные, так и глубокие функции, почему U-Net возвращается только после 4 слоев, то есть только для захвата глубоких функций. Я не знаю, прояснился ли сам вопрос. Проблема на самом деле такова, посмотрите на эту картинку, так как,,,Захваченные функции важны, почему я должен перейти кКак насчет повышения частоты дискретизации после того, как слой закончился?
3 основной корпус
Следуя этой логике, интересно, сможете ли вы угадать, что будет помещено на следующей странице? Здесь вы можете нажать паузу. Вы готовы выйти? Если все другие помехи исключены, поскольку мы не знаем, насколько глубоко нам нужно быть, будет ли получен ряд таких U-сетей с различной глубиной. Это нетрудно понять. Чтобы выяснить, чем глубже, тем лучше, мы должны поэкспериментировать с ними и посмотреть, как работают их соответствующие сегментации:
Не смотрите сначала на два последних UNet++, просто посмотрите на производительность этой U-Net с разной глубиной Мы видим, что чем глубже, тем лучше, сообщение, стоящее за этим, заключается в том, что важность функций на разных уровнях важна для разные данные.Наборы разные.Это не значит, что я разрабатываю 4-слойную U-Net, точно так же, как структура, приведенная в оригинальной статье, которая должна быть оптимальной для задачи сегментации всех наборов данных.
Тогда следующий шаг является ключевым, цель в нашем уме очень ясна, то есть использовать поверхностные и глубокие функции! Но вы не можете обучить этих U-Nets, их слишком много. Что ж, здесь вы можете сделать паузу и подумать.Если вы хотите приехать, как вы используете эти U-сети разной глубины, каждая из которых может захватывать разные уровни функций.
Это легко, когда я печатаю картинку.
Давайте посмотрим, соединит ли это все U-сети от 1 до 4 слоев вместе. Давайте рассмотрим их подмножество, включая одноуровневую U-Net, двухуровневую U-Net и так далее. Преимущество этой структуры в том, что независимо от того, какая у вас глубина фичи эффективна, я просто использую ее для вас, а сеть сама узнает важность фич разной глубины. Второе преимущество заключается в том, что он разделяет экстрактор признаков, то есть вам не нужно обучать кучу U-Net, а только один кодировщик, и его признаки на разных уровнях восстанавливаются разными путями декодера. Этот кодировщик по-прежнему можно гибко заменить различными магистралями.
К сожалению, эту сетевую структуру нельзя обучить, потому что через эту красную область не пройдет никакой градиент, потому что она отключена от функции потерь при обратном распространении. Я на мгновение останавливаюсь, и давайте подумаем, так ли это.
Эту проблему невозможности тренировать с градиентным спуском можно понять, внимательно посмотрев на пунктирную линию на рисунке Элементы в треугольнике не связаны с конечным выходом.
Извините, если бы это были вы, как решить эту проблему?
На самом деле, поскольку структура устроена таким образом, думать об этом по-прежнему естественно Я предлагаю здесь два возможных решения.
Первый заключается в использовании глубокого контроля для создания градиента, не так ли? Я расскажу об этом позже.
Второе решение состоит в том, чтобы изменить структуру, чтобы она выглядела следующим образом:
Без логики, о которой я упоминал выше, эту структуру может быть не так просто представить, но если вы будете следовать этой идее шаг за шагом, хотя эту структуру нельзя назвать очевидной, ее можно рассматривать как нечто само собой разумеющееся. Моя история еще не закончена, но позвольте мне упомянуть, что эта структура была предложена командой Калифорнийского университета в Беркли и опубликована в этом году (2019) на CVPR, представляет собой устный доклад под названием «Агрегация глубокого уровня».
Некоторые друзья могут быть ошеломлены, и все, они отправили CVPR! ? И да и нет. . . Это просто улучшение структуры сети сегментации, которую они представили в документе, они также проделали другую работу, включая классификацию и обнаружение границ. Но главная идея — это только что перечисленные, а цель — интегрировать характеристики разных уровней.
Это просто отступление, давайте продолжим рассматривать эту структуру, простите, в чем, по-вашему, проблема?
Для того, чтобы ответить на этот вопрос, теперь сравним ее с вышеописанной структурой, и нетрудно обнаружить, что эта структура принудительно удаляет длинное соединение, которое идет с самим U-Net. На его месте ряд коротких соединений. Тогда давайте взглянем на длинное соединение, которым гордится U-Net (skip-connection) Каковы преимущества.
Мы считаем, что длинное соединение в U-Net необходимо. Оно связывает много информации входного изображения и помогает восстановить потерю информации, вызванную даунсэмплингом. В определенной степени, я думаю, это связано с операцией остаточной ошибки. , Очень похоже, то есть остаточная операция x+f(x). Не знаю, все ли согласны с этой точкой зрения. Поэтому я предлагаю дать решение, которое сочетает в себе длинные и короткие соединения. Простите, как этот план выглядит в вашем воображении? Пауза здесь.
На самом деле, я чувствую, что это сумасшедшая функция склейки и склейки. . .
В принципе, такая структура не работала, не так ли? Давайте сначала сравним U-Net, которая на самом деле является подмножеством этой структуры. Это структура UNet++, которую мы опубликовали в MICCAI. Восторженные пользователи сети могут спросить, ваш UNet++ слишком похож на только что упомянутую структуру статьи CVPR.Позвольте мне сказать, что эта работа и исследование Калифорнийского университета в Беркли являются полностью независимыми работами, что также является прекрасным совпадением. Идея UNet++ была сформирована в начале этого года.Статья CVPR была видна, когда мы провели встречу в июле этого года.В то время UNet++ был нанят, так что это было равносильно тому, чтобы быть предложенным в то же время . Кроме того, по сравнению с бумагой CVPR, у меня есть более захватывающий момент, спрятанный в спину, и я просто оставил предзнаменование.
Что ж, когда вы сейчас смотрите на UNet++, интересно, не возникнет ли вдруг вопрос:
Эта сеть лучше, чем U-Net, но на сколько параметров эта сеть увеличивает, а выделенные жирным шрифтом параметры больше, чем U-Net?
Этот вопрос очень острый. На самом деле, чтобы ответить на него, необходимо спланировать эксперимент. Как спланировать этот эксперимент? Наш подход заключается в том, чтобы принудительно увеличить количество параметров в U-Net, чтобы сделать его шире, то есть увеличить количество ядер свертки в каждом слое. Поэтому мы разработали эталонную структуру, называемую широкой U-Net.Давайте сначала посмотрим, что количество параметров UNet++ составляет 9,04 млн, а у U-Net — 7,76 млн, что почти на 16% больше параметров, поэтому широкая U-Net мы на момент проектирования пусть будут параметры аналогичные UNet++, и чуть больше, чтобы доказать, что увеличить количество параметров не безмозгло, и модельный эффект будет лучше.
Я лично считаю, что эта контратака не сильна, потому что увеличивать параметры таким образом несколько формально, и следует найти лучший метод сравнения. Несмотря на недостатки, давайте сначала посмотрим на результаты.
По имеющимся результатам делаю вывод, что простое расширение сети и повышение параметров не сильно улучшит эффект, очень важно как использовать параметры на острие. Тогда дизайн UNet++ представляет собой решение, использующее параметры на границе.
Мы оглядываемся назад на этот UNet ++. Для этой основной структуры мы дали некоторые комментарии в статье. Грубо говоря, это заполнение исходной пустоты U-Net. Преимущество состоит в том, что он может захватывать функции на разных уровнях и передавать их через функции.Интеграция суперпозиции означает, что разные уровни функций или рецептивные поля разных размеров имеют разную чувствительность к целевым объектам разных размеров.Например, функции с большими рецептивными полями могут легко идентифицировать большие объекты.Однако в фактическая сегментация, информация о границах больших объектов и сами маленькие объекты легко теряются из-за понижения и повышения частоты дискретизации глубокой сети снова и снова. Другая интерпретация заключается в том, что если вы посмотрите на процесс наложения признаков одного из слоев по горизонтали, то увидите, что это похоже на структуру DenseNet, которая была очень популярна в прошлом году. структура при просмотре по горизонтали. Это очень интересно, улучшение эффекта сегментации UNet ++ для U-Net может быть таким же, как улучшение эффекта классификации DenseNet для ResNet. Поэтому в интерпретации мы также ссылаемся на некоторые преимущества плотного соединения, такие как повторное использование функций и так далее.
Все эти интерпретации являются интуитивным пониманием.На самом деле, в глубоком обучении есть причины, по которым определенная структура лучше, чем определенная структура, или лучше добавить эту операцию, чем ничего не делать.Много раз в этом есть привкус метафизики , а также много работы по изучению интерпретируемости глубоких сетей. Что касается основной структуры UNet++, я не хочу тратить время на детали.
4 оргазма
Следующая часть, о которой я собираюсь рассказать, очень интересна. Если вы дадите мне три минуты на этот обмен, я могу провести здесь две с половиной минуты. Когда я говорил об этом, я оставил предзнаменование, сказав, что средняя часть этой структуры не получит градиент при обратном распространении, если для этого используется только крайняя правая потеря.
Как я только что сказал, самым прямым решением является глубокая супервизия, то есть глубокая супервизия. Эта концепция не нова. Существует множество U-сетей, которые также полезны для улучшения статьи. Конкретная операция реализации заключается в добавлении свертки 1x1 после [формула], [формула], [формула], [формула] на рисунке Ядро эквивалентно надзору за каждым уровнем или выходом U-Net из каждой ветви.
Я предоставлю вам для сравнения три структуры Deep Supervision, одна такая, вторая добавлена к структуре, предложенной Калифорнийским университетом в Беркли, а последняя добавлена в UNet++, какая из них, по вашему мнению, лучше? Это открытый вопрос, я не буду его здесь обсуждать, последний используется в нашей статье.
Я хочу сказать не об особой структуре глубокой супервизии, а о том, что я хочу сказать. Преимущества глубокой супервизии также объясняются во многих работах. заполненная структура U-Net., которая дает одно из тех больших преимуществ. Настоятельно рекомендуется здесь сделать паузу, подумайте, если я добавлю такого рода глубокую супервизию в подсети на разных уровнях в процессе обучения, какую пользу это может принести?
Два слова: обрезка.
Одновременно возникают три вопроса:
- Почему UNet++ можно обрезать
- как обрезать
- где выгода
Давайте посмотрим, почему обрезка возможна Эта картина особенно прекрасна. Обратите внимание на обрезанную часть, вы обнаружите, что на этапе тестирования, поскольку входное изображение будет распространяться только вперед, выбрасывание этой части не влияет на предыдущий вывод, а на этапе обучения, поскольку и прямое, и обратное распространение обрезанная часть поможет другим частям обновить вес. Эти два предложения одинаково важны, повторю еще раз, во время тестирования вырезанная часть не влияет на оставшуюся структуру, во время обучения вырезанная часть влияет на оставшуюся часть. Что это значит?
Потому что в процессе глубокого контроля вывод каждой подсети фактически является результатом сегментации изображения, поэтому, если вывод небольшой подсети достаточно хорош, мы можем произвольно отрезать эти избыточные части.
Давайте посмотрим на эту анимацию.Для удобства определения мы назовем каждую из оставшихся подсетей как UNet++ L1, L2, L3, L4 в соответствии с их глубиной, которые позже будут называться L1~L4. Что такое идеальное государство? Конечно, это L1.Если выход L1 достаточно хорош, сеть сегментации после разрезания станет очень маленькой.
Эта обрезка на самом деле очень проста, намного проще, чем правила обрезки деревьев решений. Поскольку Unet++ даст четыре вывода, если вывод третьего уровня достаточно точен, то нет необходимости иметь четвертый уровень на этапе вывода. Помнится, такое понятие вспомогательного вывода было еще со времен GoogleNet. GoogleNet - это классификационная сеть, поэтому его называют вспомогательным классификатором (кажется). Профессиональное понятие должно быть глубоким надзором. Если интересно, можете проверить это из.
На этапе обучения нам нужны четыре уровня руководства по функциям для обучения, поэтому для обучения по-прежнему используется полная модель. На этапе вывода автор считает, что можно пожертвовать небольшой точностью, чтобы добиться большого уменьшения параметров модели (короче, этот прием обрезки для меня бесполезен, все это видят). Что ж, продолжим смотреть объяснение автора позже
Здесь я хочу задать два вопроса:
- Зачем обрезать ветки во время тестирования, вместо того, чтобы напрямую пройти обучение с обрезкой L1, L2 и L3?
- Как вы решаете, сколько резать?
Что касается того, почему мы должны обрезать ветки во время тестирования, вместо того, чтобы напрямую брать обрезанное обучение L1, L2 и L3, наше объяснение фактически написано на странице на предыдущей странице.. Обрезанная часть находится в обратном распространении во время обучения. если вы напрямую тренируете L1, L2 и L3, это эквивалентно обучению только U-сетей разной глубины, и конечный результат будет очень плохим.
На второй вопрос, как решить, сколько нужно сократить, по-прежнему относительно легко ответить. Потому что при обучении модели данные будут разделены на обучающий набор, проверочный набор и тестовый набор, Обучающий набор должен очень хорошо подходить, а тестовый набор нельзя трогать, поэтому мы будем использовать подсеть в наборе проверки. Результат определяет, сколько резать. Так называемый проверочный набор — это данные, отделенные от обучающего набора в начале для наблюдения за процессом обучения.
Что ж, поговорив об идее, давайте посмотрим на результаты.
Давайте посмотрим на параметры сети L1~L4, которые намного хуже, L1 всего 0,1M, а L4 имеет 9M.По идее, если я доволен результатами L1, то параметры, которые можно вырезать модели достигают 98,8%. Однако, согласно нашим четырем наборам данных, эффект L1 не так хорош, потому что он слишком мелкий. Но есть три набора данных, которые показывают, что результаты L2 и L4 очень близки, то есть для этих трех наборов данных на этапе тестирования нам не нужно использовать 9M сетей, а достаточно половины M сетей.
Оглядываясь назад на вопрос, который я задал в начале, насколько глубокой и подходящей должна быть сеть, ясна ли эта картина с первого взгляда. Глубина сети связана со сложностью набора данных.Среди четырех наборов данных второй, сегментация полипов, является самым сложным.Вы можете видеть ординату, которая представляет индекс оценки сегментации, чем больше, тем лучше. , другие могут достигать довольно высоких значений, но только сегментация полипов составляет всего около 30. Для более сложных наборов данных видно, что чем глубже сеть, тем результаты ее сегментации постоянно растут. Для большинства простых задач сегментации вам на самом деле не нужно быть очень глубоким, и очень большие сети могут обеспечить очень хорошую точность.
По оси абсцисс отложено время, необходимое для разделения 10 000 изображений на TITAN X (Pascal) с одной видеокартой 12G на этапе тестирования. Мы видим, что с разными размерами моделей время испытаний сильно различается. Если сравнивать L2 и L4, то разница аж в три раза.
По скорости теста будет понятнее с этой картинкой. Мы подсчитали, сколько графиков можно сегментировать за 1 секунду с разными моделями. Если вместо L4 использовать L2, то скорость действительно можно утроить.
Наиболее распространено применение обрезки на мобильных телефонах.По параметрам модели, если эффект, полученный L2, аналогичен эффекту L4, память модели может быть сохранена в 18 раз. Все-таки очень солидная сумма.
Я думаю, что эта часть обрезки является большим улучшением по сравнению с исходной U-Net.Первоначальная структура была слишком жесткой и не позволяла эффективно использовать функции разных уровней.
Подводя краткий итог, первое преимущество UNet++ — это повышение точности, которое должно быть достигнуто за счет интеграции функций на разных уровнях Второе — гибкая структура сети с глубоким контролем, так что глубокая сеть с огромным количеством параметров можно Существенно уменьшить количество параметров в допустимом диапазоне точности.
5 Последнее упоминание
Снова поместите нашу структуру UNet++