Недавно в своих странствиях в темах для исследований и статьях по vision набрела на задачу детекции сгенерированных изображений (fake image detection). В этом и следующем посте я опишу то, что это за задача, и почему она не так проста, как кажется. А дальше постараюсь суммаризовать идеи, на которых пытаются строить решение этой задачи.
Итак, задача fake image detection: почему она не так проста, как кажется:
Задача fake image detection — отличить изображения, сгенерированные нейросетью, от реальных. В свете того, что в последнее время выходит много классных open-source моделек для генерации картинок, и генерируют они уже довольно качественно (вы только посмотрите на IF!), задача начинает быть актуальной. Вспомним хотя бы картинку Папы Римского в пуховике и картинки Трампа за решеткой: насколько я слышала, на них реально повелось много народу.
Несмотря на актуальность задачи, с исследовательской точки зрения подступиться к ней не так просто. Главный нюанс — непонятно, как построить датасет и систему оценки моделей.
Смотрите, мы, по сути, решаем задачу бинарной классификации: отличаем фейки от реальных картинок. Логично, что датасет должен состоять из двух видов картинок: реальных и фейковых. И вот тут начинаются проблемы:
1️⃣ Моделей для генерации картинок много разных. И постоянно выходят новые. Если собрать датасет картинок из конкретных моделей и учить на нем нейронку, есть риск переобучить ее на эти конкретные модели. И когда выйдет новая генеративка IF-2.0, на ней детекция фейков работать не будет. Ну и смысла в таком детекторе, который детектит только картинки из конкретных моделей, нет.
Эту проблему чаще всего решают так: собирают датасет фейковых картинок из нескольких моделей. И в тренировочной части оставляют фейки только из одной модели (например, ProGAN). А в тестовой части данных остаются фейки из всех других моделей — SD, Glide, других ГАНов, DALL-E и т.п. Таким образом проверяется то, что ваша модель для детекции может быть обучена на фейках из одной конкретной модели, но при этом научиться детектить фейки и из других генеративок.
Такой принцип разделения данных на трейн и тест сейчас, насколько я вижу, стандартный для статей в области детекции фейков.
2️⃣ Вторая проблема связана с балансированием фейковых и реальных картинок в датасете. Мы хотим, чтобы наша модель научилась отличать любые фейковые картинки от любых реальных. Для этого нужно убедиться, что в ваших данных реальные картинки отличаются от фейковых именно теми характеристиками, которые влияют на "фейковость". А в остальном распределения фейковых и реальных картинок должны быть одинаковы. Если сделать датасет из реальных картинок попугаев и фейковых картинок слонов, нейросеть прекрасно обучится их разделять, но что-то мне подсказывает, что на картинках вне этого датасета она хорошо работать не будет)
А сбалансировать датасет сложно. Нужно придумать такой принцип генерации данных, чтобы можно было из разных генеративных моделей генерировать максимально разнообразные, но похожие между собой по распределению данные. Задача еще усложняется тем, что некоторые модели генерят картинки на основе текста, а некоторые — нет.
Продолжение ⬇️
Итак, задача fake image detection: почему она не так проста, как кажется:
Задача fake image detection — отличить изображения, сгенерированные нейросетью, от реальных. В свете того, что в последнее время выходит много классных open-source моделек для генерации картинок, и генерируют они уже довольно качественно (вы только посмотрите на IF!), задача начинает быть актуальной. Вспомним хотя бы картинку Папы Римского в пуховике и картинки Трампа за решеткой: насколько я слышала, на них реально повелось много народу.
Несмотря на актуальность задачи, с исследовательской точки зрения подступиться к ней не так просто. Главный нюанс — непонятно, как построить датасет и систему оценки моделей.
Смотрите, мы, по сути, решаем задачу бинарной классификации: отличаем фейки от реальных картинок. Логично, что датасет должен состоять из двух видов картинок: реальных и фейковых. И вот тут начинаются проблемы:
1️⃣ Моделей для генерации картинок много разных. И постоянно выходят новые. Если собрать датасет картинок из конкретных моделей и учить на нем нейронку, есть риск переобучить ее на эти конкретные модели. И когда выйдет новая генеративка IF-2.0, на ней детекция фейков работать не будет. Ну и смысла в таком детекторе, который детектит только картинки из конкретных моделей, нет.
Эту проблему чаще всего решают так: собирают датасет фейковых картинок из нескольких моделей. И в тренировочной части оставляют фейки только из одной модели (например, ProGAN). А в тестовой части данных остаются фейки из всех других моделей — SD, Glide, других ГАНов, DALL-E и т.п. Таким образом проверяется то, что ваша модель для детекции может быть обучена на фейках из одной конкретной модели, но при этом научиться детектить фейки и из других генеративок.
Такой принцип разделения данных на трейн и тест сейчас, насколько я вижу, стандартный для статей в области детекции фейков.
2️⃣ Вторая проблема связана с балансированием фейковых и реальных картинок в датасете. Мы хотим, чтобы наша модель научилась отличать любые фейковые картинки от любых реальных. Для этого нужно убедиться, что в ваших данных реальные картинки отличаются от фейковых именно теми характеристиками, которые влияют на "фейковость". А в остальном распределения фейковых и реальных картинок должны быть одинаковы. Если сделать датасет из реальных картинок попугаев и фейковых картинок слонов, нейросеть прекрасно обучится их разделять, но что-то мне подсказывает, что на картинках вне этого датасета она хорошо работать не будет)
А сбалансировать датасет сложно. Нужно придумать такой принцип генерации данных, чтобы можно было из разных генеративных моделей генерировать максимально разнообразные, но похожие между собой по распределению данные. Задача еще усложняется тем, что некоторые модели генерят картинки на основе текста, а некоторые — нет.
Продолжение ⬇️