本blog为github上CharlesShang/TFFRCNN版源码解析系列代码笔记第1篇   VGGnet_test.py

----作者:Jiang Wu(吴疆),未经允许,禁止转载---

---为便于交流学习,本人深入理解代码的同时定期更新自己的理解,如有错误敬请指正---

(1)VGGnet_test.py

阅读时间: 2019/1/7

代码位置:E:\TFFRCNN\lib\networks

调用关系:

from .network import Network

代码作用:定义了测试(推断)网络和几个变量的占位符,测试阶段test.py中im_detect函数以feed_dict馈入data等图像信息,依此层层计算。(从network.py中根据内部代码看)各层计算时首先置空self.inputs输入列表,然后将本层的输入feed进来,将本层的输出保存在self.layers字典中供下一层取输入数据时使用。

主要函数及作用

(1)定义了VGGnet_test子类,继承自Network父类(network.py)

需要注意上述几个变量占位符预先定义的维度和变量各自代表什么(self.data等变量维度见下一篇分析
Self.layers字典和self.keep_prob与(test.py中)im_detect函数中sess.run()函数中馈入的feed_dict数据照应。
其中self.inputs[]为各层输入列表,在network.py中装饰器部分有对如何获取各层输入的代码。Self.layers存放各层输出字典,字典中键为层名,如‘conv1_1’,值为各层输出。

(2)以第一层conv1_1为例,描述计算过程

feed方法继承自Network类,最开始 self.layers = dict({'data': self.data, 'im_info': self.im_info})包含data数据。首先置空self.inputs列表,以本层输入data为例,从self.layers字典中取出data数据添加到self.inputs列表中构成本层输入。返回self,链接上代码下一行.conv(xxx),在network.py中找到conv()的定义,发现@layer装饰器,用于扩展conv的功能,因此卷积运算不在conv中进行,而是在装饰器(内嵌了conv()函数)中进行。

op即为传入各种操作名,比如conv、max_pool;发现这个装饰器上还有一个装饰器,具体作用不太清楚,没去细究如有了解的读者可以教教我)这里我们主要关注@layer这个装饰器的内部函数执行过程,首先取得name,形如conv1_1、conv1_2,本层输入长度为1,layer_input取得上述输入列表中的值,进行本层的运算,layer_output为本层返回值,将其存入self.layers字典,调用feed方法,置空输入列表,从self.layers中获取下一层输入列表 ,照此循环下去。

(3)测试(推断)网络结构

特征提取部分:13个conv,5个max pooling

RPN网络部分

其余网络处理部分,主要涉及维度转换和获取rois操作,关键是proposal_layer()层

第二阶段:类别判别+位置精修部分,输入为conv5_3和rois

注意: 需要预先了解python 装饰器(即定义各层运算时出现的@layer,为了扩充函数功能)、类的继承、类方法、链接调用(各层返回self,下一行直接.xx)、*args形参数量不固定的函数定义方式等python编程知识。

