содержание
1. Загрузите версию EfficientDet для Pytoch.
3. Загрузите модель предварительного обучения EfficientNets.
4. Установите пакеты, необходимые для модели
6. Измените параметры в train.py
Резюме
Команда Google Brain Quoc V. Le и др. систематически изучали различные конструкции архитектуры нейронных сетей для обнаружения объектов и предложили несколько ключевых оптимизаций, которые могут повысить эффективность модели. Во-первых, они предлагают взвешенную двунаправленную пирамидальную сеть признаков (BiFPN) для простого и быстрого слияния многомасштабных признаков; во-вторых, они предлагают метод составного масштабирования, при котором одновременно выполняется равномерное масштабирование разрешения, глубины и ширины изображения. сеть, сеть признаков и сеть предсказания ограничивающего прямоугольника/класса. На основе этих оптимизаций исследователи разработали новый детектор объектов EfficientDet. Структура модели следующая:
Особенности «ЭффективДет»:
- Используйте сетку EfficientNet в качестве магистральной сети.
- BiFPN предлагается для того, чтобы модель могла достигать эффективных двунаправленных кросс-масштабных соединений и объединения взвешенных признаков. На следующем рисунке представлена общая схема структуры FPN:
а) FPN использует нисходящий путь для объединения мультимасштабных функций уровня 3-7 (P3-P7); b) PANet добавляет дополнительный восходящий путь поверх FPN; c) NAS-FPN использует нейронную архитектуру поиска. нерегулярная топология сети признаков; (d)-(f) показывают три альтернативных подхода, изучаемых в этой статье. d добавляет дорогостоящие соединения между всеми входными и выходными функциями; e упрощает PANet, удаляя узлы только с одним входным краем; f — BiFPN для точности и эффективности.
- Масштабирование модели. Предлагается комбинированный метод масштабирования для детекторов объектов, который равномерно масштабирует разрешение/глубину/ширину всех магистральных сетей, сетей признаков, ограничивающих рамок/сетей прогнозирования категорий.
Основываясь на приведенных выше характеристиках, EfficientDet-D7 достигает наилучшего на данный момент значения 51,0 мАд в наборе данных COCO, точность превосходит предыдущий лучший детектор (+0,3% мАд), а его шкала составляет всего 1/4 от предыдущего лучшего детектора, а FLOPS последнего в 9,3 раза больше, чем у EfficientDet-D7.
Адрес бумаги:АР Вест V.org/ABS/1911.09…
тренировочные данные
1. Загрузите версию EfficientDet для Pytoch.
2. Создайте набор данных.
Преобразуйте помеченный набор данных Labelme в набор данных COCO.
Ссылка*blog.csdn.net/hhhhhhhhhhw…*.
Набор данных, используемый в этом примере:download.CSDN.net/download/Хе-хе…
3. Загрузите модель предварительного обучения EfficientNets.
Поместите предварительно обученную модель в указанный каталог:
Если вы можете подключиться к внешней сети, вы можете пропустить этот шаг, и предварительно обученная модель будет загружена автоматически во время выполнения.
4. Установите пакеты, необходимые для модели
- pycocotools
- Pytorch версии 1.2 и выше (в модели используется pytorch nms, который включен только в версии выше 1.2)
- python-opencv (установка pip opencv-python)
- tensorboardX (pip install tensorboardx)
- webcolors(pip install webcolors)
В сочетании с локальной средой, если загрузки по-прежнему отсутствуют, единственное, на что следует обратить внимание, — это версия pytorch.
- Измените параметры 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参数:
- Compound_coef соответствует параметрам, заданным во время обучения, например, во время обучения он равен 0, а во время тестирования — 0.
- img_path: путь к тестовому изображению.
- порог = 0,2, iou_threshod = 0,35. Эти два параметра являются общими для обнаружения объектов: один для фильтрации оценки, а другой для установки степени перекрытия.
- obj_ist =[ 'aircraft' , 'oitank']: категория в том же порядке, что и категории во время тренировки.
修改完成后运行efficientdet_test.py文件
会在test文件夹下面保存结果的图片,结果如下:
运行coco_eval.py,会生成,测试模型得分。在这里注意numpy的版本。如果太高会报一个不兼容的错误,需要降到17版本。我用的版本是1.17.4,结果如下:
Уведомление
1. Когда используется эта модель,compound_coef соответствует обучающему набору и тестовому набору.Если вы не будете осторожны, вы будете склонны к путанице.
2. При использовании набора данных COCO обратите внимание на порядок категорий.Если есть путаница, оценка будет очень низкой или даже нулевой.