Вопрос или проблема
Я разработал модель глубокого обучения, обученную с нуля на фруктах и овощах. Однако, так как данные ограничены, я могу охватить только несколько различных типов фруктов и овощей с помощью этой модели. Тем не менее, точность по этим категориям очень высокая: 90% точности на обучающей и валидационной выборках и около 80% точности на тестовой выборке (из другого набора данных).
Теперь я попытался использовать эту обученную модель на невидимых данных. Я убрал слой softmax и оставил только остальные слои модели. Идея состоит в том, чтобы использовать вектор признаков и косинусное сходство для сравнения овощей.
Предположим, что бананы были в моем оригинальном наборе данных, но яблок и апельсинов не было. Я использую модель, чтобы извлечь признаки яблок и апельсинов из Google, затем сравниваю векторы яблок с бананами. Я ожидал бы, что косинусное сходство будет очень низким, так как это очень разные овощи. Тем не менее, я получаю косинусное сходство 0,9, что очень запутано. Чтобы проверить свою рассудительность, я использовал предобученную модель Mobilenet v2 и также убрал последний слой. Затем я использовал тот же метод для извлечения признаков яблок и апельсинов. Теперь у них только сходство около 0,5, что намного более разумно.
У меня есть несколько идей, почему это может происходить, возможно, модель не смогла обобщить категории, представленные ей во время обучения, или она не изучила похожие признаки, которые можно было бы применить к яблокам и апельсинам, так что не смогла различить между ними. Однако у меня нет точного объяснения. Есть ли у кого-нибудь идея, почему это происходит, и/или как я могу предотвратить это?
Различение формы начинается на начальных слоях. Информация о цвете используется на более поздних слоях. В вашей сети меньше слоев, попробуйте увеличить число слоев (сохраняя количество фильтров низким на начальных слоях).
Кроме того, если вы ищете модели сходства, обратите внимание на контрастное обучение или ArcFace loss или модели типа сиамских сетей. Если вы хотите остаться на классификационных сетях, посмотрите на GeM pooling.
Лучший способ будет использовать MobileNet (или лучшие сети, такие как EffNetB4) для дообучения с использованием GeM pooling.
Ответ или решение
Для решения проблемы с нулевым обнаружением (zero-shot detection) и извлечением векторных признаков из вашей модели глубокого обучения, обученной на фруктах и овощах, давайте рассмотрим несколько ключевых аспектов.
1. Понимание проблемы
Вы уже заметили, что после удаления слоя softmax и извлечения векторов признаков, ваша модель дает высокое значение косинусного сходства (0.9) между совершенно различными объектами, такими как яблоки и апельсины. Это может быть вызвано тем, что ваша модель не научилась обобщать на недоступные во время обучения классы. Ваша модель, возможно, создает признаки, которые не отражают общее различие между различными типами фруктов.
2. Варианты решения
Увеличение сложности модели:
- Увеличение количества слоев может помочь вашей модели учиться более сложным и абстрактным признакам, которые могут быть полезны для распознавания новых классов. Начните с добавления слоев между начальным и последним слоями, сохраняя при этом низкое количество фильтров на начальных уровнях, чтобы не увеличивать количество параметров чрезмерно.
Использование контрастивного обучения:
- Рассмотрите возможность применения методов контрастивного обучения или архитектуры типа Siamese. Эти подходы нацелены на минимизацию расстояний между похожими классами и максимизацию расстояний между различными классами, что может улучшить распознавание новых примеров.
Pooling Layer:
- Если вы хотите оставаться в рамках классификационных сетей, добавление GeM pooling (Generalized Mean Pooling) может улучшить обобщающую способность вашей модели, так как этот вид пулинга позволяет лучше агрегировать информацию из различных пространств характеристик.
Файнтюнинг предобученных моделей:
- Использование предобученных моделей, таких как MobileNet или более современных, например, EfficientNetB4, и их дообучение на вашем наборе данных с добавлением GeM pooling, может значительно повысить качество извлеченных признаков. Предобученные модели часто имеют заранее обученные параметры на большом наборе данных, что позволяет им захватывать более универсальные признаки.
3. Практическое применение
Советуем вам провести несколько экспериментов с этими подходами:
- Дообучите вашу модель, увеличив количество слоев с низким количеством фильтров.
- Примените контрастивное обучение для более эффективного различения классов.
- Используйте предобученные модели для извлечения признаков, чтобы воспользоваться их обширными знаниями в распознавании изображений.
Следуя этим рекомендациям, вы должны увидеть улучшение в способности модели различать невидимые для нее классы, такие как яблоки и апельсины, и снизить случайное высокое значение косинусного сходства, которое вы наблюдали ранее.