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

文章说明

文章分段

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

 

前情提要

上个ep稍微去看了deployment.py後,大概知道他在处理各个clone拿到的model的tensor name,那代表,要真的了解model在干麻,还是得回归到train.py里作为model_fn的_build_deeplab()才行。

build model的过程伴随着资料的输入,第一件做的事情就是从iterator中取出一个batch的训练样本。

上次就讲到这些,让我们继续开始吧。

 

逛deeplab的github程序(cont.)

train.py (cont.)


ModelOptions是来自common.py的class,目的就是在制作要设定此次模型的参数。

  • outputs_to_num_classes就是此次分类的数量
  • crop_size是input tensor shape,之前iterator已经按照这个尺寸处理好资料了
  • atrous_rates就是deeplab的论文核心,空洞的部分,顺带一提,蛮多API的conv layer都已经有提供这个参数做使用。
  • output_stride是input的尺寸与output尺寸的比例,我记得应该是input/output

 


这个部分就要去看model.pymulti_scale_logits(),我一直蛮好奇这个「logits」指的究竟是什麽意思?我们通常搭建的模型会是前面有许多conv layer层去找特徵,然後後面接几个全连接层将其展开,然後最後用一层输出跟分类数量一样的神经层去输出最後的output。而这个logits,一般就是最後一层的「前一层」的输出。

也就是说,主要的模型架构应该就在这个method里面。

 


接下来是将模型的logits取出来,把他们存在一个dict里,并且给他tensor name。

 


接着最後就是将logits送去给add_softmax_cross_entropy_loss_for_each_scale()去计算最後的输出,并且跟label进行比较。

有没有做到更新参数这件事要等看了这个method才知道。

 


所以接着去utils资料夹看train_utils.py的程序吧。

 

train.utils.py


对不同scale的logits,都去计算softmax cross entropy的loss。

其实在这个method的第74行~140行,都在处理scale的问题,让logits与label有对应到,所以会有一些resize跟reshape的部分。

这里其实还有一个重点,data与label使用的resize method不一样,也不应该一样,data适合使用bilinear这类interpolation的,而label则是适合nearest neighbor这类的resize。
毕竟不会有人希望,label resize後,居然出现1.5这种label...

 


最终就是把label跟logits拿去计算loss,不过这里已经到tf.nn这个原始API了,身为上层API的使用户,我已经无法继续解释下去了,所以只能在这里打住。

 

噢然後在算完loss後,其实有个叫top_k的东西,可以用来帮忙提高更新loss的效率,就是top_k。

他的使用时机就是在算完loss後,把loss交给这个method,他就会去取loss最高的前k个,只把这些loss拿出来,然後去把这些地方做更新。

 


然後之後把loss加进tf.losses这个地方,没意外的话,我想这些loss,应该是可以被tf.GraphKeys.LOSSES找到的。

这样,应该都结束了吧。


<<:  其实,我还在这里,但不会一直在这里。

>>:  故事三十:说说Tableau这个故事吧!

Context Diagram 系统上下文图

系统上下文图 System Context Diagram (SCD) 是一种概念图的呈现,用於表达...

30天学会 Python-Day21: 万物皆数

电脑中的字元 电脑中的所有资料都是用0和1表示,为了表示不同的资料,电脑中存在许多不同的解读规则 电...

多重影分身之术,让你的分身去做事情

影分身之术 网站正式上线运行时,会开始有使用者访问浏览,流量就会开始出现变化,当网站推广新活动或周年...

Day 6. 列一下VR头盔

2021/12/15更新:Meta公司改名 我还在解Bug跟试其他的模拟器,今天就先来看看我能找到的...

引言与大纲

这系列文章,将会带过数个跨度极大的主题,故有需要先於开篇的引文来作展开。 首先,我们由RISC-V是...