faster-rcnn系列学习之准备数据

            如下列举了 将数据集做成VOC2007格式用于Faster-RCNN训练的相关链接。

  1. RCNN系列实验的PASCAL VOC数据集格式设置 
  2. 制作VOC2007数据集用于Faster-RCNN训练
  3. 将数据集做成VOC2007格式用于Faster-RCNN训练
    这一篇比较详细地介绍了如何制造voc2007的所有文件,内含相关软件和代码,值得一看。
  4. voc2007数据集的下载和解压

下面的部分介绍了py-faster-rcnn源码中关于产生imdb与roidb的方法。

  1.     faster-rcnn 之训练数据是如何准备的:imdb和roidb的产生
  2. faster rcnn源码解读(四)之数据类型imdb.py和pascal_voc.py(主要是imdb和roidb数据类型的解说)
  3. py-faster-rcnn源码解读系列(二)——pascal_voc.py

具体的训练方法:
Faster-RCNN+ZF用自己的数据集训练模型(Python版本)

这里简单说一下Imdb与roidb。

imdb是作者封装的一个图片数据库类,内含数据库的名字,比如默认的是voc_2007_trainval ,部分定义如下:

class imdb(object):"""Image database."""def __init__(self, name):self._name = nameself._num_classes = 0self._classes = []self._image_index = []self._obj_proposer = 'selective_search'self._roidb = Noneself._roidb_handler = self.default_roidb #(handle本来是指针,这里就当做引用)# Use this dict for storing dataset specific config optionsself.config = {}@propertydef name(self):return self._name@propertydef num_classes(self):return len(self._classes)@propertydef classes(self):return self._classes@propertydef image_index(self):return self._image_index@propertydef roidb_handler(self):return self._roidb_handler@roidb_handler.setterdef roidb_handler(self, val):self._roidb_handler = val
##!!!!!!设置roidbdef set_proposal_method(self, method):method = eval('self.' + method + '_roidb') # python中eval是可以具体运行里面的字符串的,这里指运行:self.gt_roidb,函数在pascal_voc.py中。self.roidb_handler = method@propertydef roidb(self):# A roidb is a list of dictionaries, each with the following keys:#   boxes#   gt_overlaps#   gt_classes#   flippedif self._roidb is not None:return self._roidbself._roidb = self.roidb_handler()return self._roidb#cache_path: /data1/caiyong.wang/program/py-faster-rcnn.back_up/data/cache  缓冲路径@propertydef 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@propertydef num_images(self):return len(self.image_index)
其中包含了roidb,roidb翻译过来就是roi database.其实就是目标检测包围盒,从上面也可以看出, roidb是字典的列表,每项都是一张图片,如下的每一项都是一张图片上多个盒子的信息,因此是二维数组

# A roidb is a list of dictionaries, each with the following keys:
 #  -  boxes 一个二维数组   每一行存储 xmin ymin xmax ymax ,行指的多个box的序号
# -  gt_classes存储了每个box所对应的类索引(类数组在初始化函数中声明)
# -  overlap是一个二维数组,行指box的序号,列共有21列,存储的是0.0或者1.0 ,当box对应的类别时,自然为1.0.这实际上是指对于ground truth box,由于这里的候选框就是ground truth box,所以自然重叠后为1,而与其他的自然重叠设为0.后来被转成了稀疏矩阵.
# -  seg _areas存储着 box的面积
#-  flipped 为false 代表该图片还未被翻转(后来在train.py里会将翻转的图片加进去,用该变量用于区分)


产生imdb与roidb的主要代码是:

def get_roidb(imdb_name, rpn_file=None):imdb = get_imdb(imdb_name)#通过工厂类获取数据库信息print 'Loaded dataset `{:s}` for training'.format(imdb.name)imdb.set_proposal_method(cfg.TRAIN.PROPOSAL_METHOD)print 'Set proposal method: {:s}'.format(cfg.TRAIN.PROPOSAL_METHOD)if rpn_file is not None:imdb.config['rpn_file'] = rpn_fileroidb = get_training_roidb(imdb)#获得训练数据return roidb, imdb

步骤是
1. 通过 lib/datasets/factory.py获取pascal_voc对象。

2. pascal_voc继承自imdb,进一步定义了该数据库下的一些函数。

如下是pascal_voc的一些成员举例:

#下面是成员变量的初始化:
#{
#    year:’2007’
#    name:'voc_2007_trainval'
#    image _set:’trainval’
#    devkit _path:’data/VOCdevkit2007’
#    data _path:’data /VOCdevkit2007/VOC2007’
#    classes:(…)_如果想要训练自己的数据,需要修改这里_
#    class _to _ind:{…} _一个将类名转换成下标的字典 _
#    image _ext:’.jpg’
#    image _index: [‘000001’,’000003’,……]_根据trainval.txt获取到的image索引_
#    roidb _handler: <Method gt_roidb >
#    salt:  <Object uuid >
#    comp _id:’comp4’
#    config:{…}
#} 


