Faster-rcnn 计算mAP程序精简版

由于Faster-rcnn里的计算mAP程序里面有很多嵌套,移植到自己的卷积网络框架下很麻烦,所以把这些嵌套都整合起来方便使用,整合之后的程序只包括test_net.py和voc_eval.py
下面是test_net.py

import _init_paths
from config import cfg
import caffe
import time, os, sys
from caffeWrapper.timer import Timer
import cv2
import numpy as np
from datasets.bbox_transform import clip_boxes, bbox_transform_inv ##这两个函数需要自己import进来
from nms.nms_wrapper import nms
import cPickle
import uuid
#import get_voc_results_file_template, im_detect
from voc_eval import voc_eval
import datetime


def get_voc_results_file_template(cls):##这个函数也改了一下
    #comp_id = ('comp4' + '_' + str(uuid.uuid4()))
    date = datetime.datetime.now().strftime('%Y-%m-%d-%H-%M-%S')##这里把原来的编码名称改为日期(年-月-日-时-分-秒),方便查看
    filename = date + '_det_' + 'test' + cls + '.txt'
    path = os.path.join(save_prob_path, filename)
    return path

def im_detect(net, im):
    """Detect object classes in an image given object proposals.

    Arguments:
        net (caffe.Net): Fast R-CNN network to use
        im (ndarray): color image to test (in BGR order)

    Returns:
        scores (ndarray): R x K array of object class scores (K includes
            background as object category 0)
        boxes (ndarray): R x (4*K) array of predicted bounding boxes
    """
    blobs = {
  'data' : None, 'rois' : None}

    im_orig = im.astype(np.float32, copy=True)
    im_orig -= cfg.PIXEL_MEANS

    im_shape = im_orig.shape
    im_size_min = np.min(im_shape[0:2])
    im_size_max = np.max(im_shape[0:2])

    processed_ims = []
    im_scale_factors = []
##这里图片都是一样大小
#    for target_size in cfg.TEST.SCALES:
#        im_scale = float(target_size) / float(im_size_min)
#        # Prevent the biggest axis from being more than MAX_SIZE
#        if np.round(im_scale * im_size_max) > cfg.TEST.MAX_SIZE:
#            im_scale = float(cfg.TEST.MAX_SIZE) / float(im_size_max)
#        im = cv2.resize(im_orig, None, None, fx=im_scale, fy=im_scale,
#                        interpolation=cv2.INTER_LINEAR)
#        im_scale_factors.append(im_scale)
#        processed_ims.append(im)


    im_scale = 1.0
    im = cv2.resize(im_orig, None, None, fx=im_scale, fy=im_scale,
                    interpolation=cv2.INTER_LINEAR)
    im_scale_factors.append(im_scale)
    processed_ims.append(im)        

    max_shape = np.array([imn.shape for imn in processed_ims]).max(axis=0)
    num_images = len(processed_ims)
    blob = np.zeros((num_images, max_shape[0], max_shape[1], 3),
                    dtype=np.float32)
    for i in xrange(num_images):
        imn = processed_ims[i]
        blob[i, 0:imn.shape[0], 0:imn.shape[1], :] = imn
    # Move channels (axis 3) to axis 1
    # Axis order will become: (batch elem, channel, height, width)
    channel_swap = (0, 3, 1, 2)
    blob = blob.transpose(channel_swap)

    blobs['data'] = blob
    im_scales =  np.array(im_scale_factors)

    im_blob = blobs['data']
    blobs['im_info'] = np.array([[im_blob.shape[2], im_blob.shape[3], im_scales[0]]],dtype=np.float32)

    # reshape network inputs
    net.blobs['data'].reshape(*(blobs['data'].shape))
    net.blobs['im_info'].reshape(*(blobs['im_info'].shap
  • 2
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 16
    评论
评论 16
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值