提交 37b85be6 编写于 作者: C chenyuntc

fix fetal fault in eval

上级 e436f60b
......@@ -89,7 +89,7 @@ class Dataset():
#TODO: check whose stride is negative to fix this instead copy all
# some of the strides of a given numpy array are negative.
# This is currently not supported, but will be added in future releases.
return img.copy(), bbox.copy(), label.copy(), scale,ori_img
return img.copy(), bbox.copy(), label.copy(), scale, ori_img
def __len__(self):
return len(self.db)
......
......@@ -370,13 +370,13 @@ class FasterRCNN(nn.Module):
self.lr3=self.optimizer.param_groups[2]['lr'] = lr3
return self.optimizer
def get_optimizer(self):
def get_optimizer_(self):
self.lr1=lr = opt.lr1
params = [param for param in self.parameters() if param.requires_grad]
self.optimizer = t.optim.SGD(params, lr=lr,momentum=0.9,weight_decay=0.0005)
return self.optimizer
def get_optimizer_(self):
def get_optimizer(self):
lr = opt.lr1
self.lr1= lr
params = []
......@@ -385,7 +385,7 @@ class FasterRCNN(nn.Module):
if 'bias' in key:
params += [{'params':[value],'lr':lr*2, 'weight_decay': 0}]
else:
params += [{'params':[value],'lr':lr, 'weight_decay': 5e-4}]
params += [{'params':[value],'lr':lr, 'weight_decay':opt.weight_decay}]
self.optimizer = t.optim.SGD(params, momentum=0.9)
return self.optimizer
......
......@@ -13,21 +13,15 @@ def decom_vgg16(pretrained=True):
model = vgg16(pretrained)
features = list(model.features)[:30]
classifier = model.classifier
classifier = list(classifier)
# delete dropout
del classifier[6]
del classifier[5]
del classifier[2]
classifier = nn.Sequential(*classifier)
#
# del classifier._modules['6']
# classifier = list(classifier)
# del the last layer
del classifier._modules['6']
# 冻结前几层的卷积
# free top3 conv
for layer in features[:10]:
for p in layer.parameters():
p.requires_grad=False
return nn.Sequential(*features),classifier
def decom_vgg16_chainer(pretrained=True):
......@@ -41,6 +35,10 @@ def decom_vgg16_chainer(pretrained=True):
del classifier[5]
del classifier[2]
classifier = nn.Sequential(*classifier)
# chainer ceil mode = True
for idx in [4,9,16,23]:
features[idx].ceil_mode=True
#
# del classifier._modules['6']
......@@ -58,6 +56,8 @@ def decom_vgg16bn(pretrained=True):
classifier = model.classifier
del classifier._modules['6']
# 冻结前几层的卷积
for layer in features[:13]:
for p in layer.parameters():
......@@ -130,7 +130,7 @@ class FasterRCNNVGG16(FasterRCNN):
min_size=600, max_size=1000,
ratios=[0.5, 1, 2], anchor_scales=[8, 16, 32]
):
extractor,classifier = decom_vgg16_chainer(not opt.load_path)
extractor,classifier = decom_vgg16(not opt.load_path)
rpn = RegionProposalNetwork(
512, 512,
......
......@@ -33,7 +33,7 @@ def eval(dataloader,faster_rcnn,test_num=1000):
if ii==test_num:break
result = eval_detection_voc(
pred_bboxes, pred_labels, pred_labels,
pred_bboxes, pred_labels, pred_scores,
gt_bboxes, gt_labels, gt_difficults,
use_07_metric=True)
return result
......@@ -70,7 +70,7 @@ def train(**kwargs):
scale = at.scalar(scale)
img,bbox,label = img.cuda().float(),bbox_.cuda(),label_.cuda()
img,bbox,label = Variable(img),Variable(bbox),Variable(label)
losses,rois = trainer.train_step(img,bbox,label,scale)
losses = trainer.train_step(img,bbox,label,scale)
if (ii+1)%opt.plot_every == 0:
if os.path.exists(opt.debug_file):
......
......@@ -140,11 +140,11 @@ class FasterRCNNTrainer(nn.Module):
# I think it's fine to break the computation graph of rois
# Sample RoIs and forward
sample_roi, gt_roi_loc, gt_roi_label = self.proposal_target_creator(
roi,
at.tonumpy(bbox),
at.tonumpy(label),
self.loc_normalize_mean,
self.loc_normalize_std)
roi,
at.tonumpy(bbox),
at.tonumpy(label),
self.loc_normalize_mean,
self.loc_normalize_std)
self.sample_roi, self.gt_roi_label = sample_roi,gt_roi_label
#NOTE it's all zero because now it only support for batch=1 now
sample_roi_index = t.zeros(len(sample_roi))
......@@ -199,16 +199,16 @@ class FasterRCNNTrainer(nn.Module):
losses = [rpn_loc_loss , rpn_cls_loss , roi_loc_loss , roi_cls_loss]
losses = losses + [sum(losses)]
return LossTuple(*losses),rois
return LossTuple(*losses)
def train_step(self, imgs, bboxes, labels, scale):
self.optimizer.zero_grad()
losses,rois = self.forward(imgs, bboxes, labels, scale)
losses = self.forward(imgs, bboxes, labels, scale)
rpn_loc_loss, rpn_cls_loss, roi_loc_loss, roi_cls_loss,total_loss = losses
total_loss.backward()
self.optimizer.step()
self.update_meters(losses)
return losses,rois
return losses
# def visulize(self):
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册