В компьютерном зрении распознавание сцен является одной из самых сложных областей исследований.

Распознавание окружающего мира с первого взгляда — одно из самых совершенных действий человеческого мозга. В то время как недавний огромный прогресс в задачах распознавания объектов связан с доступностью больших наборов данных, таких как COCO, и появлением сверточных нейронных сетей (CNN) для изучения функций высокого уровня, производительность распознавания сцен не достигла такого же уровня успеха.

В этом сообщении блога мы увидим, как модели классификации работают при классификации изображений сцены. Для этой задачи мы взяли набор данных Places365-Standard для обучения модели. Этот набор данных содержит 1 803 460 обучающих изображений и 365 классов, число изображений в классе варьируется от 3 068 до 5 000, а размер изображений составляет 256*256.

Установка и загрузка данных

Начнем с настройки Monk и его зависимостей:

!git clone https://github.com/Tessellate-Imaging/monk_v1.git
! cd monk_v1/installation/Linux && pip install -r requirements_cu9.txt

После установки зависимостей я скачал набор данных Places365-Standard, который можно скачать здесь.

Создать эксперимент

Я создал эксперимент и для этой задачи использовал серверную часть mxnet gluon.

import os
import sys
sys.path.append("monk_v1/monk/");
from gluon_prototype import prototype
gtf = prototype(verbose=1);
gtf.Prototype("Places_365", "Experiment");

Выбор модели и обучение

Я экспериментировал с различными моделями, такими как реснет, плотная сеть, начало, vgg16 и многими другими, но только vgg16 дает большую точность проверки, чем любая другая модель.

gtf.Default(dataset_path="train/",
            path_to_csv="labels.csv",
            model_name="vgg16",
            freeze_base_network=False,
            num_epochs=20);
gtf.Train();

После обучения в течение 20 эпох я получил точность обучения 65% и точность проверки 53%.

Прогноз

gtf = prototype(verbose=1);
gtf.Prototype("Places_365", "Experiment", eval_infer=True);
img_name = "test_256/Places365_test_00208427.jpg" 
predictions = gtf.Infer(img_name=img_name);
from IPython.display import Image
Image(filename=img_name)

img_name = "test_256/Places365_test_00151496.jpg" 
predictions = gtf.Infer(img_name=img_name);
from IPython.display import Image
Image(filename=img_name)

После этого я попытался выяснить, почему точность не улучшилась больше, чем у меня получилось. Вот некоторые из возможных причин:

Неверные метки. При проверке папки для тренировок обнаружились изображения с неправильными метками, например, baseball_field имеет неправильное изображение. Есть еще много неправильных ярлыков.

img=mpimg.imread(“images/train/baseball_field2469.jpg”)
imgplot = plt.imshow(img)

Нечеткие сцены:- из-за различных похожих классов, которые имеют схожие объекты, такие как «столовая_комната» и «столовая_зал», «лесная_дорога» и «полевая_дорога», существуют нечеткие изображения, которые очень трудно классифицировать.

Как мы видим, очень сложно классифицировать эти 2 изображения.

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

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

использованная литература



http://places2.csail.mit.edu/PAMI_places.pdf