Обучение обнаружению объектов вручную - M2Det

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

содержание

Введение модели

использование модели

Скачать исходный код:

Создайте новую папку VOCdevkit в папке данных и импортируйте набор данных в формате VOC. Как показано ниже:

Загрузите файл с весами и поместите его в папку с весами (если нет, создайте новый в корневом каталоге).

Измените категории в voc0712.py.

Выберите профиль.

удалить пикокотулс

Изменить nms_wrapper.py

Изменить train.py

Изменить test.py

Визуализируйте результаты


Введение модели

Модель обнаружения объектов M2Det — это новая однократная модель обнаружения целей, предложенная Пекинским университетом и Институтом Али Дхармы с использованием многоуровневых функций. В тесте MS-COCO одномасштабная версия и многомасштабная версия AP M2Det достигают41.0и44.2 .

Особенности этой модели:

  • Предлагаемая многоуровневая сеть функциональных пирамидМЛФПН. Структура MLFPN выглядит следующим образом:

  • На основе предложенного MLFPN в сочетании с SSD предлагается новая модель однократного обнаружения объектов.M2Det

использование модели

  • Скачать исходный код:

GitHub.com/Qianji найти/M…".

  • Создайте новую папку VOCdevkit в папке данных и импортируйте набор данных в формате VOC. Как показано ниже:

  • Загрузите файл с весами и поместите его в папку с весами (если нет, создайте новый в корневом каталоге).

  • Измените категории в voc0712.py.

будет:

VOC_CLASSES = ( '__background__', # always index 0

    'aeroplane', 'bicycle', 'bird', 'boat',

    'bottle', 'bus', 'car', 'cat', 'chair',

    'cow', 'diningtable', 'dog', 'horse',

    'motorbike', 'person', 'pottedplant',

    'sheep', 'sofa', 'train', 'tvmonitor')

изменить на:

VOC_CLASSES = ( '__background__' , # always index 0
'aircraft' , 'oiltank' )

Выберите профиль.

本例采用configs->m2det512_vgg.py配置文件

model = dict(
type = 'm2det' ,
input_size = 512,
init_net = True,
pretrained = 'weights/vgg16_reducedfc.pth' ,
m2det_config = dict(
backbone = 'vgg16' ,
net_family = 'vgg' , # vgg includes ['vgg16','vgg19'], res includes ['resnetxxx','resnextxxx']
base_out = [22,34], # [22,34] for vgg, [2,4] or [3,4] for res families
planes = 256,
num_levels = 8,
num_scales = 6,
sfam = False,
smooth = True,
num_classes = 3, # Изменить категорию в соответствии с количеством категорий в наборе данных + 1 (фон)
),
rgb_means = (104, 117, 123),
p = 0.6,
anchor_config = dict(
step_pattern = [8, 16, 32, 64, 128, 256],
size_pattern = [0.06, 0.15, 0.33, 0.51, 0.69, 0.87, 1.05],
),
save_eposhs = 10,
weights_save = 'weights/' # Директория для сохранения файлов весов
****)
train_cfg = dict(
cuda = True, #использовать ли cuda
warmup = 5,
Per_batch_size = 2, # # 修 Batchsize, изменить возможность сделать видеокарту
lr = [0,004, 0,002, 0,0004, 0,00004, 0,000004], # Корректировка скорости обучения, корректировка основана на значении эпохи step_lr.
gamma = 0.1,
end_lr = 1e-6,
step_lr = dict(
COCO = [90, 110, 130, 150, 160],
VOC = [100, 150, 200, 250, 300], # unsolve
),
print_epochs = 10, # Сохранять модель каждые 10 эпох.
num_workers= 2, #Количество потоков, скорректированное в зависимости от ЦП
)

test_cfg = dict(
cuda = True,
topk = 0,
iou = 0.45,
soft_nms = True,
score_threshold = 0.1,
keep_per_class = 50,
save_folder = **'eval'
**)

loss = dict(overlap_thresh = 0.5,
prior_for_matching = True,
bkg_label = 0,
neg_mining = True,
neg_pos = 3,
neg_overlap = 0.5,
encode_target = False)

