channel_mean = np.zeros((3,227,227)) for channel_index, mean_val in enumerate(image_mean): channel_mean[channel_index, ...] = mean_val
我一直不是很理解这个array[ i , ... ]后面的 ‘ ... ’ 是什么意思,单独执行这段代码,发现是把每个channel里227*227的空间用mean_val填充了。
pycaffe: io.py
主要定义一个transformer、preprocess和deprocess操作,完成caffe和python之间数据格式的转换。
ps. caffe:BGR,0-255,CxHxW python:RGB,0-1,HxWxC
caffe.io.Transformer数据预处理部分
shape = (self.N, self.channels, self.height, self.width) # caffe.io.Transformer 是用于预处理的类。事先填写进行预处理的要求。 self.transformer = caffe.io.Transformer({'data_in': shape}) self.transformer.set_raw_scale('data_in', 255) #(0~255像素之间)
image_mean = [103.939, 116.779, 128.68] channel_mean = np.zeros((3,227,227)) for channel_index, mean_val in enumerate(image_mean): channel_mean[channel_index, ...] = mean_val
self.transformer.set_mean('data_in', channel_mean) #前提是data_in[1]对应的是channel通道,完成RGB->BGR(caffe输入的数据格式) self.transformer.set_channel_swap('data_in', (2, 1, 0)) self.transformer.set_transpose('data_in', (2, 0, 1))
之后才是caffe.io.load_image('')读取图像,并按照之前的设置进行转换:
img=caffe.io.load_image('图片路径') #读取图像 HxWxC newImg=transformer.preprocess('data_in',img) #设置data层的数据,这里以单张图像为例。将读取的图像传入,获得按之前设置的预处理方式处理好的新图像(通道x高x宽)。
Python中,只要定义类型的时候,实现__call__函数,这个类型就成为可调用的。换句话说,我们可以把这个类型的对象当作函数来使用
class g_dpm(object): def __init__(self, g): self.g = g def __call__(self, t): return (self.g*t**2)/2 x=g_dpm(9.8) weight=x(3)
这里定义了一个类,然后创建对象x,并对其初始化(x.g=9.8)。
之后,对x传入参数(x(3)),返回的是9.8x3^2/2
关于线程thread
import threading import time def T1(): print('T1 start ') for i in range(10): time.sleep(0.1) print('T1 finish ') def main(): T1_thread = threading.Thread(target=T1,name='T1') T1_thread.start() #线程开始执行 T1_thread.join() #等待线程结束在执行下一条语句 print('ALL DONE ') if __name__ == '__main__': main()
Numpy 切片(slicing)和python的省略(ellipsis)
Numpy 切片(slicing)和python的省略(ellipsis)
a[...] #这个选择所有的元素,与a一样 a[1,...] # 等同于a[1]一样 a[...,1] #array([[ 1, 5, 9], # [13, 17, 21]]) # 前面的元素不变,选择最后一维的第2个元素,组成新的数组 a[1,...,1] # array([13, 17, 21]) #因为就三维所以没有效果,如果维度再多一些就好理解了 b=np.arange(120).reshape(2,3,4,5) b[1,...,1] #array([[ 61, 66, 71, 76], # [ 81, 86, 91, 96], # [101, 106, 111, 116]]) #这样就很好理解了
Python 参数变量
以这个名为 argv_show.py 的程序为例:
#!/usr/bin/python # Filename: using_sys.py import sys print 'The command line arguments are:' for i in sys.argv: print i print ' The PYTHONPATH is', sys.path, ' '
sys是Python的一个标准库,也就是官方出的“模块”,是’System‘的缩写,封装了一些系统的信息和接口。
其他sys.argv 就保存的命令行里的参数 。eg. python argv_show.py hello world
那么就得到 sys.argv = argv = ["argv_show.py", "hello", "world"] ,即argv[0]中默认存的是文件名,参数变量默认以空格区分。当变量内部有空格时,可以在变量整体上+“ ”
MATLAB
1. distance between predicted and GT joints
dist = inf(length(pred(imgidx).annorect),length(annolist_gt(imgidx).annorect),nJoints);