В этой статье представлены галантерейные товары: SOLOv2 тренирует собственный набор данных на уровне няни с кодом!
Галантерея: SOLOv2 тренирует собственный набор данных на уровне няни с кодом!
В полном тексте много галантереи.Рекомендуется собрать и прочитать еще раз.Кстати, ставьте лайк!
В этой статье в основном рассказывается, как использовать SOLOv2 для обучения собственного набора данных. До этого кто-то смог перенести SOLOv2 в TensorRT для промышленного развертывания. Итак, как обучить свой собственный набор данных - это предварительная проблема. Поскольку у многих людей есть потребности в обучающих наборах данных, эта статья научит вас, как реализовать его шаг за шагом. В то же время мы также поместим ссылку на код на внизу статьи. Если вы найдете это полезным, пожалуйста, поделитесь, перешлите и подпишитесь на нашу публичную учетную запись!
Обратите внимание, что эта статья не основана на официальной версии mmdetection! Пожалуйста, загрузите нашу версию форка (ссылка в конце статьи), чтобы работать.
Подытожим, что нового в нашем релизе:
- Обучение работе с пользовательскими наборами данных
- SOLOv2-облегченная версия
- Основу можно заменить
- Поддержка экспорта ONNX
- Ускорение TensorRT (внутреннее)
Великолепие SOLOv2
Недавно я увидел, что PaddlePaddleDetection выпустил версию 2.0.Я увидел в ней эффект SOlOv2.Это действительно хорошо.
Но я не особо пользуюсь Paddle.Чувствую, что яма не должна быть мелкой, поэтому хочу использовать pytorch для такого набора.
На самом деле, я чувствую, что мы хорошо поработали:
Мы можем не только из кадра, но и из маски, это красочное и красочное действительно красиво. Следует отметить, что приведенное выше изображение является результатом чистого вывода C++ и может быть ускорено с помощью TensorRT. То есть мы завершили обучение и развертывание.
Обзор фреймворка
Мы не используем версию mmdetection официального solov2.Официальная версия слишком старая и все еще основана на mmdetection 1.0.Несмотря на то, что мы обновили версию в соответствии с методом обновления 2.0, она не кажется особенно простой в использовании. На этот раз я переключился на детектрон2.
Следующие руководства будут основаны на детектроне2.
Как подготовить собственный набор данных
Формат набора данных, который мы используем, — coco.Поскольку этот формат данных используется чаще, он лучше поддерживается в Dectron2. Если ваши данные уже в формате coco, отлично, вам просто нужно их визуализировать.
Вот инструмент для Amway:alfred-py
, Это коллекция инструментов глубокого обучения с открытым исходным кодом от крупного парня. Метод установки очень прост:
pip install alfred-py
Тогда мы можем использоватьalfred
команда для визуализации ваших данных кокоса.
Как это сделать?
alfred data cocoview -j annotations.json -i images/
Передайте свой json и корневой каталог изображения, и появится визуальный результат. Если вы мне не верите, вы можете попробовать визуализацию данных кокоса напрямую.
Этот инструмент по-прежнему полезен при проверке формата данных! При этом нам также очень удобно проверять данные
Разве не следует делиться этим хорошим инструментом с окружающими? Это серебряная пуля, которую можно использовать в критические моменты.
Помимо первого раза в этой библиотеке есть много других функций, вы можете-h
Медленно исследовать.Этот инструмент также позволяет конвертировать различные наборы данных! Например, coco to yolo, voc to yolo и т. д. — все они выполняются одной строкой команд! Не нужно писать код!
Если с вашими данными все в порядке, переходим к следующему шагу.
Наш примерный набор данных
Здесь мы даем вам наш собственный набор данных на данный момент. Хотя мы успешно тренировались на кокосе. Лучше всего тренироваться на собственных данных.Набор данных, который мы используем, представляет собой простую классификацию микроконтроллеров, которая в основном делится на:
CLASS_NAMES = ["Arduino", 'ESP8266', 'Heltec', 'Raspberry']
Это выглядит так:
Этот набор данных с открытым исходным кодом, вы можете пойти на kaggle или поискать в Google, мощность микроконтроллера разделена.
Зарегистрируйте свой собственный набор данных
В d2 лучший способ обучить свой собственный набор данных — зарегистрировать свой набор данных в d2, Таким образом, вы можете вызывать свои классы где угодно. Наш метод обычноtools
скопировать в папкуtrain_net.py
.
Также внесите это изменение:
CLASS_NAMES = ["Arduino", 'ESP8266', 'Heltec', 'Raspberry']
DATASET_ROOT = './data/microship'
ANN_ROOT = os.path.join(DATASET_ROOT, 'annotations')
TRAIN_PATH = os.path.join(DATASET_ROOT, 'train')
VAL_PATH = os.path.join(DATASET_ROOT, 'test')
TRAIN_JSON = os.path.join(ANN_ROOT, 'train.json')
VAL_JSON = os.path.join(ANN_ROOT, 'test.json')
PREDEFINED_SPLITS_DATASET = {
"microship_train": (TRAIN_PATH, TRAIN_JSON),
"microship_val": (VAL_PATH, VAL_JSON),
}
def plain_register_dataset():
# 训练集
DatasetCatalog.register(
"microship_train", lambda: load_coco_json(TRAIN_JSON, TRAIN_PATH))
MetadataCatalog.get("microship_train").set(thing_classes=CLASS_NAMES,
evaluator_type='coco',
json_file=TRAIN_JSON,
image_root=TRAIN_PATH)
DatasetCatalog.register(
"microship_val", lambda: load_coco_json(VAL_JSON, VAL_PATH))
MetadataCatalog.get("microship_val").set(thing_classes=CLASS_NAMES,
evaluator_type='coco',
json_file=VAL_JSON,
image_root=VAL_PATH)
plain_register_dataset()
Просто сделайте эти спецификации:
- название вашей категории;
- Ваши аннотации, пути хранения данных, точки
train
иval
.
Затем зарегистрируйте имя набора данных.
Наконец вconfigs
Ниже в этой конфигурации:
MODEL:
META_ARCHITECTURE: "SOLOv2"
MASK_ON: True
BACKBONE:
NAME: "build_resnet_fpn_backbone"
RESNETS:
OUT_FEATURES: ["res2", "res3", "res4", "res5"]
FPN:
IN_FEATURES: ["res2", "res3", "res4", "res5"]
DATASETS:
TRAIN: ("microship_train",)
TEST: ("microship_val",)
SOLVER:
IMS_PER_BATCH: 4
BASE_LR: 0.01
WARMUP_FACTOR: 0.01
WARMUP_ITERS: 1000
STEPS: (60000, 80000)
MAX_ITER: 90000
INPUT:
MIN_SIZE_TRAIN: (640, 672, 704, 736, 768, 800)
MASK_FORMAT: "bitmask"
VERSION: 2
Просто напишите имя вашего набора данных.
Здесь следует отметить одну вещь:
- Если вы тренируетесь с одной картой, вот
BASE_LR
разделить на 8; - Потому что по умолчанию 8 карт
Я лично предполагаю, что если это очень большой набор данных, использование 8 карт Xulian будет сходиться быстрее.
Как начать обучение
Начните обучение с одной строки команды:
python3 tools/train_microship.py --config-file configs/SOLOv2/microship_dataset/R50_lite_3x.yaml
Просто передайте этот конфиг.
Кстати, не забудьте убедиться, что ваш зарегистрированный набор данных имеет правильную символическую ссылку.
Ну вот и закончился обмен галантерейными товарами, кому нужен код, могут получить его здесь: