Как преобразовать эмбеддинг текста в понятный сверточным слоям?
(юзаю pytorch, но возможно это и не важно)
Уже почти пол года я пытаюсь найти способ создать текстовый эмбеддинг фиксированной длины. Совершенно случайно, наткнувшись на статью про архитектуры kandinsky и dall-e я нашел для себя RoBERTa. С помощью этой сети я смог получить эмбеддинг из любого текста с размерностью [1, 1024]. Конечно, идея может показаться тупой, но я запланировал сделать свою архитектуру для генерации картинок. По идее, после роберты должен стоять UNet, а он, как известно, работает на сверточных слоях. Как мне правильно поменять эмбеддинги, что бы юнет их спокойно кушал и генерировал мне хорошие картинки. Менять размер на [1, 32, 32] и увеличивать размер с TransposeConv2d я не стал (как мне кажется по очевидным причинам)
Свёрточные слои работают только с изображениями (ну или с картами особенностей, что частный случай изборажений). Они ищут локальные взаимосвязи между соседними элементами изображения.
Эмбеддинг изображением не является, в нём нет локальных вазимосвязей между элементами - он имеет смысл только при рассмотрении всех элементов эмбеддинга.
Таким образом, пытаться скормить эмбеддинг напрямую в свёрточный слой довольно-таки бессмысленно.
ermak148, вот это хороший вопрос. Есть вариант с автоэнкодером, который учится давать одинаковое embedding-представление для изображения и для его текстового описания. Тогда половина-декодер автоэнкодера сможет по embeddingу дать какой-то полезный набросок, который будет в дальнейшем дорабатываться diffusion-алгоритмом.