美文网首页
Caffe学习记录04-可视化输出

Caffe学习记录04-可视化输出

作者: DeamoV | 来源:发表于2017-06-10 12:51 被阅读91次

序言

​ 大概这部分的内容只是为了更好的展示吧,这部分也是自己的毕业设计的内容之一。整体选用的方法就是用IPython结合Caffe给的接口进行可视化输出。没有特别难懂的部分。唯一的难点在于它的很多教程版本老,有些函数不适用于新的版本。这里给出的方法是自己实际测试过的。

正文

​ 相信看这个的文章的人,可能和我一样是新手,而且希望直白一点,如果能直接用再加点说明就最好,我这里就用这种方式吧。

01、Ipython的安装

sudo apt-get install ipython        #大概傻子都会

02、运行

sudo ipython notebook               #一定要加sudo,要不然有可能你的硬件用不了

03、内容

​ 下面的代码有点长,所以说明就写在前面吧。下面的代码每一个分隔你就写在一个In[]里面。然后输出的时候是一个In[]一个In[]输出的。下面使用transformer部分是和老版本的可视化输出不一样的地方。至于路径的问题,自己看着改就好了,实际作为输出部分大概直接就能看懂。前期准备部分,大体都为处理图像的步骤。细节内容参考这里。老版本而已,但是讲的很细。里面的前期部分大部分是用他的,小部分不能用的部分是参考了其他博客,但是整体做的事情没有变化。

import numpy as np
import matplotlib.pyplot as plt
caffe_root = '/home/demo/caffe/'
import sys
sys.path.insert(0,caffe_root + 'python')
import caffe
plt.rcParams['figure.figsize'] = (10,10)
plt.rcParams["image.interpolation"]='nearest'
plt.rcParams['image.cmap']='gray'
caffe.set_mode_gpu()
net = caffe.Classifier(caffe_root + 'MyCaffe/MyWorks/Test/Caffedeploy.prototxt', caffe_root + 'Caffenet_train_iter_5000.caffemodel',caffe.TEST)
mean_file=caffe_root + 'python/caffe/imagenet/ilsvrc_2012_mean.npy'
transformer = caffe.io.Transformer({'data': net.blobs['data'].data.shape})
transformer.set_transpose('data', (2,0,1))
transformer.set_mean('data', np.load(mean_file).mean(1).mean(1))
transformer.set_raw_scale('data', 255) 
transformer.set_channel_swap('data', (2,1,0))
im=caffe.io.load_image(caffe_root+'data/FINALPaper/corel1000/image_0008.jpg')
net.blobs['data'].data[...] = transformer.preprocess('data',im)
out = net.forward()
[(k, v.data.shape) for k, v in net.blobs.items()]
[(k, v[0].data.shape) for k, v in net.params.items()]
def showimage(im):
    if im.ndim == 3:
        m = im[:,:,::-1]
    plt.imshow(im)
def showimage(im):
    if im.ndim == 3:
        m = im[:,:,::-1]
    plt.imshow(im)
image = net.blobs['data'].data[4].copy()
image -= image.min()
image /= image.max()
showimage(image.transpose(1, 2, 0))
#See the Pic
plt.show()
filters = net.params['conv1'][0].data
vis_square(filters.transpose(0,2,3,1))
plt.show()
feat = net.blobs['conv1'].data[4, :96]
vis_square(feat, padval=1)
plt.show()
filters = net.params['conv2'][0].data
vis_square(filters[:48].reshape(48**2, 5, 5))
plt.show()
feat = net.blobs['conv2'].data[4]
vis_square(feat, padval=0.5)
plt.show()
feat = net.blobs['conv3'].data[4]
vis_square(feat, padval=0.5)
plt.show()
feat = net.blobs['conv4'].data[4]
vis_square(feat, padval=0.5)
plt.show()
feat = net.blobs['conv5'].data[4]
vis_square(feat, padval=0.5)
plt.show()
feat = net.blobs['pool5'].data[4]
vis_square(feat, padval=0.5)
plt.show()
feat = net.blobs['fc6'].data[4]
plt.subplot(2, 1, 1)
plt.plot(feat.flat)
plt.subplot(2, 1, 2)
_ = plt.hist(feat.flat[feat.flat > 0], bins=100)
plt.show()
feat = net.blobs['fc7'].data[4]
plt.subplot(2, 1, 1)
plt.plot(feat.flat)
plt.subplot(2, 1, 2)
_ = plt.hist(feat.flat[feat.flat > 0], bins=100)
plt.show()
feat = net.blobs['fc8'].data[4]
plt.subplot(2, 1, 1)
plt.plot(feat.flat)
plt.subplot(2, 1, 2)
_ = plt.hist(feat.flat[feat.flat > 0], bins=100)
plt.show()
feat = net.blobs['prob'].data[4]
plt.subplot(2, 1, 1)
plt.plot(feat.flat)
plt.plot(feat.flat)
plt.show()

结束

​ 至此自己的大学生活就结束了,说实话,这次考研失败对自己的影响蛮大的。接下来还会再来一年,非常不愿意的和女票异地一阵子。大概这年完了以后这次毕业设计做的事情会忘的差不多,就留一个档案,这样子自己能更加快速的捡起来,也省去了查资料的浪费的时间。

​ 这篇文档写完大概就真正标志着自己的大学生活结束了吧,毕业论文也是优秀,也算是较为完满的结束。祝自己二战顺利!

创建时间:2017/6/10 毕业晚会第二天
最后真的用上了,复试的时候用这个档复习了不少忘掉的东西,不过也一异地就被前任分手了hhh

相关文章

网友评论

      本文标题:Caffe学习记录04-可视化输出

      本文链接:https://www.haomeiwen.com/subject/bowqqxtx.html