Эй, я слишком устал, просто отдохни.
чат
В мгновение ока до 2021 года остался всего один месяц.Оглядываясь назад на ноябрь, особого выигрыша нет.Прокрастинация очень серьезная, и она всегда находится между учебой и нежеланием учиться. Суть SGD в том, что градиент достаточно велик, чтобы работать все время, и он всегда может медленно сходиться. Я не всегда могу найти определенное направление, чтобы продолжать усердно работать, постоянно колеблясь туда-сюда. «Простые, грубые, но работающие» вещи, мне это нравится. Очень похоже на мою любимую поговорку: «Правила просты для понимания, грубы, но совершенны!» Сосредоточьтесь на общей картине, а не на деталях.
ViT
предисловие
Оглядываясь на три месяца назадПервое знакомство с ViT
Бумага:АР Вест V.org/ABS/2010.11…Код:GitHub.com/Google – Горячие цвета…
Эта статья имеет 1629 цитирований на данный момент.
Название диссертации: Изображение стоит 16x16 слов: трансформеры для распознавания изображений в масштабе
Почему заголовок называется 16✖️16 слов?N=224✖️224 Ш=224/16 Н=14 N=14✖️14=196
Это эквивалентно делению изображения 224✖️224 на 196 фрагментов по 16✖️16. В настоящее время 196 фрагментов эквивалентны слову НЛП, образующему целое.
Трансформеры выполняют крупномасштабное распознавание изображений.
Два вида индуктивного смещения, о которых часто говорит CNN
- Местонахождение. То есть сверточная нейронная сеть выполняет скользящую свертку со скользящими окнами, поэтому предполагается, что соседние области изображения имеют смежные признаки. Это предположение очень разумно.
- Эквивариантность перевода. То есть, независимо от того, выполняется ли сначала свертка или сначала выполняется перевод, конечный результат одинаков.
Преобразователь не имеет предварительной информации, он изучается сам по себе.
Vit предварительно обучен общедоступному набору данных ImageNet-21k и собственному набору данных Google JFT-300M. Оказывается, крупномасштабное предварительное обучение имеет хороший индуктивный уклон.
Подробное объяснение бумаги
Предварительное обучение на крупномасштабных наборах данных, а затем переход на наборы данных малого и среднего размера работает очень хорошо.
На примере ViT-B/16 исходное изображение (224✖️224) разбивается на фрагменты размером 16✖️16. После деления будет получено (2242/162)=142=1961 фрагментов, после чего каждый фрагмент будет быть линейно нанесенным на карту.Фрагмент отображается в одномерный вектор.Взяв ViT-B/16 в качестве примера, форма данных каждого фрагмента имеет форму [16, 16, 3], а вектор длины 768 получается путем отображения.
Для стандартного модуля Transformer на вход подается токеновая (векторная) последовательность, то есть двумерная матрица [num_token, token_dim]. Для данных изображения его формат данных — [H, W, C], который представляет собой трехмерную матрицу. Очевидно, это не то, чего хочет модуль Transformer. Следовательно, необходимо сначала преобразовать данные через слой внедрения.
Перед входом в кодировщик Transformer необходимо добавить токен класса и встраивание позиции. В это время [196 768] --> [197 768]. Токен класса здесь относится ксеть BERT(Прочитал, статью еще не обновлял, мне реально лень).
Каркас модели ViT состоит из трех слепков моделей:
- Линейная проекция сглаженных участков (встраивающий слой)
- Transformer encoder
- Голова MLP (структура уровня, в конечном итоге используемая для классификации)
MLP Head
Обратите внимание ⚠️, перед Transformer Encoder есть слой Dropout, а после него слой. При обучении ImageNet-21K он активируется Linear+TanH+Linear, но при переходе на ImageNet-1K или собственный набор данных остается только один Linear.
Почему **GAP (Globally Average Pooling)** не может получить окончательную функцию на N выходных данных, зачем добавлять токен класса в выходные данные?
Путем экспериментов был сделан вывод, что можно использовать оба метода: вы можете использовать GAP, чтобы получить глобальную функцию для классификации, или вы можете использовать токен класса. Автор должен проиллюстрировать, что стандартный Transformer также может делать видение.
Формула (1) — результат добавления токена класса; формула (2) — результат многоголового самовнимания; формула (3) — общий результат; формула (4) — вывод, соответствующий токену класса как общее изображение Особенность, сделать окончательную классификацию.
эксперимент
- Слои - это количество раз, когда блок кодировщика повторно складывается в кодировщик преобразователя;
- Скрытый размер — это диммер (длина вектора) каждого токена после прохождения слоя Embedding;
- Размер MLP — это номер первого полностью подключенного узла блока MLP в Transformer Encoder (в четыре раза больше скрытого размера);
- Heads представляет количество головок Multi-Head Attention в Transformer.
Меньшие размеры патчей дороже вычислять, потому что увеличивается длина последовательности.
Предварительное обучение на наборе данных Google JFT или на ImageNet-21K показало небольшую разницу в результатах. Автор сравнивает с другой стороны, а именно с количеством тренировочных дней на TPUv3.
По мере увеличения размера набора данных производительность Vit становится все лучше и лучше. Делается вывод, что CNN лучше подходит для небольших наборов данных, а Vit лучше, когда размер набора данных достигает ImageNet-21k.
Использование преобразователя зрения для обучения на малых выборках — очень перспективное направление..
Слева показано среднее влияние на пять наборов данных, и обнаружено, что модель сейчас не насыщена. Справа производительность набора данных ImageNet. Hybrid — это традиционная гибридная модель CNN и Transformer.
Первые 28 главных компонент.
Косинусное сходство. Размер патча здесь 224/32=7 из 32✖️32, поэтому размер 7✖️7.
Голов здесь 16, то есть каждому слою соответствует 16 точек, а всего слоёв 24.
Если количество тренировок небольшое, точность гибридной модели немного выше, после итерации большего количества эпох точность ViT превысит гибридную модель ViT.
Обратите внимание ⚠️, там, где конечный эффект одинаков, скорость обучения разная, поэтому вам нужно хорошо настроить параметры,Будь отличным алхимиком.
Неиспользование кодирования положения намного хуже, чем использование кодирования положения, но использование кодирования относительного положения похоже на кодирование абсолютного положения, поэтому можно использовать как кодирование относительного положения, так и кодирование абсолютного положения. Поскольку блоки изображения небольшие, разница между расположением и объединением небольших блоков незначительна.
Между 1D и 2D эффектами нет большой разницы. 1D используется в исходном коде.
В этой статье также проводится крупномасштабное обучение с самоконтролем.
Применение ВИТ
- Обнаружение цели:ViT-FRCNN
- Сегментация изображения:SETR
- Многомасштабное слияние:Swin Transformer