Задача создания классификатора изображений на основе пользовательского набора данных является частой задачей для AI программиста, однако автоматический инструмент, решающий задачу без участия программиста мне на глаза не попадался.
CV tools — сервис анализа визуальной информации, имеющей в составе средства настройки и тестирования необходимых задач для не‑программиста, он также позволяет использовать обученную систему как REST‑сервер для анализа изображений.
В верхней части находится меню системы, нажатие на элементы открывает соответствующее окно.
Dataset .
Редактор датасета позволяет добавлять, удалять в систему группы и картинки групп.
Картинки группы могут относится к следующим категориям:
Group — картинки, подтвержденные оператором и достоверно отражающие принадлежность к группе. Только картинки с этим статусом используются при обучении зрительной системы.
New — картинки, скачанные из Google Photos по запросу оператора и требующие дальнейшего просмотра и изменения статуса на Group или Deleted.
Deleted — картинки, определенные оператором как не принадлежащие группе. Они сохраняются в системе для возможного пересмотра и избежания повторного скачивания и анализа. Система не предложит заново рассмотреть картинку, ранее оцененную оператором, если она снова попадет в поисковую выдачу.
Редактирование групп.
Добавление группы. Может быть создана корневая или дочерняя группа.
Переименование группы.
Удаление группы.
К любой группе можно добавить картинки. Для этого имеет смысл в браузере зайти на google в раздел Images и подобрать запрос, по которому google покажет наиболее релевантные картинки для желаемой группы.
После этого в окне Vision dataset выбрать группу в списке групп, в которую хотите добавить картинки и нажмите
и появится
В этом диалоге нужно ввести подобранный запрос, система выкачает все картинки, добавит и откроет их в разделе New.
После этого оператор должен просмотреть и выделить картинки кликом на каждой для переноса в разделы Group или Deleted.
Кнопки
выполняют перенос выбранных картинок из раздела New в разделы Group или Deleted.
Кнопка
меняет статус выбора картинки на противоположный для всех отображаемых картинок.
Если картинку нужно рассмотреть получше, то клик мышью на квадратике с цифрой на картинке вызывает линзу картинки.
Выбор разделов группы делается кликом на переключателе
Обучение системы (нейросети).
В этом разделе производится обучение системы на данных Dataset. Параметры обучения имеют значения, близкие к оптимальным, однако могут изменяться и подбираться оператором для достижения максимальной точности работы нейросети. Подробную информацию о смысле и значениях этих параметров можно найти здесь. Оператору не обязательно понимать смысл и значение этих параметров.
Запускает процесс обучения. Ход обучения отображается в таблице Epochs.
Нейросеть обучается для достижения максимального значения точности. Во время обучения CV Tools недоступен для использования другими пользователями и системами.
Точность полученной нейросети для каждой итерации обучения показана в колонке
Accuracy
Полученную сеть с максимальным Accuracy можно сохранить и назначить в системе как основная (Production)
После назначения сети можно попытаться улучшить точность нейросети:
Изменяя параметры обучения. Для этого необходимо хотя бы поверхностное понимание параметров и процесса обучения нейросети.
Повысить качество данных для обучения - Dataset.
Для этого нужно найти и исправить аномалии в данных, для чего предназначен раздел аномалий Anomalies.
Аномалии бывают 2-х типов:
-
Ошибки детектирования группы, когда нейросеть неверно определяет группу картинки. Для этого в Anomalies нужно выбрать тип Errors и нажать кнопку
Появится список
В котором показаны неверно определенные картинки. В описании картинки первой идет ошибочная группа и ее вероятность, второй идет настоящая группа картинки и ее вероятность. Для ошибочных картинок вероятность ошибочной группы больше вероятности правильной и ожидаемой.
Для ошибочно детектируемых картинок предусмотрены действия:
Переноса картинки из текущей группы в другую ‘правильную’
Для этого нужно выделить нужные изображения для переноса и нажать кнопку
и выбрать группу куда перенести.
Удаление ошибочно детектируемых картинок.
Если картинка не соответствует группе, в которой находится, и остальные группы не являются для нее подходящими, то такую картинку лучше удалить. Для этого щелкаем мышью (метим) каждую такую картинку и жмем
2-й тип аномалий — одинаковые или очень похожие, например, худшего качества или кроп одной картинки. Такие картинки почти не влияют на качество анализа для датасетов с более 30 картинок в группе, однако для маленьких датасетов индивидуальные характеристики картинок‑дубликатов могут оказывать негативное влияние на качество анализа. Для поиска дубликатов в Anomalies нужно выбрать Type → Duplicates и нажать кнопку
Появится список
Картинки с списке идут парами и первая цифра в подписи картинки это номер пары.
Далее идет группы картинки и расстояние до другой картинки пары. Чем меньше расстояние тем меньше картинки отличаются друг от друга. Для картинок доступны те же операции переноса и удаления, что и для неверно определяемых. Имеет смысл удалить дубликаты, особенно когда они находятся в разных группах.
Анализ системы зрения для картинок
Позволяет тестировать вывод обученной нейросети и вычислять наиболее похожие картинки групп. Похожие картинки позволяют понять, почему ответ классификатора такой,
скорректировать Dataset и получить лучший результат на исправленном Dataset.
Для загрузки картинки нужно перетащить на кнопку
или нажать на + там же. При нажатии появится диалог выбора файла, в котором нужно выбрать картинку и нажать OK.
В таблице Image classification появится информация о группах и их вероятностях, распознанных нейросетью. При выборе любой группы в таблице появятся картинки из этой категории с расстоянием в ~n‑мерном пространстве нейросети к каждой картинке в блоке Similar images, где n — количество групп в Dataset.
Данные в таблице следующие:
Group — группа Dataset.
Probability — уверенность (вероятность) анализатора в принадлежности картинки этой группе.
Дополнительные настройки:
Переключатель Search в активном состоянии активирует поиск похожих картинок.
How many images to search сообщает системе, сколько именно она должна показать наиболее похожих картинок в порядке убывания схожести.
Порядок работы с программой CV Tools
0. Установка зависимостей.
Инсталлируйте pytorch по инструкции
Инсталлируйте зависимые пакеты:
-Зайти в рабочую директорию CV Tools
-выполнить pip install -U -r requirements.txt
1. Настройка программы.
Все настройки программы хранятся в файле config.py и должны быть сделаны до запуска программы.
dataset_dir
Определяет полный путь к директории, где находится пользовательский датасет.
neuronet
Определяет какой тип нейросети используется для дообучения. Поддерживаются все типы нейросетей из раздела.
Имеет смысл оставить установленное значение 'facebook/convnextv2-base-22k-224' которое обеспечивает максимальную точность из протестированных мной или "facebook/convnextv2-tiny-1k-224", если интересует максимальная скорость при потере точности 3-5%.
test_size = 0.2
Программа автоматически разбивает каждую группу на две части: обучающую и проверочную. На первой части нейросеть обучается, на второй, которую нейросеть не видит при обучении, проверяется. Оптимальные значения обычно находятся в диапазоне 0.2-0.3 и при малом количестве картинок (до 40) в группе выбирается 0.2, при большом 0.25 - 0.3.
batch_size
Определяет размер одновременно анализируемой группы картинок для построения индекса. Зависит от объема памяти GPU и ОЗУ. Минимальное значение 16 позволит проводить обучение на слабом железе, 64 и 128 - для владельцев мощных компьютеров с GPU 16 GB и более.
max_equal_distance
Определяет максимальное расстояние в n-мерном пространстве нейросети, при котором картинки считаются очень похожими. Используется для фильтрации результатов Errors. Подбирается экспериментально для каждого типа нейросети. Установлено по умолчанию для 'facebook/convnextv2-base-22k-224'
2. Старт программы
Зайти в рабочую директорию и запустить команду
python run.py
Открыть Chrome по адресу localhost:8000 или, если сервер находится на удаленном хосте server_address:8000
3. Просмотреть датасет
Удалить видимые ошибки, например нерелевантные ошибки в группах, расширить датасет с помощью Google Images, если необходимо.
4. Перейти на вкладку Вкладку Learning
И нажать Start learning.
Дождаться окончания и установить обученную сеть как системную - кнопка Set trained as main.
5. Провести анализ ошибок нажатием Calculate.
Исправить ошибки, если возможно, как описано выше.
6. Если ошибки исправлены,перейти к пункту 4.
Иначе перейти на вкладку Image analysis и протестировать систему на картинках из Интернет.
REST - сервер
CV Tools c обученной нейросетью поддерживает REST интефейс для использования внешними системами.
1. Server_address/cv?file_path
Где file_path - локальный путь к файлу или http адрес.
Пример:
http://localhost:8000/cv?/home/george/Projects/save/animals/bison/4a11160cd7.jpg
2. Server_address/cv?file_path:how_many
Где file_path — локальный путь к файлу или http адрес.
How_many — сколько топ-значений вернуть
Пример:
http://localhost:8000/cv?/home/george/Projects/save/animals/bison/4a11160cd7.jpg:3
Возвращаемый результат в JSON вида
Пример датасета, используемого при подготовке статьи.
Возможные проблемы:
Программа проверялась на Linux и Windows 10 c python 3.10.12. Python в версиях для Windows имеет баг (мое мнение) в библиотеке asyncio, не позволяющий визуально синхронизировать процесс обучения с состоянием CV tools. Для версии Python 3.10 сделан adhoc баг‑фикс, для остальных версий не исключена проблема, которая не влияет на общую работоспособность.