Задача создания классификатора изображений на основе пользовательского набора данных является частой задачей для AI программиста, однако автоматический инструмент, решающий задачу без участия программиста мне на глаза не попадался.

CV tools — сервис анализа визуальной информации, имеющей в составе средства настройки и тестирования необходимых задач для не‑программиста, он также позволяет использовать обученную систему как REST‑сервер для анализа изображений.

В верхней части находится меню системы, нажатие на элементы открывает соответствующее окно.

Dataset                                 .

Редактор датасета позволяет добавлять, удалять в систему группы и картинки групп.

Картинки группы могут относится к следующим категориям:

Group — картинки, подтвержденные оператором и достоверно отражающие принадлежность к группе. Только картинки с этим статусом используются при обучении зрительной системы.

New — картинки, скачанные из Google Photos по запросу оператора и требующие дальнейшего просмотра и изменения статуса на Group или Deleted.

Deleted — картинки, определенные оператором как не принадлежащие группе. Они сохраняются в системе для возможного пересмотра и избежания повторного скачивания и анализа. Система не предложит заново рассмотреть картинку, ранее оцененную оператором, если она снова попадет в поисковую выдачу.

Редактирование групп.

Добавление группы. Может быть создана корневая или дочерняя группа.

Переименование группы.

Редактирование картинок групп Dataset
Редактирование картинок групп Dataset

Удаление группы.

             

К любой группе можно добавить картинки. Для этого имеет смысл в браузере зайти на google в раздел Images и подобрать запрос, по которому google покажет наиболее релевантные картинки для желаемой группы.

После этого в окне Vision dataset выбрать группу в списке групп, в которую хотите добавить картинки и нажмите

и появится

В этом диалоге нужно ввести подобранный запрос, система выкачает все картинки, добавит и откроет их в разделе New.

После этого оператор должен просмотреть и выделить картинки кликом на каждой для переноса в разделы Group или Deleted.

Кнопки

выполняют перенос выбранных картинок из раздела New в разделы Group или Deleted.

Кнопка

меняет статус выбора картинки на противоположный для всех отображаемых картинок.

Если картинку нужно рассмотреть получше, то клик мышью на квадратике с цифрой на картинке вызывает линзу картинки.

Выбор разделов группы делается кликом на переключателе

Обучение системы (нейросети).

В этом разделе производится обучение системы на данных  Dataset. Параметры обучения имеют значения, близкие к оптимальным, однако могут изменяться и подбираться оператором для достижения максимальной точности работы нейросети. Подробную информацию о смысле и значениях этих параметров можно найти здесь. Оператору не обязательно понимать смысл и значение этих параметров.

Запускает процесс обучения. Ход обучения отображается в таблице Epochs.

Нейросеть обучается для достижения максимального значения точности. Во время обучения CV Tools недоступен для использования другими пользователями и системами.

Точность полученной нейросети для каждой итерации обучения показана в колонке

Accuracy

Полученную сеть с максимальным Accuracy можно сохранить и назначить в системе как основная (Production)

После назначения сети можно попытаться улучшить точность нейросети:

  1. Изменяя параметры обучения. Для этого необходимо хотя бы поверхностное понимание параметров и процесса обучения нейросети.

  2. Повысить качество данных для обучения - Dataset. 

Для этого нужно найти и исправить аномалии в данных, для чего предназначен раздел аномалий Anomalies.

Аномалии бывают 2-х типов:

  1. Ошибки детектирования группы, когда нейросеть неверно определяет группу картинки. Для этого в  Anomalies нужно выбрать тип Errors и нажать кнопку

    Появится список 

В котором показаны неверно определенные картинки. В описании картинки первой идет ошибочная группа и ее вероятность, второй идет настоящая группа картинки и ее вероятность. Для ошибочных картинок вероятность ошибочной группы больше вероятности правильной и ожидаемой.

Для ошибочно детектируемых картинок предусмотрены действия:

  1. Переноса картинки из текущей группы в другую ‘правильную’

Для этого нужно выделить нужные изображения для переноса и нажать кнопку

и выбрать группу куда перенести.

  1. Удаление ошибочно детектируемых картинок. 

Если картинка не соответствует группе, в которой находится, и остальные группы не являются для нее подходящими, то такую картинку лучше удалить. Для этого щелкаем мышью (метим) каждую такую картинку и жмем

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

Github проекта

Комментарии (0)