不懂的code整理学习

 


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);
原文地址:https://www.cnblogs.com/caffeaoto/p/8021683.html