Tensorflow版Faster RCNN源码解析(TFFRCNN) (1) VGGnet_test.py

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

作者:Jiang Wu  原文见:https://home.cnblogs.com/u/deeplearning1314/

原因:网上tensorflow版Faster RCNN代码解析较少(猜测是代码调用关系太复杂,没人愿意写),为便于交流学习,本人深入理解代码同时定期更新自己的理解,如有错误敬请指正。(吴疆   2018.7.4)

感谢:网上大神---龙哥和杨哥为我释疑解惑!

(1)VGGnet_test.py 

阅读时间: 2018/7/4

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

调用关系:

from .network import Network

 

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

主要函数及作用

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

需要注意上述几个变量占位符预先定义的维度信息(data等变量维度有待下一步理解,如有读者知晓,请帮帮我,我还没深入去看
Self.layers字典和self.keep_prob与im_detect函数中sess.run()函数中馈入的feed_dict数据照应。
其中self.inputs[]为各层输入列表,在network.py中装饰器部分有对各层输入如何获取的代码。Self.layers存放各层输出字典,字典中键为层名,如‘conv1_1’,值为各层输出。

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

 

      feed方法继承自Network类

    

首先置空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中取得下一层输入列表 ,照此循环下去。

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

猜你喜欢

转载自www.cnblogs.com/deeplearning1314/p/9265487.html
今日推荐