О сериале:
Цель проекта — построить систему, способную идентифицировать фрукты и овощи. Наряду с идентификацией, он также должен иметь возможность получить признаки определенной категории/класса. Предположим, что у нас есть конвейерная лента с фруктами и овощами. Ввод может быть изображением или видео, но в этом случае мы будем использовать изображения. В сериале будут следующие части:
ЧАСТЬ I — Выбор модели и набора данных
ЧАСТЬ II — Переобучение модели по набору данных
Описание задачи:
Чтобы расширить наш набор данных, добавив больше классов, относящихся к нашему проекту.
Набор данных MS COCO имеет 81 класс, из которых нам полезны только пять; к ним относятся морковь, брокколи, апельсин, яблоко и банан. Мы переобучили модель, добавив Ананас в нашу базу данных.
Примечание:
Для реализации задачи вам потребуется воспроизвести модель Mask R CNN. Вы должны иметь возможность обнаруживать объекты из набора данных ms coco, используя файл веса mask_rcnn_coco.h5.
Есть несколько постов, за которыми вы можете следить, я дал ссылку на все из них в справочном разделе.
Этапы переобучения:
- Создание набора данных.
Я попытался найти уже доступный набор данных с маской и аннотацией ограничительной рамки. Его было трудно найти, и даже когда я мог его достать, он был не очень хорошего качества. Поэтому я решил создать новый набор данных.
Для этого я использовал Flickr и картинки google для поиска и загрузки с помощью инструмента (Расширение Chrome) - Аннотация:
Изображения должны быть аннотированы (или помечены), для этого мы можем использовать VGG image Annotator (VIA). Для каждого изображения мы должны создать маски в соответствии с количеством объектов на нем. Как только маски созданы, вы можете перейти к следующему изображению, маски сохраняются сами по себе в браузере, после выполнения задачи вы можете экспортировать данные в формате json. JSON будет содержать точки многоугольника и другую информацию, необходимую для обучающего сценария. Вы также можете импортировать файл json, если хотите увеличить размер набора данных.
Я использовал 175 тренировочных изображений, 50 тестовых изображений, 850 шагов за эпоху.
Примечание. Попробуйте использовать один тип многоугольника, использование полилинии и инструмента круга создало для меня проблему.
3. Создание конфиг-файла и загрузка набора данных
Конфиг-файл содержит все установленные переменные для обучения, я старался не менять конфиг, поэтому унаследовал тот же конфиг-файл. Файл выглядит так:
Import mrcnn.config as Config NAME = “fruits” IMAGES_PER_GPU = 2 NUM_CLASSES = 1+1 # background + pineapple # it can be 1 + x (no. of classes you wish to add) STEPS_PER_EPOCH = 1000 #the number can be according to required accuracy DETECTION_MIN_CONFIDENCE = 0.8 BACKBONE = “resnet101” VALIDATION_STEPS = 5
4. Обучение
Обучение — самая важная часть вашей модели. В этом процессе нам нужно будет предоставить системе данные и алгоритм машинного обучения, чтобы получить файл весов. Как только мы получим файл весов, мы можем запустить наш код обнаружения, используя файл весов.
Учебный файл выглядит так:
load_images() load_mask() load_references() #load the above-mentioned data dataset.prepare() model = modellib.MaskRCNN(“ … ”) model.train(“ … ”) #save the model (.h5 file)
5. Результаты
Получив файл весов, мы можем запустить наш скрипт обнаружения, используя файл весов.
load_weights() detect(model, “path/to/img/or/video/”)
Ссылка
- Для описания модели: https://github.com/matterport/Mask_RCNN;
- Переобучение модели и понимание глубины модели: https://engineering.matterport.com/splash-of-color-instance-segmentation-with-mask-r-cnn-and-tensorflow-7c761e238b46
- Набор данных MS COCO: http://cocodataset.org/#home
- Понимание Mask R-CNN для обнаружения и сегментации объектов: https://github.com/matterport/Mask_RCNN