Классификация изображений с помощью Machine Learning
Как быстро вы сможете проанализировать изображения? А если их несколько десятков тысяч? Оптимизировать трудозатраты нам поможет Machine Learning. В этой статье делимся опытом классификации изображений.
В работе каждого аудитора возникает необходимость анализа неструктурированных данных, таких как: сканы, фотографии или print screen. Ручная обработка такой информации в больших объемах занимает огромное количество времени. Одним из способов оптимизации трудозатрат является классификация изображений с применением методов Machine Learning. Сегодня хотим поделиться опытом классификации на примере авансовых отчетов.
В нашем случае: мы имели более 30 тыс. различных авансовых отчетов. И задача стояла следующая: проанализировать только те, которые относятся к использованию общественного транспорта, поэтому из общего массива документов необходимо было выделить только билеты на проезд в общественном транспорте.
Здесь нам приходит на помощь ML, а именно — бинарная классификация изображений. Для начала импортируем необходимые модули.
Предварительно мы распределили 6 607 изображений на два класса: «билет» и «прочие». Вес архива с изображениями составил 18,5 Гб.
Распаковываем выборку в рабочую директорию.
Считываем пути к выборке.
Разделяем выборку на обучающую – «train» и тестовую – «test».
Раскладываем изображения в папки для обучения (train) и валидации (test).
Подготавливаем и настраиваем нашу модель для обучения.
Определяем обучающую выборку
Определяем тестовую выборку
Запускаем обучение модели
Наша модель обучилась за 4 часа.
Определяем функцию считывания изображения для предсказания
Определяем функцию предсказания класса где 0 это «прочие», а 1 – «билет».
Подготавливаем датасет для предсказания и оценки точности предсказания нашей модели.
Проводим предсказание на тестовой выборке и рассчитываем метрики модели.
Таким образом, с помощью Machine Learning нам удалось выделить 6,6 тыс. билетов на проезд в общественном транспорте, необходимых для анализа, из более чем 30 тыс. авансовых отчетов. Это позволило существенно сократить трудозатраты и исключить просмотр излишней информации, которая составила более 78% общего объема документов.
Да пытаюсь уже пол дня заставить код работать и получить хоть какой то результат для своих данных, везде представлены кейсы с готовыми наборами данных кошечки собачки, у вас более подходящий кейс к моей задаче
Лезет вот такая ошибка
TypeError: __init__() missing 1 required positional argument: 'units'
Ругается на эту строчку
classifier.add(Dense(output_dim = 128, activation = 'relu'))
Код взял до части
Определяем функцию считывания изображения для предсказания
дальше все равно не двигается, я в питоне не силен где то возможно что то не так скопировал, иерархию папок и прочего повторял по коду
Доброго времени спасибо, за потраченное время на поиск вариантов решений, тоже нашел данное решение связанное с разницей в версии, к сожалению так и не смог довести код под свою задачу до логического завершения, низкий уровень знаний в данном направлении нужно прокачивать скил
Можно ссылку на исходники?
Артем, к сожалению, исходники в общий доступ выложить не может. Это внутренняя конфиденциальная информация.
Понятно, спасибо. К чему тогда вообще было выкладывать не рабочий код не понятно.
Проверяли, где-то ошибка? Подскажите, на каком шаге возникли трудности?
Да пытаюсь уже пол дня заставить код работать и получить хоть какой то результат для своих данных, везде представлены кейсы с готовыми наборами данных кошечки собачки, у вас более подходящий кейс к моей задаче
Лезет вот такая ошибка
TypeError: __init__() missing 1 required positional argument: 'units'
Ругается на эту строчку
classifier.add(Dense(output_dim = 128, activation = 'relu'))
Код взял до части
Определяем функцию считывания изображения для предсказания
дальше все равно не двигается, я в питоне не силен где то возможно что то не так скопировал, иерархию папок и прочего повторял по коду
Артем, добрый день!
1) одна из возможных причин, почему ошибка может возникать - версия используемой библиотеки. Вот тут похожее описание - https://github.com/mirumee/saleor/issues/4350
2) и еще один вариант решения - https://stackoverflow.com/questions/63840525/typeerror-init-missing-1-required-positional-argument-units
Доброго времени спасибо, за потраченное время на поиск вариантов решений, тоже нашел данное решение связанное с разницей в версии, к сожалению так и не смог довести код под свою задачу до логического завершения, низкий уровень знаний в данном направлении нужно прокачивать скил