文档章节

PixelNet

二胡艺
 二胡艺
发布于 2017/03/03 19:01
字数 362
阅读 16
收藏 0

(一)基于googlenet的model

%matplotlib inline
import numpy as np
import cv2
import caffe
import matplotlib.pyplot as plt

model='deploy.prototxt'
weight = 'bvlc_googlenet.caffemodel'
filename='../images/2007_002619.jpg'
caffe.set_mode_gpu()
net = caffe.Net(model,weight,caffe.TEST)
transformer = caffe.io.Transformer({'data':(10,3,224,224)})
transformer.set_transpose('data',(2,0,1))
#transformer.set_mean('data',np.load(meanfile).mean(1).mean(1))
transformer.set_raw_scale('data',255)
transformer.set_channel_swap('data',(2,1,0))

img = caffe.io.load_image(filename)
net.blobs['data'].data[...] = transformer.preprocess('data',img)
net.forward()
blob = net.blobs['prob'].data[0]
idx = blob.argmax()
plt.imshow(img)
print idx,blob[idx]

#for layer_key,layer_blob in net.blobs.iteritems():
#    print layer_key,layer_blob.data.shape
584 0.257885

输入图片说明

(二)可视化feature

def vis(data):
    _,C,H,W = data.shape
    d = data[0]
    n = int(np.sqrt(C))
    k = 1
    plt.figure(figsize=(64,64))
    for c in range(C):
        plt.subplot(n,n+1,k)
        k += 1
        img = d[c,:,:]
        plt.imshow(img,cmap='jet');plt.axis('off')
    plt.show()

def vis_k(data):
    print data.shape
    N,C,H,W = data.shape
    d = data[0]
    nc = 16
    k = 1
    if(N > 64):
        N = 10
    nr = int(N * C / nc)
    plt.figure(figsize=(64,64))
    for n in range(N):
        for c in range(C):
            img = data[n,c,:,:]
            plt.subplot(nr+1,nc,k)
            k += 1
            plt.imshow(img,cmap='jet');plt.axis('off')
    plt.show()
    
data = net.blobs['conv1/7x7_s2'].data
vis(data)
kernel = net.params['conv2/3x3'][0].data
#print kernel.shape
#vis_k(kernel)

输入图片说明

(三)提取feature map 的hyperColumn,然后用kmean进行聚类

from sklearn.cluster import KMeans

def upsample(data,size=(224,224)):    
    C,H,W = data.shape
    data_ = np.zeros((C,size[0],size[1]))
    for c in range(C):
        im = data[c,:,:]
        im = cv2.resize(im,size)
        data_[c,:,:] = im
    return data_
def hyperColumn(data):
    C,H,W = data.shape
    data_ = np.zeros((H * W,C))
    for h in range(H):
        for w in range(W):
            d = data[:,h,w]
            data_[h*W+w,:]=d
    return data_

conv1 = net.blobs['conv1/7x7_s2'].data[0]
conv2 = net.blobs['conv2/3x3'].data[0]
conv3 = net.blobs['inception_3a/1x1'].data[0]
conv1_ = upsample(conv1,size=(224,224))
conv2_ = upsample(conv2,size=(224,224))
conv3_ = upsample(conv3,size=(224,224))
data = np.concatenate((conv1_,conv2_,conv3_),axis=0)
trainData = hyperColumn(data)
clf = KMeans(n_clusters=5,max_iter=5000,n_init=5,n_jobs=-1)
clf.fit(trainData)
label = clf.labels_
result = label.reshape(224,224)
plt.imshow(result)

输入图片说明

© 著作权归作者所有

共有 人打赏支持
二胡艺
粉丝 3
博文 42
码字总数 12555
作品 0
镇江
程序员

暂无文章

如何通过 J2Cache 实现分布式 session 存储

做 Java Web 开发的人多数都会需要使用到 session (会话),我们使用 session 来保存一些需要在两个不同的请求之间共享数据。一般 Java 的 Web 容器像 Tomcat、Resin、Jetty 等等,它们会在...

红薯
今天
3
0
C++ std::thread

C++11提供了std::thread类来表示一个多线程对象。 1,首先介绍一下std::this_thread命名空间: (1)std::this_thread::get_id():返回当前线程id (2)std::this_thread::yield():用户接口...

yepanl
今天
3
0
Nignx缓存文件与动态文件自动均衡的配置

下面这段nginx的配置脚本的作用是,自动判断是否存在缓存文件,如果有优先输出缓存文件,不经过php,如果没有,则回到php去处理,同时生成缓存文件。 PHP框架是ThinkPHP,最后一个rewrite有关...

swingcoder
今天
2
0
20180920 usermod命令与用户密码管理

命令 usermod usermod 命令的选项和 useradd 差不多。 一个用户可以属于多个组,但是gid只有一个;除了gid,其他的组(groups)叫做扩展组。 usermod -u 1010 username # 更改用户idusermod ...

野雪球
今天
3
0
Java网络编程基础

1. 简单了解网络通信协议TCP/IP网络模型相关名词 应用层(HTTP,FTP,DNS等) 传输层(TCP,UDP) 网络层(IP,ICMP等) 链路层(驱动程序,接口等) 链路层:用于定义物理传输通道,通常是对...

江左煤郎
今天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部