Вопрос или проблема
Я был бы рад, если бы кто-то мог дать мне некоторые советы и оценки для следующего проекта. (Я относительно нов в области машинного обучения и глубокого обучения, и у меня есть только немного теоретических знаний.)
Моя цель – создать детектор углов квитанций на изображениях. Я начал создавать набор данных с изображениями квитанций, где метками являются 4 угловые точки квитанции.
Мой план состоит в том, чтобы обучить свёрточную нейронную сеть (CNN) на этом наборе данных, и мне интересно, не могли бы вы дать оценку, сколько изображений мне потребуется в моем наборе данных для успешного обучения (будет ли это несколько сотен или несколько тысяч)? Будет ли это довольно простая задача для сети или сложная из-за большого количества пикселей на изображениях?
Редактирование: (Спасибо за ваши ответы до сих пор!)
- Мои данные – это изображение со списком угловых точек квитанции [[x, y], [x, y], [x, y], [x, y]]
- Я планирую использовать нейронную сеть, чтобы получить эти 4 угловые точки
- На следующем этапе фон будет обрезан с использованием этих 4 точек
Я начал использовать предобученную ResNet18 с использованием PyTorch и застрял с следующими вопросами, так как задача отличается от основных учебных пособий по классификации, которые я нашёл до сих пор:
- Как мне нужно преобразовать вектор меток с 4 углами?
- Как выглядит выходной результат?
- Мне нужно использовать полносвязную сеть (FCN) для этой задачи, поскольку это своего рода задача сегментации?
Чтобы обучить модель CNN на изображениях набора данных, будь то сотни или тысячи, вам нужна хорошая вычислительная мощность или инфраструктура на вашем компьютере. При обычной конфигурации, скажем, с 4 ГБ ОЗУ, вы можете продолжать и обучать модель на сотнях изображений, и это будет работать хорошо, также вы сможете проверять и тестировать ваши данные. Кроме того, вы также можете попробовать Google Colaboratory для алгоритма вашей модели CNN, подключившись к размещённому времени выполнения, так как он выделяет 12 ГБ ОЗУ для каждого отдельного пользователя.
Невозможно сказать, сколько изображений вам понадобится, не зная больше деталей. Возможно, вам удастся обучить хорошо работающую модель на менее чем ста изображениях в зависимости от разнообразия ваших данных и сложности вашего случая использования.
В общем, приложения машинного обучения представляют собой смесь программного обеспечения и данных. Получение данных правильным гораздо важнее, чем сам код. Обучить модель сейчас довольно просто. Существует множество учебных пособий о том, как писать код или инструменты, которые вы можете использовать бесплатно (я лично использую hasty.ai) для быстрой прототипизации. Использовать эти инструменты особенно удобно, когда вы новичок в машинном обучении, так как это значительно снижает сложность. Создание правильного набора данных – это то, что вам нужно сделать самостоятельно.
Ответ или решение
Для решения вашей задачи по детекции углов чеков на изображениях с использованием свёрточной нейронной сети (CNN) необходимо рассмотреть несколько ключевых аспектов.
1. Размер датасета
Определение количества изображений в вашем датасете зависит от ряда факторов, включая разнообразие представленных чеков, различные условия освещения, ракурсы и фон. Ваша цель — создать модель, способную точно определять углы чеков, что может потребовать:
- Минимум 300-500 изображений: это позволит вам начать и проверить, как хорошо модель может работать с базовым набором данных.
- Желательно несколько тысяч изображений: для улучшения обобщающей способности модели вам может потребоваться больше данных, особенно если вы хотите учитывать различные стили и форматы чеков.
2. Степень сложности задачи
Задача определения углов может быть как простой, так и сложной. При наличии хорошо размеченных и разнообразных данных задача может оказаться простой. В то же время, если изображение содержит много шумов (например, сложный фон, нечеткие края), вам может потребоваться более сложная архитектура сети или предобученные модели.
3. Подготовка меток
Каждая картинка должна иметь метки в формате [[x1, y1], [x2, y2], [x3, y3], [x4, y4]], где каждая пара координат соответствует углам чека на изображении. Подготовка меток будет заключаться в том, чтобы преобразовать их в формате, который нейронная сеть сможет понимать.
4. Архитектура сети
- Использование ResNet18: Вы можете использовать предобученную модель ResNet18, но так как ваша задача включает в себя регрессию (вывод координат), вам необходимо изменить последний слой на выходной слой, который будет выдавать 8 значений (по 2 координаты на каждый из 4 углов).
5. Формат вывода
Выводом вашей сети должны стать 8 чисел, которые представляют координаты (x, y) для каждого из углов. Вам нужно будет попробовать разные активационные функции и обработку выходных данных для достижения оптимального результата.
6. Использование FCN (сегментация)
FCN (Fully Convolutional Network) действительно может быть подходящей архитектурой, если ваша задача включает элементы сегментации. Однако для вашей задачи, возможно, будет достаточно применить свёрточную нейронную сеть с изменением последнего слоя на регрессионный.
Дополнительные рекомендации
- Попробуйте использовать фазу адаптивного обучения (например, использование методов аугментации данных) для увеличения разнообразия вашего датасета.
- Обязательно протестируйте модель на валидационном наборе, чтобы избежать переобучения.
- Возможно, поможет использование методов переноса обучения, чтобы ускорить процесс и получить более качественные результаты.
Не стесняйтесь задавать дополнительные вопросы, если они возникнут в процессе работы над проектом! Удачи!