二、教你怎麽看source code,找到核心程序码 ep.19:把tfrecord parse完了,接着做了哪些preprocess? 3

文章说明

文章分段

  1. 文章说明
  2. deeplab的简单介绍、於我的意义
  3. tensorflow的程序码特色
  4. 训练流程的细节
  5. 逛deeplab的github程序,顺序:train.py model.py datasets/data_generator.py …

前情提要

接续ep.18。

逛deeplab的github程序(cont.)

input_preprocess.py (cont.)

  • 107-109行取得目前有经过resize这道处理的图片的尺。tf.shape的axis 0是平常图片的高、axis 1则是图片的宽。
  • 111-112行则是分别把图片高宽加上图片与裁切尺寸的差值,作为data新的高与宽,也就是说如果裁切尺寸大於图片的话,图片周围就会被多加pixel;如果裁切尺寸小於图片的话,则图片的高宽先维持原样。

 

  • 116行是feature.extractor的mean_pixel()method:
    • core/feature_extractor.py

    • 回传的是根据各backbone预设的平均pixel值,list由左至右的是RGB三通道。
  • 115行的tf.reshape会把mean_pixel()回传的list,reshape成(1, 1, 3)的tensor放入mean_pixel变数中。

 

  • 接着117行就把data、offset与指定的高宽和平均pixel输入pad_to_bounding_box()中,tensorflow的image API中也有实作一个同名的method,但这两个有稍微不同之处:Deeplab这里实作的方法,可以输入任意要padding的值,不用一定是0;在图片尺寸不明的状况下亦可处理
  • 然後120-122行就是对label做同样的padding处理,让data与label一致。

 


再来是将已经经过resize、padding的影像,用random_crop()随机裁切,他的第一个参数是把data与label这两个高宽相同、但channel数不同的tensor用list包起来,这样分批可以加快速度处理。

所做的事情是随机在图片的任意位置上产生指定crop尺寸(预设是513,513)的bounding box,然後再根据bounding box做裁切。

 


做完一切处理後,所有的影像皆为指定的crop尺寸,就把影像的尺寸给设定好。label也是。

 


接着最後就是在训练时,以0.5的机率将data与label作为一组进行左右翻转。这个method也是自制的,而非使用tf.random_flip_left_right,这样可以调控翻转的比例并且确保data与label是接受相同的处理。

最後就将处理完成的data与label回传。


<<:  拯救资工系学生的基本素养—CI/CD 介绍

>>:  第二十七日-MYSQL的「如果」:IF、CASE基本用法

入门魔法 - 常用阵列方法(一) forEach、filter、 map

前情提要 艾草:「你过来帮我摆一下魔法阵!」 「哇喔,看起来好厉害唷!这里有三个空位是要摆什麽吗?」...

[Day 11] Reactive Programming - Reactor(Scheduler)

前言 Reactor 是concurrency-agnostic ,花了一点时间研究这个英文单字的意...

DAY 4 - 牛头怪

大家好~ 我是五岁~ 今天来画牛头怪~ 今天会尝试卡通风格~ 目标是一只跟人一样站立的牛头怪,武器是...

[Day11] Flutter - StatelessWidget & StatfulWidget 差别

前言 Hi, 我是鱼板伯爵今天要讲 StatelessWidget & StatfulWid...

DAY29-JAVA的for-each、Iterator和ListIterator

集合的特性 可以依照集合是否具有「自动排序性」、「重复性」、「次序性」及「使用关键值」,为资料选择适...