IHappyPlant / ImagesClustering

Этот репозиторий содержит работу по предмету "Интеллектуализация обработки информации"

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Кластеризация изображений

Навигация

  1. Используемые инструменты
  2. Алгоритм
  3. Тестирование
  4. Запуск и проверка

Используемые инструменты

В работе использовались следующие инструменты:

  • keras
  • scikit-learn
  • numpy
  • openCV

Алгоритм

Для решения задачи было решено использовать нейросетевой подход вместе с традиционными методами кластеризации.
Таким образом, кластеризация изображений проходила в два этапа:

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

Для использования в качестве нейронной сети для извлечения признаков из изображений, были протестированы нейронные сети VGG16, VGG19, InceptionV3 и ResNet152.

Лучшие результаты показали сети InceptionV3 и ResNet152. При этом, при использовании ResNet152 качество кластеризации было незначительно выше, чем при использовании InceptionV3, но при использовании сети InceptionV3 скорость работы алгоритма была значительно выше.

Таким образом, для выделения признаков из изображений была выбрана нейронная сеть InceptionV3. Сеть использовалась без последнего полносвязного слоя, для того, чтобы извлекать признаки из изображения, но не проводить никаких классификаций.

Для кластеризации изображений применялся алгоритм MiniBatchKMeans из пакета scikit-learn. Он незначительно выигрывает в точности у стандартной версии KMeans и работает значительно быстрее.

Тестирование

Для тестирования алгоритма использовалась выборка изображений кошек и собак, состоящая из 3999 объектов (2000 изображений собак, и 1999 изображений кошек).

Все вычисления, связанные с нейронными сетями, проводились на GPU.

Сводная таблица по наборам параметров (Нейронная сеть + кластеризатор):

Параметры Выделение признаков, время Кластеризация, время Точность алгоритма
InceptionV3 + MiniBatchKMeans 205.6c 1.37c 0.9675
InceptionV3 + KMeans 204.5c 27.3c 0.9590
ResNet152 + MiniBatchKMeans 251.47c 3.95c 0.9750
ResNet152 + KMeans 247.43c 57.7c 0.9750
VGG19 + MiniBatchKMeans 188.16c 1.21c 0.9602
VGG19 + KMeans 187.94c 14.98c 0.9477
VGG16 + MiniBatchKMeans 179.40c 1.90c 0.9610
VGG16 + KMeans 180.02c 15.49c 0.9442

При работе с InceptionV3 и MiniBatchKMeans алгоритм кластеризации допустил 130 ошибок.
Таким образом, точность алгоритма составила 0.9675.
Из 130 ошибок, 126 кошек были ошибочно отнесены в кластер к собакам, и 4 собаки были отнесены в кластер к кошкам.

Запуск и проверка

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

git clone https://github.com/IHappyPlant/Images_Clustering.git

Перейдите в новую директорию командой:

cd images_clustering

Затем, установите требуемые пакеты для python командой:

pip3 install -r requirements.txt

Загрузите выборку для тестирования по ссылке:
https://drive.google.com/file/d/1YUqETBbxdMm4dM70h0xc5S-3hcPlmdCh/view?usp=sharing

Распакуйте скачанный архив в текущую папку.

Запустите алгоритм кластеризации командой:

python3 main.py --images ./data --clusters 2 --destination ./

В процессе работы алгоритм создаст папки в количестве, равном указанному числу кластеров. Названия папок будут соответствовать кластерам (например, 0 и 1). В созданные папки алгоритм запишет кластеризованные изображения.

About

Этот репозиторий содержит работу по предмету "Интеллектуализация обработки информации"

License:MIT License


Languages

Language:Python 100.0%