faster-rcnn默认的数据集形式有pascal voc、coco和kitti等,然而这些数据集都有固定的形式,就拿pascal voc来说,其每一张图片单独对应一个xml文件,该xml文件用于描述目标位置及种类等,是一个类似于html的文本,需要特定解析才能得到想要的信息!然而,在训练我们自己数据时,并不一定要迎合这种数据格式,很多时候,我们直接使用txt文档里保存的数据提供给到faster-rcnn训练更加方便快捷利落!

在上一篇里,有说到我创建的训练集标签格式如下:

文件路径 类名 真值RPN个数 第一个标注框坐标 第二个标注框坐标 ......

那么如何将自己的数据正确喂给faster-rcnn呢?

这要从分析faster-rcnn里的源代码来说起!

faster-rcnn的训练以train_net.py开始,其中我们主要关注imdb和pascal_voc这两个数据库类,我们主要修改的也是他们的内部接口!

imdb的调用逻辑如下:

imdb = get_imdb(args.imdb_name) --> datasets.pascal_voc(split, year)

其中pascal_voc继承了imdb类,我们主要关注其如下几点:

self._devkit_path :存放数据的pascal VOC根目录(需要修改)

self._data_path :存放具体存放图片的路径(需要修改)

self._classes :包含背景和类别名字的列表(需要修改)

_load_image_set_index(self) :图片索引(需要修改)

_load_pascal_annotation(self, index) :根据索引从xml文件拿标注框等,返回一个拥有五个 元素关键字为'boxes'、'gt_classes'、'gt_overlaps'、'flipped'及'seg_areas'的字典

self._roidb_handler :返回一个包含ground truth roidb的列表,列表的每一个元素均是一个包含五个元素的字典(需要修改)

image_path_from_index(self, index) :根据索引返回图片路径(需要修改)

image_path_at(self, i) : image_path_from_index(self, index)的再封装

其中imdb类使用“@property”封装成员函数,使得我们可以直接以点操作来获取接口的使用,那么imdb就包含了对pascal_voc类的进一步封装,关键接口介绍如下:

num_classes(self) :类别数目,包括背景,return len(self._classes)

classes(self) :类别列表,return self._classes

image_index(self) :图片索引,return self._image_index

roidb_handler(self) :获取roidb数据列表,return self._roidb_handler

roidb(self):返回元素为字典的列表,return self._roidb

cache_path(self) :缓存路径,用于存放gt_roidb,通常位于${faster-rcnn}/data/cache目录下,更新数据或修改了数据对接方式后,一定要将cache目录删除,否则不会对roidb更新!

append_flipped_images(self) :对数据进行flip操作,数据量会翻倍,需要打开cfg.TRAIN.USE_FLIPPED

imdb是pascal_voc的一个实例,而pascal_voc继承imdb类,所以imdb实例可以使用imdb类的对外接口,我们要做数据对接,一定要确保修改如下几点:

1、self._classes要改为我们自己的种类名字,在生成gt_roidb时我们会用到类名来得到对应种类所在的类索引值,然后需要到Faster-RCNN_TF/lib/networks/VGGnet_train.py修改n_classes为总的类别加上背景的数目;

2、gt_roidb(self)需要修改,该接口返回一个其元素为字典的列表,该字典包含五个关键字'boxes'、'gt_classes'、'gt_overlaps'、'flipped'及'seg_areas',因此我们就是要将txt文本里存放的标注框数据保存到该列表里,其每一个列表元素保存的是每一张图片的标注框信息!我是这样做的,原本代码是使用_load_pascal_annotation(self, index)得到每一张图片的roidb信息再生成一个列表,而我自己封装一个接口,直接获取每一张图片的gt_roidb并返回列表给到gt_roidb接口,代码如下:

def _load_pascal_txt(self):

"""Load image and bounding boxes info from txt file in the personal format."""

gt_roidb = list()

filename = "/home/xsr-ai/Desktop/DetectDogs/enhance/train_lable_rpn.txt"

hd = open(filename, "r")

for line in hd.readlines():

lineinfo = line.split(" ")

num_objs = int(lineinfo[2])

objs = range(num_objs)

boxes = np.zeros((num_objs, 4), dtype=np.uint16)

gt_classes = np.zeros((num_objs), dtype=np.int32)

