網(wǎng)上有很多關(guān)于如何檢測pos機(jī),手把手教物體檢測——M2Det的知識(shí),也有很多人為大家解答關(guān)于如何檢測pos機(jī)的問題,今天pos機(jī)之家(www.dsth100338.com)為大家整理了關(guān)于這方面的知識(shí),讓我們一起來看下吧!
本文目錄一覽:
如何檢測pos機(jī)
模型介紹物體檢測模型M2Det,是北京大學(xué)&阿里達(dá)摩院提出的Single-shot目標(biāo)檢測新模型,使用multi-level特征。在MS-COCO benchmark上,M2Det的單尺度版本和多尺度版本AP分別達(dá)到41.0和44.2 。
該模型的特點(diǎn):
· 提出多級(jí)特征金字塔網(wǎng)絡(luò)MLFPN。MLFPN的結(jié)構(gòu)如下:
· 基于提出的MLFPN,結(jié)合SSD,提出一種新的Single-shot目標(biāo)檢測模型M2Det
模型使用a) 下載源碼:"。
b) 在data文件夾下新建VOCdevkit文件夾,導(dǎo)入VOC格式的數(shù)據(jù)集。如下圖:c) 下載權(quán)重文件,放在weights(如果沒有就在根目錄新建)文件夾下面。d) 修改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')
e) 選擇配置文件。本例采用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,#更改類別,按照數(shù)據(jù)集里面的類別數(shù)量+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/' #保存權(quán)重文件的目錄 )train_cfg = dict( cuda = True,#是否使用cuda warmup = 5, per_batch_size = 2,#修改batchsize,按照自己顯卡的能力修改 lr = [0.004, 0.002, 0.0004, 0.00004, 0.000004],#學(xué)利率調(diào)整,調(diào)整依據(jù)step_lr的epoch數(shù)值。 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,#每個(gè)10個(gè)epoch保存一個(gè)模型。 num_workers= 2,#線程數(shù),根據(jù)CPU調(diào)整 )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', momentum=0.9, weight_decay=0.0005)#激活函數(shù)。
#修改dataset,本例采用VOC2007數(shù)據(jù)集,將COCO的刪除即可,刪除VOC2012
dataset = dict( VOC = dict( train_sets = [('2007', 'trainval')], eval_sets = [('2007', 'test')], ) )import osimport oshome = ""#home路徑,默認(rèn)是linux的,本例采用win10,講其修改為""VOCroot = os.path.join(home,"data/VOCdevkit/")COCOroot = os.path.join(home,"data/coco/")f) 刪除pycocotools
在安裝pycocotools工具前提下,將程序自帶的pycocotools工具包刪除。
修改coco.py
將:
from utils.pycocotools.coco import COCOfrom utils.pycocotools.cocoeval import COCOevalfrom utils.pycocotools import mask as COCOmask
修改為:
from pycocotools.coco import COCOfrom pycocotools.cocoeval import COCOevalfrom pycocotools import mask as COCOmask
g) 修改nms_wrapper.py將:
from .nms.cpu_nms import cpu_nms, cpu_soft_nmsfrom .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_nmsdef 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) return py_cpu_nms(dets, thresh)h) 修改train.py
修改選定配置的文件
parser.add_argument('-c', '--config', default='configs/m2det512_vgg.py')
修改數(shù)據(jù)的格式parser.add_argument('-d', '--dataset', default='VOC', help='VOC or COCO dataset')
然后就可以開始訓(xùn)練了。
i) 修改test.py
parser = argparse.ArgumentParser(description='M2Det Testing')parser.add_argument('-c', '--config', default='configs/m2det512_vgg.py', type=str)#選擇配置文件,和訓(xùn)練的配置文件對(duì)應(yīng)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'
測試結(jié)果:
j) 可視化結(jié)果修改demo.py中超參數(shù)
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文件夾下面,運(yùn)行demo.py.
以上就是關(guān)于如何檢測pos機(jī),手把手教物體檢測——M2Det的知識(shí),后面我們會(huì)繼續(xù)為大家整理關(guān)于如何檢測pos機(jī)的知識(shí),希望能夠幫助到大家!
