# --------------------------------------------------------
# Fast R-CNN
# Copyright (c) 2015 Microsoft
# Licensed under The MIT License [see LICENSE for details]
# Written by Ross Girshick and Xinlei Chen
# --------------------------------------------------------
from __future__ import absolute_import
from __future__ import division
from __future__ import print_function
import os, sys
import os.path as osp
import PIL
from utils.cython_bbox import bbox_overlaps
import numpy as np
import scipy.sparse
from model import config as cfg
'''
imdb class为所有数据集的父类,包含了所有数据集共有的特性。
例如:数据集名称(name)、数据集类名列表(classes)、数据集的文件名列表(_image_index)、roi集合、config
'''
'''
roidb是由字典组成的list,roidb[img_index]包含了该图片索引所包含到roi信息,下面以roidb[img_index]为例说明:
boxes:box位置信息,box_num*4的np array
gt_overlaps:所有box在不同类别的得分,box_num*class_num矩阵
gt_classes:所有box的真实类别,box_num长度的list
filpped:是否翻转
max_overlaps:每个box的在所有类别的得分最大值,box_num长度
max_classes:每个box的得分最高所对应的类,box_num长度
'''
class imdb(object):
"""Image database."""
def __init__(self, name, classes=None):
self._name = name # 数据集名称
self._num_classes = 22 # 数据集类别个数
if not classes:
self._classes = []
else:
self._classes = classes # 数据集类名列表
self._image_index = [] # 数据集图片文件名列表 例如 data/VOCdevkit2007/VOC2007/ImageSets/Main/{image_set}.txt
self._obj_proposer = 'gt'
self._roidb = None # 这是一个字典,里面包含了gt_box、真实标签、gt_overlaps和翻转标签 flipped: true,代表图片被水平反转
self._roidb_handler = self.default_roidb # roi数据列表
# Use this dict for storing dataset specific config options
self.config = {}
@property
def name(self):
return self._name
@property
def num_classes(self):
return len(self._classes)
@property
def classes(self):
return self._classes
@property
def image_index(self):
return self._image_index
# 返回ground-truth每个ROI构成的数据集
@property
def roidb_handler(self):
return self._roidb_handler
@roidb_handler.setter
def roidb_handler(self, val):
self._roidb_handler = val
def set_proposal_method(self, method):
method = eval('self.' + method + '_roidb')
self.roidb_handler = method
# 属性
@property
def roidb(self):
# A roidb is a list of dictionaries, each with the following keys:
# boxes
# gt_overlaps
# gt_classes
# flipped
# 如果已经有了,那么直接返回,没有就通过指针指向的函数生成
if self._roidb is not None:
return self._roidb
self._roidb = self.roidb_handler()
return self._roidb
# cache_path用来生成roidb缓存文件的文件夹,用来存储数据集的roi
@property
def cache_path(self):
cache_path = osp.abspath(osp.join(cfg.DATA_DIR, 'cache'))
if not os.path.exists(cache_path):
os.makedirs(cache_path)
return cache_path
@property
def num_images(self):
return len(self.image_index)
def image_path_at(self, i):
rai
Faster Rcnn 代码解读之 imdb.py
最新推荐文章于 2022-09-05 22:13:02 发布