3. 通过 lib/datasets/imdb.py 中的set_proposal_method 获取roidb.

    def set_proposal_method(self, method):method = eval('self.' + method + '_roidb') # python中eval是可以具体运行里面的字符串的,这里指运行:self.gt_roidb,函数在pascal_voc.py中。self.roidb_handler = method
这里默认是eval('self.gt_roidb'),self.gt_roidb,函数在pascal_voc.py中。定义了ground truth的box的一些信息。

4. 通过lib/fast rcnn/train.py中的如下函数获取训练数据。

def get_training_roidb(imdb):"""Returns a roidb (Region of Interest database) for use in training."""if cfg.TRAIN.USE_FLIPPED:print 'Appending horizontally-flipped training examples...'imdb.append_flipped_images()print 'done'print 'Preparing training data...'rdl_roidb.prepare_roidb(imdb)print 'done'return imdb.roidb

这里面进行了图片的翻转,其实是box的翻转(见 lib/datasets/imdb.py/append_flipped_images)

以及lib/roi_data_layer/roidb/rdl_roidb对象的prepare_roidb ,这个函数丰富了roi的一些信息,新增了每一个图片的roidb的图片路径,大小,以及每个box对应的最大重叠,和最大重叠对应的label等。

def prepare_roidb(imdb):"""Enrich the imdb's roidb by adding some derived quantities thatare useful for training. This function precomputes the maximumoverlap, taken over ground-truth boxes, between each ROI andeach ground-truth box. The class with maximum overlap is alsorecorded."""sizes = [PIL.Image.open(imdb.image_path_at(i)).sizefor i in xrange(imdb.num_images)]roidb = imdb.roidbfor i in xrange(len(imdb.image_index)): #此时如果在前面调用了imdb.append_flipped_images,则imdb.image_index已经翻倍。roidb[i]['image'] = imdb.image_path_at(i)roidb[i]['width'] = sizes[i][0]roidb[i]['height'] = sizes[i][1]# need gt_overlaps as a dense array for argmaxgt_overlaps = roidb[i]['gt_overlaps'].toarray()# max overlap with gt over classes (columns)max_overlaps = gt_overlaps.max(axis=1)# gt class that had the max overlapmax_classes = gt_overlaps.argmax(axis=1)roidb[i]['max_classes'] = max_classesroidb[i]['max_overlaps'] = max_overlaps# sanity checks# max overlap of 0 => class should be zero (background)zero_inds = np.where(max_overlaps == 0)[0]assert all(max_classes[zero_inds] == 0)# max overlap > 0 => class should not be zero (must be a fg class)nonzero_inds = np.where(max_overlaps > 0)[0]assert all(max_classes[nonzero_inds] != 0)








本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/258660.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C# 委托链、多路广播委托

委托链、多路广播委托&#xff1a;也就是把多个委托链接在一起,我们把链接了多个方法的委托称为委托链或多路广播委托 例&#xff1a; 1 class HelloWorld2 {3 //定义委托类型4 delegate void DelegationChain();5 static void Main(string[] args)6 …

openssl 生成证书_使用证书和私钥导出P12格式个人证书!

【OpenSSL】使用证书和私钥导出P12格式个人证书1, 产生CA证书1.1, 生成ca的私钥openssl genrsa -out cakey.pem 20481.2, 生成ca的自签名证书请求openssl req -new -key cakey.pem -subj "/CNExample Root CA" -out cacsr.pem1.3, 自签名ca的证书openssl x509 -req -…

PHP (20140505)

数据库表与表之间的连接是用id联系。 join on&#xff1b;转载于:https://www.cnblogs.com/sunshine-c/p/3710283.html

py-faster-rcnn代码roidb.py的解读

roidb是比较复杂的数据结构&#xff0c;存放了数据集的roi信息。原始的roidb来自数据集&#xff0c;在trian.py的get_training_roidb(imdb)函数进行了水平翻转扩充数量&#xff0c;然后prepare_roidb(imdb)【定义在roidb.py】为roidb添加了一些说明性的属性。 在这里暂时记录下…

python 概率分布_python实现概率分布

伯努利分布from scipy import statsimport numpy as npimport matplotlib.pyplot as pltxnp.arange(0,2,1)xarray([0, 1])# 求对应分布的概率&#xff1a;概率质量函数 (PMF)p0.5# 硬币朝上的概率dfstats.bernoulli.pmf(x,p)dfarray([0.5, 0.5])#绘图vlines用于绘制竖直线(vert…

CodeForces 7D Palindrome Degree 字符串hash

题目链接&#xff1a;点击打开链接 #include<stdio.h> #include<iostream> #include<string.h> #include<set> #include<vector> #include<map> #include<math.h> #include<queue> #include<string> #include<stdlib…

程序清单8-9 回送所有命令行参数和所有环境字符串

1 /*2 3 Name : test.c4 Author : blank5 Version :6 Copyright : Your copyright notice7 Description : 程序清单8-9 回送所有命令行参数和所有环境字符串8 9 */ 10 11 #include "ourhdr.h" 12 13 int main(int argc, char *argv[]) 14…

