序言
? 大概這部分的內(nèi)容只是為了更好的展示吧厢漩,這部分也是自己的畢業(yè)設(shè)計的內(nèi)容之一。整體選用的方法就是用IPython結(jié)合Caffe給的接口進(jìn)行可視化輸出本股。沒有特別難懂的部分蝗罗。唯一的難點在于它的很多教程版本老夹纫,有些函數(shù)不適用于新的版本。這里給出的方法是自己實際測試過的崔挖。
正文
? 相信看這個的文章的人贸街,可能和我一樣是新手,而且希望直白一點狸相,如果能直接用再加點說明就最好薛匪,我這里就用這種方式吧。
01脓鹃、Ipython的安裝
sudo apt-get install ipython #大概傻子都會
02逸尖、運(yùn)行
sudo ipython notebook #一定要加sudo,要不然有可能你的硬件用不了
03瘸右、內(nèi)容
? 下面的代碼有點長娇跟,所以說明就寫在前面吧。下面的代碼每一個分隔你就寫在一個In[]里面太颤。然后輸出的時候是一個In[]一個In[]輸出的苞俘。下面使用transformer部分是和老版本的可視化輸出不一樣的地方。至于路徑的問題龄章,自己看著改就好了吃谣,實際作為輸出部分大概直接就能看懂乞封。前期準(zhǔn)備部分,大體都為處理圖像的步驟基协。細(xì)節(jié)內(nèi)容參考這里。老版本而已菇用,但是講的很細(xì)澜驮。里面的前期部分大部分是用他的,小部分不能用的部分是參考了其他博客惋鸥,但是整體做的事情沒有變化杂穷。
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()
結(jié)束
? 至此自己的大學(xué)生活就結(jié)束了,說實話卦绣,這次考研失敗對自己的影響蠻大的耐量。接下來還會再來一年,非常不愿意的和女票異地一陣子滤港。大概這年完了以后這次畢業(yè)設(shè)計做的事情會忘的差不多廊蜒,就留一個檔案,這樣子自己能更加快速的撿起來溅漾,也省去了查資料的浪費(fèi)的時間山叮。
? 這篇文檔寫完大概就真正標(biāo)志著自己的大學(xué)生活結(jié)束了吧,畢業(yè)論文也是優(yōu)秀添履,也算是較為完滿的結(jié)束屁倔。祝自己二戰(zhàn)順利!