CV Tools — система зрения для конечных пользователей
Задача создания классификатора изображений на основе пользовательского набора данных является частой задачей для 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 баг‑фикс, для остальных версий не исключена проблема, которая не влияет на общую работоспособность.