日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

手把手教物体检测——M2Det

發布時間:2023/12/31 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 手把手教物体检测——M2Det 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

目錄

模型介紹

模型使用

下載源碼:

在data文件夾下新建VOCdevkit文件夾,導入VOC格式的數據集。如下圖:

下載權重文件,放在weights(如果沒有就在根目錄新建)文件夾下面。

修改voc0712.py里面的類別。

選擇配置文件。

刪除pycocotools

修改nms_wrapper.py

修改train.py

修改test.py

可視化結果


模型介紹

物體檢測模型M2Det,是北京大學&阿里達摩院提出的Single-shot目標檢測新模型,使用multi-level特征。在MS-COCO benchmark上,M2Det的單尺度版本和多尺度版本AP分別達到41.044.2?

該模型的特點:

  • 提出多級特征金字塔網絡MLFPN。MLFPN的結構如下:

  • 基于提出的MLFPN,結合SSD,提出一種新的Single-shot目標檢測模型M2Det

模型使用

  • 下載源碼:

https://github.com/qijiezhao/M2Det”。

  • 在data文件夾下新建VOCdevkit文件夾,導入VOC格式的數據集。如下圖:

  • 下載權重文件,放在weights(如果沒有就在根目錄新建)文件夾下面。

  • 修改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_lrepoch數值。
??? 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,#每個10epoch保存一個模型。
??? num_workers= 2,#線程數,根據CPU調整
??? )

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)#激活函數。

#修改dataset,本例采用VOC2007數據集,將COCO的刪除即可,刪除VOC2012

dataset = dict(VOC = dict(train_sets = [('2007', 'trainval')],eval_sets = [('2007', 'test')],))import osimport oshome = ""#home路徑,默認是linux的,本例采用win10,講其修改為“”VOCroot = os.path.join(home,"data/VOCdevkit/")COCOroot = os.path.join(home,"data/coco/")
  • 刪除pycocotools

在安裝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.

本文實例:https://download.csdn.net/download/hhhhhhhhhhwwwwwwwwww/12428492

總結

以上是生活随笔為你收集整理的手把手教物体检测——M2Det的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。