Вопрос или проблема
Я пытаюсь обучить модель обнаружения объектов с помощью Mask-RCNN с Resnet50 в качестве основы. Я использую предобученные модели из библиотеки Torchvision PyTorch. У меня есть всего 10 изображений, которые я могу использовать для обучения. Из этих 10 изображений я использую 3 изображения для валидации. Для оценки я использую метод оценки, который применяется в наборе данных COCO, который также предоставляется в виде .py скриптов в репозитории TorchVision на GitHub.
Чтобы получить достаточное количество образцов для обучения, я переобучаю одни и те же 10 изображений в 100 раз, т.е. в конце концов у меня оказывается 1000 изображений, которые я могу использовать для обучения своей модели. Аналогичным образом, у меня оказывается 300 изображений, которые я могу использовать для валидации.
Теперь проблема в том, что я получаю 0% mAP после обучения и 0% полноты. У меня есть два вопроса:
В1. Почему mAP равен 0%?
Если это связано с тем, что я сильно переобучаю, то мой следующий вопрос:
В2. Разве переобучение не должно просто привести к переобучению модели и, следовательно, обеспечить более высокую точность как для обучения, так и для валидации в моем случае (так как я выбрал данные для валидации из самих данных для обучения)?
Сначала рассмотрите возможность использования увеличения данных, у вас будет несколько сотен новых изображений, с которыми можно работать, затем добавьте немного шумных изображений, чтобы избежать переобучения. Таким образом, вы получите лучшие результаты.
Судя по комментариям, похоже, что все, что вы хотите сделать, это обнаружить изображения, которые у вас есть. Это делает задачу простой.
Если данное изображение совпадает с изображением, которое у вас есть, верните информацию (например, категорию) для этого изображения. Если данное изображение не соответствует изображению, которое у вас есть, не возвращайте такую информацию.
На Python это будет что-то вроде этого.
if image in list_of_images:
return(label)
else:
return
Ответ или решение
Тренировка модели детекции объектов на всего 10 изображениях действительно представляет собой сложную задачу, и, как вы уже заметили, использование всего 10 изображений, даже если вы увеличите их количество за счет оверсэмплинга, может привести к проблемам с обучением. Давайте рассмотрим ваши вопросы более подробно.
Ответ на вопрос Q1: Почему результатом является 0% mAP?
-
Недостаточное количество данных для обучения: Даже после оверсэмплинга, качество ваших данных остаётся вопросом. Если все 10 изображений очень схожи и не разнообразны, модель не сможет обобщить свои знания для новых изображений.
-
Проблемы с балансировкой классов: Если в ваших 10 изображениях есть только один класс, модель может не научиться определять объекты, которые не присутствуют в обучающих данных. Это может привести к нулевой точности и нулевому mAP (среднему показателю точности).
-
Избыточное оверсэмплинг: Хотя оверсэмплинг может помочь, когда у вас достаточно разнообразия в данных, слишком большая степень оверсэмплинга одного и того же изображения может привести к переобучению модели, что, в свою очередь, затруднит её способность хорошо обобщать.
-
Ошибки в разметке данных: Проверьте, правильно ли размечены ваши данные. Если разметка повреждена или неверна, модель не сможет правильно учиться.
Ответ на вопрос Q2: Почему оверсэмплинг не приводит к повышению точности обучения и валидации?
-
Переобучение: Вы правы в том, что оверсэмплинг может привести к переобучению, так как модель будет видеть одни и те же изображения многократно. Однако, если ваши исходные данные не представляют достаточно разнообразия (например, из-за недостатка классов или условий съемки), это может привести к тому, что модель научится распознавать только то, что видела, и не сможет справляться с новыми данными, даже если они очень похожи.
-
Проблема с валидацией: Если вы используете изображения для валидации, которые также появились в обучающих данных, это может привести к завышенной оценке производительности модели на этапе валидации. То есть, вы можете увидеть высокие результаты на валидации даже когда модель просто «запомнила» эти изображения вместо того, чтобы научиться их адекватно обрабатывать.
Рекомендации по улучшению результатов
-
Аугментация данных: Используйте методы аугментации данных (например, повороты, сжатия, изменения яркости и т.д.), чтобы создать больше разнообразия в вашем наборе данных. Это поможет модели лучше обобщать.
-
Увеличение набора данных: Если возможно, постарайтесь получить больше данных. Чем больше и разнообразнее данные, тем лучше модель сможет обучиться.
-
Переход на классические методы: Если ваша цель состоит в том, чтобы просто идентифицировать присутствие объектов на знакомых изображениях, то подход с использованием простейших алгоритмов распознавания или хранилищ изображений может быть более эффективным, чем обучение сложной модели детекции объектов.
-
Коррекция разметки: Убедитесь, что ваши данные размечены корректно, и что вы используете адекватные метрики для оценки (например, избегайте переобучения через проверку на независимом наборе данных).
Надеюсь, эти рекомендации помогут вам добиться лучших результатов в вашей задаче детекции объектов.