Tensorflow版Faster RCNN源码解析(TFFRCNN) (1) VGGnet_test.py的更多相关文章

  1. Tensorflow版Faster RCNN源码解析(TFFRCNN) (2)推断(测试)过程不使用RPN时代码运行流程

    本blog为github上CharlesShang/TFFRCNN版源码解析系列代码笔记第二篇   推断(测试)过程不使用RPN时代码运行流程 作者:Jiang Wu  原文见:https://hom ...

  2. Tensorflow版Faster RCNN源码解析(TFFRCNN) (3)推断(测试)过程使用RPN时代码运行流程

    本blog为github上CharlesShang/TFFRCNN版源码解析系列代码笔记第三篇   推断(测试)过程不使用RPN时代码运行流程 作者:Jiang Wu  原文见:https://hom ...

  3. faster rcnn 源码学习-------数据读入及RoIDataLayer相关模块解读

    参考博客:::https://www.cnblogs.com/Dzhen/p/6845852.html 非常全面的解读参考:::https://blog.csdn.net/DaVinciL/artic ...

  4. faster rcnn源码阅读笔记1

    自己保存的源码阅读笔记哈 faster rcnn 的主要识别过程(粗略) (开始填坑了): 一张3通道,1600*1600图像输入中,经过特征提取网络,得到100*100*512的feature ma ...

  5. faster rcnn源码阅读笔记3

  6. faster rcnn源码阅读笔记2

  7. [源码解析] TensorFlow 之 分布式变量

    [源码解析] TensorFlow 之 分布式变量 目录 [源码解析] TensorFlow 之 分布式变量 1. MirroredVariable 1.1 定义 1.2 相关类 1.2.1 类体系 ...

  8. [源码解析] TensorFlow 分布式之 MirroredStrategy

    [源码解析] TensorFlow 分布式之 MirroredStrategy 目录 [源码解析] TensorFlow 分布式之 MirroredStrategy 1. 设计&思路 1.1 ...

  9. [源码解析] TensorFlow 分布式之 MirroredStrategy 分发计算

    [源码解析] TensorFlow 分布式之 MirroredStrategy 分发计算 目录 [源码解析] TensorFlow 分布式之 MirroredStrategy 分发计算 0x1. 运行 ...

随机推荐

  1. Codeforces Round #397 题解

    Problem A. Neverending competitions 题目大意 一个团队有多个比赛,每次去比赛都会先订机票去比赛地点,然后再订机票返回.给出\(n\)个含有起止地点的购票记录(不按时 ...

  2. 推荐几个Laravel 后台管理系统

    小编推荐几个Laravel 后台管理系统 由百牛信息技术bainiu.ltd整理发布于博客园 一.不容错过的Laravel后台管理扩展包 —— Voyager 简介Voyager是一个你不容错过的La ...

  3. AI-Info-Micron-Insight:Micron 美光的技术帮助 CERN 解开宇宙奥秘

    ylbtech-AI-Info-Micron-Insight:Micron 美光的技术帮助 CERN 解开宇宙奥秘 1.返回顶部 1. Micron 美光的技术帮助 CERN 解开宇宙奥秘 大约 14 ...

  4. 【旧文章搬运】VC插件中如何获取当前工程的工作目录

    原文发表于百度空间,2014-09-24========================================================================== 好难找的资 ...

  5. 第一章 Git 一览

    虽然这个系列的文章主要关注的是Github,然而首先了解下Git的基本概念和名词也是非常有帮助的. 工作目录(Working Directory) 工作目录是你个人计算机上的一个目录.在该目录下,每一 ...

  6. 搭建Node+NPM+Grunt+Ruby开发环境

    序 最近尝试了一下CoffeeScript,和Sass,不得不说这两个搭配起来的确是不错的选择,熟悉以后基本上开发就比较快速了. 当然要开发这个首先需要搭建环境,这里就需要有Node.NPM.Grun ...

  7. Python中的数据结构和算法

    一.算法 1.算法的时间复杂度 大 O 记法,是描述算法复杂度的符号O(1) 常数复杂度,最快速的算法. 取数组第 1000000 个元素 字典和集合的存取都是 O(1) 数组的存取是 O(1) O( ...

  8. CI框架中,扩展验证码类。

    使用CI框架的朋友,应该都知道CI框架的的验证码辅助函数,不太好用.它需要写入到数据库中,然后再进行比对. 大家在实际项目中,好像不会这样去使用,因为会对数据库造成一定的压力. 所以,我们还是利用se ...

  9. 反射(type和assembly)

    这里简要介绍type和assembly 自定义特性 为了理解编写自定义特性的方式,应了解一下在编译器遇到代码中某个应用自定义特性的元素时,该如何处理. [AttributeUsage(Attribut ...

  10. C++11之lambda表达式应用

    应用 foreach语句中 #include <time.h> #include <algorithm> using namespace std; void func(int ...