caffe图像可视化(二)——反卷积可视化

来源:互联网 发布:淘宝卖家退货流程 编辑:程序博客网 时间:2024/06/03 19:55

caffe在进行图像训练时,对特征或中间结果进行可视化,可以帮助更好的对训练过程和图像的理解。
caffe中的可视化,另一种是把网络中间的某层,做卷积的相反动作,用于把某层还原成原来的图像。卷积和反卷积时,使用的参数是共享的,都是卷积时学习到的参数。如下:

#加载网络和逆向网络net = caffe.Net('deploy.prototxt',                'model.caffemodel',                caffe.TEST)invnet = caffe.Net('invdeploy.prototxt',caffe.TEST)#加载图像进行处理生成中间结果net.blobs['data'].data[...] = transformer.preprocess('data', caffe.io.load_image('h2.jpg'))out = net.forward()#卷积/反卷积 参数共享for b in invnet.params:    invnet.params[b][0].data[...] = net.params[b][0].data.reshape(invnet.params[b][0].data.shape)invnet.blobs['pooled'].data[...] = featinvnet.blobs['switches5'].data[...] = net.blobs['switches5'].datainvnet.blobs['switches2'].data[...] = net.blobs['switches2'].datainvnet.blobs['switches1'].data[...] = net.blobs['switches1'].datainvnet.forward()#显示图像plt.clf()feat = norm(invnet.blobs['conv1'].data[0],255.0)gci=plt.imshow(transformer.deprocess('data', feat))plt.colorbar(gci);plt.show()
def vis_square(data, padsize=1, padval=0):    data -= data.min()    data /= data.max()    # force the number of filters to be square    n = int(np.ceil(np.sqrt(data.shape[0])))    padding = ((0, n ** 2 - data.shape[0]), (0, padsize), (0, padsize)) + ((0, 0),) * (data.ndim - 3)    data = np.pad(data, padding, mode='constant', constant_values=(padval, padval))    data = data.reshape((n, n) + data.shape[1:]).transpose((0, 2, 1, 3) + tuple(range(4, data.ndim + 1)))    data = data.reshape((n * data.shape[1], n * data.shape[3]) + data.shape[4:])    plt.imshow(data)    plt.axis('off')    plt.show()

最终结果
原图1
这里写图片描述
中间结果1
这里写图片描述
原图2
这里写图片描述
中间结果2
这里写图片描述

阅读全文
0 0
原创粉丝点击