optimizer = dict(type= 'SGD', импульс=0,9, weight_decay=0,0005)#Функция активации.

# Изменить набор данных, в этом примере используется набор данных VOC2007, просто удалите COCO, удалите VOC2012

dataset = dict(

    VOC = dict(

        train_sets = [('2007', 'trainval')],

        eval_sets = [('2007', 'test')],

        )

      )

import os

import os

home = ""#home路径,默认是linux的,本例采用win10,讲其修改为“”

VOCroot = os.path.join(home,"data/VOCdevkit/")

COCOroot = os.path.join(home,"data/coco/")
  • удалить пикокотулс

После установки инструмента pycocotools удалите набор инструментов pycocotools, который поставляется вместе с программой.

Изменить coco.py

будет:

from utils.pycocotools.coco import COCO
from utils.pycocotools.cocoeval import COCOeval
from utils.pycocotools import mask as COCOmask

изменить на:

from pycocotools.coco import COCO
from pycocotools.cocoeval import COCOeval
from pycocotools import mask as COCOmask

  • Изменить nms_wrapper.py

将:

from .nms.cpu_nms import cpu_nms, cpu_soft_nms
from .nms.gpu_nms import gpu_nms
# def nms(dets, thresh, force_cpu=False):
#     """Dispatch to either CPU or GPU NMS implementations."""
#     if dets.shape[0] == 0:
#         return []
#     if cfg.USE_GPU_NMS and not force_cpu:
#         return gpu_nms(dets, thresh, device_id=cfg.GPU_ID)
#     else:
#         return cpu_nms(dets, thresh)
def nms(dets, thresh, force_cpu=False):
"""Dispatch to either CPU or GPU NMS implementations."""
if dets.shape[0] == 0:
return []
if force_cpu:
return cpu_soft_nms(dets, thresh, method = 1)
#return cpu_nms(dets, thresh)
return gpu_nms(dets, thresh)

修改为:

from .nms.py_cpu_nms import py_cpu_nms

def nms(dets, thresh, force_cpu=False):
"""Dispatch to either CPU or GPU NMS implementations."""
if dets.shape[0] == 0:
return []
if force_cpu:
return py_cpu_nms(dets, thresh, method = 1)
return py_cpu_nms(dets, thresh)

  • Изменить train.py

修改选定配置的文件

parser.add_argument( '-c' , '--config' , default= 'configs/m2det512_vgg.py' )

Изменить формат данных
parser.add_argument( '-d' , '--dataset' , default= 'VOC' , help= 'VOC or COCO dataset' )

然后就可以开始训练了。
  • Изменить test.py

parser = argparse.ArgumentParser(description= 'M2Det Testing' )
parser.add_argument( '-c' , '--config' , default= 'configs/m2det512_vgg.py', type=str)#Выберите конфигурационный файл, соответствующий тренировочному конфигурационному файлу
parser.add_argument( '-d' , '--dataset' , default= 'VOC' , help= 'VOC or COCO version' )
parser.add_argument( '-m' , '--trained_model' , default= 'weights/M2Det_VOC_size512_netvgg16_epoch30.pth' , type=str, help= 'Trained state_dict file path to open' )
parser.add_argument( '--test' , action= 'store_true' , help= 'to submit a test file' )

修改voc0712.py282行的xml路径。将:

annopath = os.path.join(
rootpath,
'Annotations' ,
'{:s}.xml' )

改为:

annopath = rootpath+ '/Annotations/{:s}.xml'

Результаты теста:

  • Визуализируйте результаты

Измените гиперпараметры в demo.py.

parser.add_argument( '-c' , '--config' , default= 'configs/m2det512_vgg.py' , type=str)
parser.add_argument( '-f' , '--directory' , default= 'imgs/' , help= 'the path to demo images' )
parser.add_argument( '-m' , '--trained_model' , default= 'weights/M2Det_VOC_size512_netvgg16_epoch30.pth' , type=str, help= 'Trained state_dict file path to open' )

Затем поместите несколько тестовых изображений в папку imgs и запустите demo.py.

Примеры этой статьи:download.CSDN.net/download/Хе-хе…