序言
大概这部分的内容只是为了更好的展示吧,这部分也是自己的毕业设计的内容之一。整体选用的方法就是用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()
结束
至此自己的大学生活就结束了,说实话,这次考研失败对自己的影响蛮大的。接下来还会再来一年,非常不愿意的和女票异地一阵子。大概这年完了以后这次毕业设计做的事情会忘的差不多,就留一个档案,这样子自己能更加快速的捡起来,也省去了查资料的浪费的时间。
这篇文档写完大概就真正标志着自己的大学生活结束了吧,毕业论文也是优秀,也算是较为完满的结束。祝自己二战顺利!
网友评论