Практическое обучение обнаружению объектов - EfficientDet

искусственный интеллект

содержание

Резюме

тренировочные данные

1. Загрузите версию EfficientDet для Pytoch.

2. Создайте набор данных.

3. Загрузите модель предварительного обучения EfficientNets.

4. Установите пакеты, необходимые для модели

5. Разместите набор данных

6. Измените параметры в train.py

контрольная работа

Уведомление


Резюме

Команда Google Brain Quoc V. Le и др. систематически изучали различные конструкции архитектуры нейронных сетей для обнаружения объектов и предложили несколько ключевых оптимизаций, которые могут повысить эффективность модели. Во-первых, они предлагают взвешенную двунаправленную пирамидальную сеть признаков (BiFPN) для простого и быстрого слияния многомасштабных признаков; во-вторых, они предлагают метод составного масштабирования, при котором одновременно выполняется равномерное масштабирование разрешения, глубины и ширины изображения. сеть, сеть признаков и сеть предсказания ограничивающего прямоугольника/класса. На основе этих оптимизаций исследователи разработали новый детектор объектов EfficientDet. Структура модели следующая:

Особенности «ЭффективДет»:

  1. Используйте сетку EfficientNet в качестве магистральной сети.
  2. BiFPN предлагается для того, чтобы модель могла достигать эффективных двунаправленных кросс-масштабных соединений и объединения взвешенных признаков. На следующем рисунке представлена ​​общая схема структуры FPN:

а) FPN использует нисходящий путь для объединения мультимасштабных функций уровня 3-7 (P3-P7); b) PANet добавляет дополнительный восходящий путь поверх FPN; c) NAS-FPN использует нейронную архитектуру поиска. нерегулярная топология сети признаков; (d)-(f) показывают три альтернативных подхода, изучаемых в этой статье. d добавляет дорогостоящие соединения между всеми входными и выходными функциями; e упрощает PANet, удаляя узлы только с одним входным краем; f — BiFPN для точности и эффективности.

  1. Масштабирование модели. Предлагается комбинированный метод масштабирования для детекторов объектов, который равномерно масштабирует разрешение/глубину/ширину всех магистральных сетей, сетей признаков, ограничивающих рамок/сетей прогнозирования категорий.

Основываясь на приведенных выше характеристиках, EfficientDet-D7 достигает наилучшего на данный момент значения 51,0 мАд в наборе данных COCO, точность превосходит предыдущий лучший детектор (+0,3% мАд), а его шкала составляет всего 1/4 от предыдущего лучшего детектора, а FLOPS последнего в 9,3 раза больше, чем у EfficientDet-D7.

Адрес бумаги:АР Вест V.org/ABS/1911.09…

тренировочные данные

1. Загрузите версию EfficientDet для Pytoch.

GitHub.com/нравится 117/еще…

2. Создайте набор данных.

Преобразуйте помеченный набор данных Labelme в набор данных COCO.

Ссылка*blog.csdn.net/hhhhhhhhhhw…*.

Набор данных, используемый в этом примере:download.CSDN.net/download/Хе-хе…

3. Загрузите модель предварительного обучения EfficientNets.

b0: GitHub.com/Лукелас/Е…

b1: GitHub.com/Лукелас/Е…

b2: GitHub.com/Лукелас/Е…

b3: GitHub.com/Лукелас/Е…

b4: GitHub.com/Лукелас/Е…

b5: GitHub.com/Лукелас/Е…

b6: GitHub.com/Лукелас/Е…

b7: GitHub.com/Лукелас/Е…

Поместите предварительно обученную модель в указанный каталог:

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

4. Установите пакеты, необходимые для модели

  1. pycocotools
  2. Pytorch версии 1.2 и выше (в модели используется pytorch nms, который включен только в версии выше 1.2)
  3. python-opencv (установка pip opencv-python)
  4. tensorboardX (pip install tensorboardx)
  5. webcolors(pip install webcolors)

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

  1. Измените параметры coco.yml.

project_name: coco  # also the folder name of the dataset that under data_path folder
train_set: train2017# Обратите внимание, что при преобразовании в COCO выбранный год остается прежним.
val_set: val2017
num_gpus: 1

# mean and std in RGB order, actually this part should remain unchanged as long as your dataset is similar to coco.
mean: [0.485, 0.456, 0.406]
std: [0.229, 0.224, 0.225]