overlaps = np.zeros((num_objs, self.num_classes), dtype=np.float32)

# "Seg" area for pascal is just the box area

seg_areas = np.zeros((num_objs), dtype=np.float32)

cls = self._mapping_class_to_ind[lineinfo[1]] # 1 col is class, fixed not dynamic

for ix, obj in enumerate(objs):

bbox = lineinfo[3+obj] # roi begin at 3 col

bbox = bbox.split(",")

x1,y1,x2,y2 = [float(pos)-1 if int(pos) >= 1 else float(pos) for pos in bbox]

boxes[ix, :] = [x1, y1, x2, y2]

gt_classes[ix] = cls

overlaps[ix, cls] = 1.0

seg_areas[ix] = (x2 - x1 + 1) * (y2 - y1 + 1)

overlaps = scipy.sparse.csr_matrix(overlaps)

gt_roidb_dict = {'boxes' : boxes,

'gt_classes': gt_classes,

'gt_overlaps' : overlaps,

'flipped' : False,

'seg_areas' : seg_areas}

gt_roidb.append(gt_roidb_dict)

hd.close()

return gt_roidb

3、修改image_path_at(self, i),确保他所拿到的每一张图片其标注框及类别都与保存在imdb.roidb列表的元素一一对应,这是最主要的!图片的索引index可拿到该图像路径,同时图像索引也能拿到正确的roidb数据,这样的话就能确保每一张图像一一对应到roidb!那么我是怎么做到的呢?其实看第二条代码就会发现,标签文本每一行既存放文件名也包含roidb信息,所以,处理方法是以行号(以0开始)分别生成图片索引及其roidb数据,这样就能确保它们是一一对应的,根据索引获取图片路径的代码如下:

self._linesinfo = list()

self._im_id = self._load_image_set_index()

self._image_index = self._im_id

def image_path_at(self, i):

"""Return the absolute path to image i in the image sequence."""

return self.image_path_from_index(self._image_index[i])

def image_path_from_index(self, index):

"""Construct an image path from the image's "index" identifier."""

im_path = self._linesinfo[index].split(" ")[0]

return im_path

def _load_image_set_index(self):

"""Load the indexes listed in this dataset's image set file."""

# Example path to image set file:

# self._devkit_path + /VOCdevkit2007/VOC2007/ImageSets/Main/val.txt

image_set_file = "/home/xsr-ai/Desktop/DetectDogs/enhance/train_lable_rpn.txt"

assert os.path.exists(image_set_file), \

'Path does not exist:{}'.format(image_set_file)

f = open(image_set_file, "r")

self._linesinfo = f.readlines()

index = len(self._linesinfo)

image_index = [x for x in range(index)]

f.close()

return image_index

至此,我们就可以将自己生成的txt文本标签对接到faster-rcnn模型里进行训练,而不必很麻烦的生成pascal voc格式了!当然,创建自己的imdb只是最关键的一步,我们还需要稍微修改一下faster-rcnn才能跑,我将会再整理一篇文档来说明!