SQL快速入门

关系化数据库保存关系模式数据的容器关系模式是对业务对象实体&#xff0c;属性以及关系的抽象&#xff0c;提炼需求的名词是建立实体关系模型常用的方法。要了解E-R实体关系图的绘制。常用关系数据库Microsoft SQL Server&#xff1b;微软公司产品&#xff0c;中等规模数据库&…

Faster RCNN minibatch.py解读

minibatch.py 的功能是&#xff1a; Compute minibatch blobs for training a Fast R-CNN network. 与roidb不同的是&#xff0c; minibatch中存储的并不是完整的整张图像图像&#xff0c;而是从图像经过转换后得到的四维blob以及从图像中截取的proposals&#xff0c;以及与之对…

oracle精简版_使用Entity Framework Core访问数据库(Oracle篇)

前言哇。。看看时间 真的很久很久没写博客了 将近一年了。最近一直在忙各种家中事务和公司的新框架 终于抽出时间来更新一波了。本篇主要讲一下关于Entity Framework Core访问oracle数据库的采坑。。强调一下&#xff0c;本篇文章发布之前 关于Entity Framework Core访问oracl…

interrupt、interrupted 、isInterrupted 区别

interrupt&#xff1a;调用方法&#xff0c;是线程处于中断状态&#xff0c;但是这个方法只是让线程设置为中断状态&#xff0c;并不会真正的停止线程。支持线程中断的方法就是在坚持线程中断状态&#xff0c;一旦线程中断状态被设置为中断&#xff0c;就会抛出异常。interrupt…

java String部分源码解析

String类型的成员变量 /** String的属性值 */ private final char value[];/** The offset is the first index of the storage that is used. *//**数组被使用的开始位置**/private final int offset;/** The count is the number of characters in the String. *//**String中…

python在材料模拟中的应用_基于Python的ABAQUS二次开发及在板料快速冲压成形模拟中的应用...

2009doi:1013969/j1issn1100722012120091041013基于Python的ABAQUS二次开发及在板料快速冲压成形模拟中的应用(北京航空航天大学飞行器制造工程系,北京100191)吴向东刘志刚万敏王文平黄霖摘要:采用Python脚本语言对ABAQUS的前处理模块进行二次开发,讨论了Python脚本在ABAQUS二次…

Doxygen简介

&#xff08;转自&#xff1a;http://www.cnblogs.com/liuliunumberone/archive/2012/04/10/2441391.html&#xff09; 一&#xff0e;什么是Doxygen? Doxygen 是一个程序的文件产生工具&#xff0c;可将程序中的特定批注转换成为说明文件。通常我们在写程序时&#xff0c;或多…

javascript之闭包理解以及应用场景

1 function fn(){2 var a 0;3 return function (){4 return a;5 } 6 }如上所示&#xff0c;上面第一个return返回的就是一个闭包&#xff0c;那么本质上说闭包就是一个函数。那么返回这个函数有什么用呢&#xff1f;那是因为这个函数可以调用到它外部的a…

faster rcnn学习之rpn、fast rcnn数据准备说明

在上文《 faster-rcnn系列学习之准备数据》,我们已经介绍了imdb与roidb的一些情况&#xff0c;下面我们准备再继续说一下rpn阶段和fast rcnn阶段的数据准备整个处理流程。 由于这两个阶段的数据准备有些重合&#xff0c;所以放在一起说明。 我们并行地从train_rpn与train_fas…

sql server规范

常见的字段类型选择 1.字符类型建议采用varchar/nvarchar数据类型2.金额货币建议采用money数据类型3.科学计数建议采用numeric数据类型4.自增长标识建议采用bigint数据类型 (数据量一大&#xff0c;用int类型就装不下&#xff0c;那以后改造就麻烦了)5.时间类型建议采用为dat…

关于标准库中的ptr_fun/binary_function/bind1st/bind2nd

http://www.cnblogs.com/shootingstars/archive/2008/11/14/860042.html 以前使用bind1st以及bind2nd很少&#xff0c;后来发现这两个函数还挺好玩的&#xff0c;于是关心上了。在C Primer对于bind函数的描述如下&#xff1a;“绑定器binder通过把二元函数对象的一个实参绑定到…

CSS伪类

一、首字母的颜色字体写法 p:first-letter 二、文本的特殊样式设置 first-line css伪类可与css类配合使用 伪元素只能用于块级元素 转载于:https://www.cnblogs.com/boyblog/p/4623374.html

php 结构体_【开发规范】PHP编码开发规范下篇:PSR-2编码风格规范

之前的一篇文章是对PSR-1的基本介绍接下来是PSR-2 编码风格规范&#xff0c;它是 PSR-1 基本代码规范的继承与扩展。PSR-1 和PSR-2是PHP开发中基本的编码规范&#xff0c;大家其实都可以参考学习下&#xff0c;虽然说每个开发者都有自己熟悉的一套开发规范&#xff0c;但是我觉…