# this is coco anchors, change it if necessary
anchors_scales: '[2 ** 0, 2 ** (1.0 / 3.0), 2 ** (2.0 / 3.0)]'
anchors_ratios: '[(1.0, 1.0), (1.4, 0.7), (0.7, 1.4)]'

# must match your dataset's category_id.
# category_id is one_indexed,
# for example, index of 'car' here is 2, while category_id of is 3
obj_list: ['aircraft', 'oiltank'] # Порядок категорий такой же, как порядок категорий при преобразовании COCO. Набор «самолет»: 1, «масляный бак»: 2 в COCO

5. Разместите набор данных

Поместите набор данных в каталог наборов данных, как показано ниже:

6. Измените параметры в train.py

主要需要修改的参数有compound_coef、batch_size、num_epochs、save_interval、lr
 、data_path、load_weights
compound_coef:0-7,选择EfficientDet的模型,对应d0-d7,同时对应EfficientNet网络的b0-b7。
batch_size:根据显卡显存的大小和类别的多少定义。
epochs:默认为500,一般情况300即可。
save_interval:迭代多少次保存一个模型。
lr:学习率,默认为10-4,这个模型不要用太大的学习率,经测试,学习率太大不收敛。
data_path:数据集的路径,本例放在datasets路径下面,就设置为datasets。
load_weights:加载模型的路径,如果没有一次训练完,再次训练就要用到此参数。
参数配置如下:
def get_args():

    parser = argparse.ArgumentParser('Yet Another EfficientDet Pytorch: SOTA object detection network - Zylo117')

    parser.add_argument('-p', '--project', type=str, default='coco', help='project file that contains parameters')

    parser.add_argument('-c', '--compound_coef', type=int, default=4, help='coefficients of efficientdet')

    parser.add_argument('-n', '--num_workers', type=int, default=2, help='num_workers of dataloader')

    parser.add_argument('--batch_size', type=int, default=2, help='The number of images per batch among all devices')

    parser.add_argument('--head_only', type=boolean_string, default=False,

                        help='whether finetunes only the regressor and the classifier, '

                             'useful in early stage convergence or small/easy dataset')

    parser.add_argument('--lr', type=float, default=1e-4)

    parser.add_argument('--optim', type=str, default='adamw', help='select optimizer for training, '

                                                                   'suggest using \'admaw\' until the'

                                                                   ' very final stage then switch to \'sgd\'')

    parser.add_argument('--num_epochs', type=int, default=300)

    parser.add_argument('--val_interval', type=int, default=1, help='Number of epoches between valing phases')

    parser.add_argument('--save_interval', type=int, default=11970, help='Number of steps between saving')

    parser.add_argument('--es_min_delta', type=float, default=0.0,

                        help='Early stopping\'s parameter: minimum change loss to qualify as an improvement')

    parser.add_argument('--es_patience', type=int, default=0,

                        help='Early stopping\'s parameter: number of epochs with no improvement after which training will be stopped. Set to 0 to disable this technique.')

    parser.add_argument('--data_path', type=str, default='datasets', help='the root folder of dataset')

    parser.add_argument('--log_path', type=str, default='logs/')

    parser.add_argument('-w', '--load_weights', type=str, default=None,

                        help='whether to load weights from a checkpoint, set None to initialize, set \'last\' to load last checkpoint')

    parser.add_argument('--saved_path', type=str, default='logs/')

    parser.add_argument('--debug', type=boolean_string, default=False, help='whether visualize the predicted boxes of trainging, '

                                                                  'the output images will be in test/')
运行效果如下:

 

контрольная работа

修改efficientdet_test.py参数:
  1. Compound_coef соответствует параметрам, заданным во время обучения, например, во время обучения он равен 0, а во время тестирования — 0.
  2. img_path: путь к тестовому изображению.
  3. порог = 0,2, iou_threshod = 0,35. Эти два параметра являются общими для обнаружения объектов: один для фильтрации оценки, а другой для установки степени перекрытия.
  4. obj_ist =[ 'aircraft' , 'oitank']: категория в том же порядке, что и категории во время тренировки.
修改完成后运行efficientdet_test.py文件
会在test文件夹下面保存结果的图片,结果如下:

 
运行coco_eval.py,会生成,测试模型得分。在这里注意numpy的版本。如果太高会报一个不兼容的错误,需要降到17版本。我用的版本是1.17.4,结果如下:
 

Уведомление

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

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