二、教你怎麽看source code,找到核心程序码 ep.22:Deeplab的model 部署

文章说明

文章分段

  1. 文章说明
  2. deeplab的简单介绍、於我的意义 ep.1
  3. tensorflow的程序码特色 ep.2
  4. 训练流程的细节 ep.3
  5. 逛deeplab的github程序

 

前情提要


上次说到模型是由一个副程序_build_deeplab去建立的,但由於Deeplab有支援multi GPU,所以在建立整个训练流程时,需要部署模型与资料,也就是说,我可能需要去看model_deploy这个东西是怎麽处理送来的_build_deeplab

 

好吧,不管怎麽样,我就先从model_deploy开始看吧。

 

逛deeplab的github程序(cont.)


model_deploy是从deployment这里import进来的,我从github的deeplab资料夹往上层移动,但没有看到有叫做deployment的资料夹,所以我又往deeplab的README.md去看,找到Installation的连结,也没有看到,只有看到slim,所以先去slim资料夹找。

 


幸运的是,部署的功能的确是在slim这个专案内。

 

赶紧来看deployment.py

deployment.py



一开始呼叫的是create_clones(),model_fn的参数放的是_build_deeplab()这个副程序的名字,然後args放的是model_args。

create_clones就是在处理每个GPU上需要的资源:组成模型的tensor。就一般认知而言,每个变数在同一个程序中,必须是不同的名称,才能正常运作,但是在Deep Learning开出来的模型中,随便就会产生出好几百万个变数,所以在命名时为了方便,可以加入scope,去简单的把变数分组。

 

具体作法就是:假设今天有个scope叫做「Tesla」,那麽在这个with这个scope底下所有新产生的tensor,他的tensor name都会自带Tesla/作为标示,像是如果在这个底下建立一个conv layer, 那麽这个conv layer的名称就会是Tesla/Conv_xx

然後因为slim的API预设会让convlution layer加上一个bias,所以其实他的名称会是Tesla/Conv_xx/BiasAdd的样子

那为了能在不同的clone上辨识同名同姓的tensor,所以在使用multi gpu时,会需要把模型中同样名称的tensor,再用scope加入一个可以标示他属於哪个clone的标示,就是像上图187行在做的事一样。

每一层关於scope的部分,都是在处理这个名称问题。

预备处理好到时候产生model时,各clone需要调整名称的问题,192行就呼叫了model_fn,然後...*你以为他是return 一个outputs吗?
*错了!才不是呢,因为_build_deeplab()这个method根本没有return值!!没有吧?


他其实是把model_fn(*args, **kwargs)整个放入outputs这个变数,然後再把它放到Clone里。

Clone是什麽?


这个要拉到上面看118行,他是一个有名称的tuple,有outputs:经过模型後的output、scope:会建立在哪个scope里、device:会在哪片GPU上跑。

然後把设定append进clones变数里,回传它。

 

讲到这边,看来似乎得去看_build_deeplab到底在做什麽,才会明白outputs这个栏位放的是什麽东西。

 

 


我暂时无法理解,他在写这个model_fn时,设定的这三个参数要怎麽从model_args取得,但没关系,反正我只要知道他会传过来就行。

总而言之,这个method会取得已经处理好的dataset做成的iterator,和训练集的分类数量,以及忽略计算的label是哪个。

 


还记得我们的sample格式有key name为common.IMAGEcommon.LABEL的栏位。

  • 231行将samples取出一个batch。
  • 234-235行将取出的资料,用tf.identity把他们转成同维同shape的tensor value。

後面的ModelOptions的呼叫方式不太懂,希望明天的我会懂。


<<:  【少女人妻的30天Elastic】Day 29 : App Search_API 介绍与应用_Curations

>>:  iOS Developer Learning Flutter. Lesson28 打包上架

【14】如果不做图片标准化(Normalization)会怎麽样

Colab连结 图片标准化 Image Normalization 不做可以吗?小实验实测差别 一般...

[Day 6] Button

Day 5 进到了网站中最常见需要做功能性的环节 Button <Button variant...

JavaScript入门 Day12_如何使用数字4

今天来讲讲 Math.pow( ),那这个是什麽呢,昨天讲的是Math.round( )四舍五入的语...

ISO 27001 资讯安全管理系统 【解析】(六)

五、了解利害关系者的需求和期望 组织必须确定与资讯安全管理系统相关的利害关系者及其要求,有关利害关系...

Day 27. SSR 常见问题(2)

遍历 HTML tag 这时候你会需要使用Vue Server Test Utils暴露的另一个方法...