faster rcnn接口_TF-Faster-rcnn宠物狗种类识别之对接自己的数据相关推荐

  1. 千月影视乐彩影视,H5对接苹果CMS 安卓APP搜索接口苹果cms(2开苹果cms对接版H5数据)

    这个是一张套2开的苹果cms 重点是接口,此版本可以对接千月影视H5数据,和搜索接口, 也可以用在乐彩影视的H5接口及搜索接口上, 对接文件都改好了,经测试无误分享出来 千月,乐彩H5数据接口及搜索接 ...

  2. faster rcnn接口_源码解析faster rcnn (mask rcnn)全过程

    1. 总领过程--官方faster cnnn 调用过程 import torchvision, torch # 导入官方faster rcnn 模型 model = torchvision.model ...

  3. 实例分割模型Mask R-CNN详解——从R-CNN,Fast R-CNN,Faster R-CNN再到Mask R-CNN

    转载自 jiongnima 原文链接 https://blog.csdn.net/jiongnima/article/details/79094159 Mask R-CNN是ICCV 2017的bes ...

  4. 实例分割模型Mask R-CNN详解:从R-CNN,Fast R-CNN,Faster R-CNN再到Mask R-CNN

    Mask R-CNN是ICCV 2017的best paper,彰显了机器学习计算机视觉领域在2017年的最新成果.在机器学习2017年的最新发展中,单任务的网络结构已经逐渐不再引人瞩目,取而代之的是 ...

  5. 后 R-CNN时代, Faster R-CNN、SSD、YOLO 各类变体统治下的目标检测综述:Faster R-CNN系列胜了吗?,(知乎ChenJoya大佬,讲的挺好的,记录一下)

    我们检测到你可能使用了 AdBlock 或 Adblock Plus,它的部分策略可能会影响到正常功能的使用(如关注). 你可以设定特殊规则或将知乎加入白名单,以便我们更好地提供服务. (为什么?) ...

  6. 宠物识别api接口全开放:狗脸识别、猫脸识别、鼻纹识别、品种识别、相似度比对、图片质量检测

    依据宠物识别的各类应用场景,悦保科技全面升级宠物AI识别的API接口服务,为用户提供更全面.更具针对性的接口选择,满足宠物身份建档.品种信息鉴别.个体身份比对等需求,推动宠物产业链的智能化升级. 宠物 ...

  7. MAT之GRNN/PNN:基于GRNN、PNN两神经网络实现并比较鸢尾花(iris数据集)种类识别正确率、各个模型运行时间对比

    MAT之GRNN/PNN:基于GRNN.PNN两神经网络实现并比较鸢尾花(iris数据集)种类识别正确率.各个模型运行时间对比 目录 输出结果 实现代码 输出结果 实现代码 load iris_dat ...

  8. 九十三、Python使用百度云接口API实现截图,文字识别和语音合成

    @Author:Runsen @Date:2020/7/13 人生最重要的不是所站的位置,而是内心所朝的方向.只要我在每篇博文中写得自己体会,修炼身心:在每天的不断重复学习中,耐住寂寞,练就真功,不畏 ...

  9. 电商后台、手机端、小程序、H5、电商原型、需求池、产品结构图、接口流程、高保真交互、PRD、布局说明、数据统计、店铺管理、商品管理、财务管理、售后、订单、会员、客服、标签、Axure原型、产品原型

    电商后台.手机端.小程序.H5.电商原型.需求池.产品结构图.接口流程.高保真交互.PRD.布局说明.数据统计.店铺管理.商品管理.财务管理.售后.订单.会员.客服.标签.Axure原型.产品原型.h ...

最新文章

  1. beast linux加密,PHP-Beast v2.2发布,PHP源码加密扩展
  2. Tungsten Fabric SDN — 与 Bare Metal 的集成架构
  3. VMware 虚拟化编程(15) — VMware 虚拟机的恢复方案设计
  4. ASP.NET 2.0 Web Part编程入门(实践篇)
  5. Lazy WriterCheckPoint
  6. mysql每一步花费时间_MySQL花费更多时间发送数据
  7. python hello world重复_从hello world开始学Python
  8. linux环境下中文乱码问题
  9. Visual Studio 2008 单元测试
  10. tcpdump的用法
  11. 奇妙的安全旅行之ECC算法
  12. 95-136-040-源码-Operator-Operator简介
  13. 学会放下自己,就能释然许多
  14. 《Adobe Illustrator CC 2014中文版经典教程(彩色版)》—第1课0.19节使用画笔
  15. Labview模拟温度检测报警系统
  16. 二叉树非递归程序c语言,二叉树非递归遍历C语言实现
  17. 南阳oj 215 Sum
  18. FAT文件系统规范v1.03学习笔记---1.保留区之启动扇区与BPB
  19. POJ1260 Pearls(多重捆绑成0-1背包)
  20. 19个免费的UI界面设计工具及资源

热门文章

  1. Quartz.net官方开发指南 第五课: SimpleTrigger
  2. 关于vue内只要html元素的代码
  3. Python技巧之“is”对比“==”
  4. 【React、Vue 、 Angular 共分天下,2018首将会是谁?】
  5. 怎样Selenium IDE选择combo box中值
  6. 背包系列 hdu3449 有依赖背包
  7. gradle构建android项目
  8. 众方网络电话VOIP FREEGO EIS系统命令
  9. asp实用类库--DataList
  10. web 点击劫持 X-Frame-Options