CV Tools — система зрения для конечных пользователей

CV Tools — система зрения для конечных пользователей. 

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

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

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

67ba2c641171f2825b983fd5e98cbb9b.png

Dataset                                 .

0867d50adf07e48774c42ae67454fa45.png

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

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

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

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

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

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

c581db64ca1d4f989f527dd16f44ca8a.png

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

ec2dfeb63edb7858fcc126212d7471f4.png

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

7907447f60765b3b711d8f26e0b402b6.png

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

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

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

66c2ba4d01f632b9415b6917e4330141.png

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

10c874e09462940ab727530c1e7a60b8.png

и появится

0275d28a27d8bb47f49869146ee09a2a.png

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

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

9e3733ae39069c2d9a7816124eb6a3a0.png

Кнопки

6981bb0d199727d90ed215bc62235d18.png

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

Кнопка

8a6c1b9438b5ad597826bd13f6d4b0b3.png

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

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

f1ed0bc4554912f4003e6c089ba4383a.png

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

4798d56ced70a21f96af0fdd7e6ba281.png

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

В этом разделе производится обучение системы на данных  Dataset. Параметры обучения имеют значения, близкие к оптимальным, однако могут изменяться и подбираться оператором для достижения максимальной точности работы нейросети. Подробную информацию о смысле и значениях этих параметров можно найти здесь https://huggingface.co/docs/transformers/main_classes/trainer#transformers.TrainingArguments Оператору не обязательно понимать смысл и значение этих параметров.

5c55fabf789abd50bb59a8580ca9c2b3.png

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

6a645b09963fbddeb9c1b196216d1d72.png

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

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

Accuracy.

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

37b78011cf3c174918b31cf90225446d.png

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

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

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

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

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

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

    bc62580c758ab1a848eba086da4167cf.png

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

300438118e296707babecc5261bb548d.png

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

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

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

d833bcaa0217ce8d59a564c737b4342e.png

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

a1f66500b4b34835553a3b58a2974b96.png

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

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

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

cc513b0b116b4d9f22c92db066672e5f.png

      2-й тип аномалий — одинаковые или очень похожие, например, худшего качества или кроп одной картинки. Такие картинки почти не влияют на качество анализа для датасетов с более 30 картинок в группе, однако для маленьких датасетов индивидуальные характеристики картинок-дубликатов могут оказывать негативное влияние на качество анализа. Для поиска дубликатов в Anomalies нужно выбрать Type → Duplicates  и нажать кнопку

bafa63ffde4eaad9b9fafd6cbc8cd316.png

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

0dcf05bb5e3ed76bbb26a6d53c3c0988.png

Картинки с списке идут парами и первая цифра в подписи картинки это номер пары.

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

Анализ системы зрения для картинок.

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

скорректировать Dataset и получить лучший результат на исправленном Dataset.

4c71a1ce7efa8836e2a8d96aa4b8082d.png

Для загрузки картинки  нужно перетащить на кнопку 

47a9f8ea8d791f99fc1158a36c389250.png

или нажать на + там же. При нажатии появится диалог выбора файла, в котором нужно выбрать картинку и нажать OK.

В таблице Image classification появится информация о группах и их вероятностях, распознанных  нейросетью. При выборе любой группы в таблице появятся картинки из этой категории с расстоянием в ~n-мерном пространстве нейросети к каждой картинке в блоке Similar images, где n — количество групп в Dataset.

Данные в таблице следующие:

Group — группа Dataset.

Probability — уверенность (вероятность) анализатора в принадлежности картинки этой группе.

Дополнительные настройки:

Переключатель Search в активном состоянии активирует поиск похожих картинок.

How many images to search сообщает системе, сколько именно она должна показать наиболее похожих картинок в порядке убывания схожести.

Порядок работы с программой CV Tools.

    0. Установка зависимостей.

             Инсталлируйте pytorch по инструкции https://pytorch.org/get-started/locally/

             Инсталлируйте зависимые пакеты:

-Зайти в рабочую директорию CV Tools 

-выполнить pip install -U -r requirements.txt

  1. Настройка программы.

Все настройки программы хранятся в файле config.py и должны быть сделаны до запуска программы.

dataset_dir

Определяет полный путь к директории, где находится пользовательский датасет.

neuronet

  Определяет какой тип нейросети используется для дообучения. Поддерживаются все типы нейросетей из раздела https://huggingface.co/models? pipeline_tag=image-classification&sort=trending

Имеет смысл оставить установленное значение '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'

  1. Старт программы.

Зайти в рабочую директорию и запустить команду 

python run.py

Открыть Chrome по адресу localhost:8000 или, если сервер находится на удаленном хосте server_address:8000

  1. Просмотреть датасет 

удалить видимые ошибки, например нерелевантные ошибки в группах, расширить датасет с помощью Google Images, если необходимо.

  1. Перейти на вкладку Вкладку Learning

 и нажать Start learning.

Дождаться окончания и установить обученную сеть как системную — кнопка Set trained as main.

  1. Провести анализ ошибок нажатием Calculate. 

Исправить ошибки, если возможно, как описано выше.

  1. Если ошибки исправлены, перейти к пункту 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

  1.   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 вида

f79b8b1d9f382603f419227a9b60a11c.png

Пример датасета, используемого при подготовке статьи:

https://www.kaggle.com/datasets/iamsouravbanerjee/animal-image-dataset-90-different-animals

 Возможные проблемы:

Программа проверялась на Linux и Windows 10 c python 3.10.12. Python в версиях для Windows имеет баг (мое мнение) в библиотеке asyncio, не позволяющий визуально синхронизировать процесс обучения с состоянием CV tools. Для версии Python 3.10 сделан adhoc баг-фикс , для остальных версий не исключены проблемы.

github проекта https://github.com/unisi-tech/vision

© Habrahabr.ru