【转载】VOC_layer.py详解,即Python层作为输入

https://blog.csdn.net/Tramac/article/details/70158426


Python层作为输入的四个必须的函数:

setup(self, bottom, top)

reshape(self, bottom, top)

forward(self, bottom, top)

backward(self, bottom, top)

class VOCSegDataLayer(caffe.layer) #定义为Python层

该类的作用:获取所需要的image对,即input image、label image,作为FCN的输入。


①def setup(self, bottom, top)

setup()的参数:voc_dir:数据的根目录. split:train/val/test模式的选择. mean:图片的均值. randomize:初始化随机数生成,作用? seed:随机化seed,起点,作用?

以下为该5个参数的初始化:

params = eval(self.param_str) #将字符串当成有效的表达式来求值并返回计算结果

self.voc_dir = params['voc_dir']

self.split = params['split']

self.mean = np.array(params['mean']) #变成数组

self.random = params.get('randomize', True) #初始化self.random,默认为True

self.seed = params.get('seed', None)

if len(top)!= 2: #判断输出是否为2(data和label)

  报错

if len(bottom) != 0 #判断输入是否为0(数据层无bottom)

#load indices for images and labels(获取image和lable的索引)

split_f = '{}/ImageSets/Segmentation/{}.txt'.format(self.voc_dir, self.split) #.format() 用{}代替%,()中的内容按顺序放入前面的{}中,txt文件中存的是图片的索引

self.indices = open(split_f, 'r').read().splitline() #open()文件打开操作,'r'读模式, 'w'写模式,'a'追加, 'b'二进制, '+'读/写. read()用于从文件读取指定的字节数,若未给定或为负值则读取所有. splitline()按照行('\r','\r\n','\n')分隔,返回一个包含各行作为元素的列表,默认不包含换行符.

self.idx = 0

#如果不是train模式,则不需要参数self.random

if 'train' not in self.split: #not in 运算符,如果在指定的序列中没有找到值,返回True,否则返回False.

#如果是train模式,则需要初始化self.random.

if self.random:

  random.seed(self.seed) #seed()不能直接访问,需要导入random模块.()中的self.seed为改变随机数生成器的种子seed.无返回值. 作用:设置生成随机数用的起始值,调用任何其他random模块函数之前调用这个函数.

  self.idx = random.randint(0, len(self.indices)-1) #random.randint(a, b)用于生成一个指定范围内的整数,用来打乱'txt'中文件的顺序?


②def reshape(self, bottom, top): #获取image+label对

self.data = self.load_image(self.indices[self.idx]) #self.indices前面得到的文件名列表,self.idx索引值

self.label = self.load_label(self.indices[self.idx])

#load_image()和load_label()定义的两个数据接口函数

#reshape输出的形状

top[0].reshape(1, *self.data.shape) #image

top[1].reshape(1, *self.label.shape) #label


③def forward(self, bottom, top): #assign output分配输出

top[0].data[...] = self.data #将self.data,self.label赋值到top.data?

top[1].data[...] = self.label

#选择下一个输入

if self.randon:

  self.idx = random.randint(0, len(self.indices)-1)

else:

  self.idx +=1 #若不是train,idx没有随机,从0开始

  if self.idx == len(self.indices):

      self.idx = 0


④def backward(self, top, propagate_down, bottom)

pass #无反向过程

def load_image(self.idx): #调用时,输入的为indices[idx]

#获取输入的图像,预处理来适配caffe:转为float→改变通道(RGB→BGR)→减去均值→改为CxHxW

im = Image.open('{}/JPEGImage/{}.jpg'.format(self.voc_dir, idx)) #打开图片

in_ = np.array(im, dtype = np.float32 #创建数组并制定数组中元素的类型

in_ = in_[:,:,::-1] #RGB-BGR?

in_ -= self.mean #减去均值

in_ = in_.transpose((2,0,1)) #改变通道顺序

return in_


def load_label(self.idx) #获取label,label为1xHxW单通道,整数数组,单通道是由loss决定的

im = Image.open('{}/SegmentationClass/{}.png'.format(self.voc_dir, idx))

label = np.array(im, dtype = np.unit8)

label = label[np.newaxis,...]

return label

#[...]代表许多产生一个完整的索引元组必要的分号,label本来为2维图像,只有H,W,需要将其变为3维,即1xHxW.

---------------------

本文来自 Tramac 的CSDN 博客 ,全文地址请点击:https://blog.csdn.net/Tramac/article/details/70158426?utm_source=copy

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,293评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,604评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,958评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,729评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,719评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,630评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,000评论 3 397
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,665评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,909评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,646评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,726评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,400评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,986评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,959评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,197评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,996评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,481评论 2 342

推荐阅读更多精彩内容