bilibili摄像也可以加快播放,从0基础入门全套教程

澳门葡京备用网址 1

澳门葡京备用网址 2

下边是多个差十分少的例证,用Navigator来跳转页面,页面之间传递参数 (代码是ES6语法写的):

 import React from 'react';
    import {
        View,
        Navigator
    } from 'react-native';
    import FirstPageComponent from './FirstPageComponent';

    export default class SampleComponent extends React.Component {
        render() {
            let defaultName = 'FirstPageComponent';
            let defaultComponent = FirstPageComponent;
            return (
            <Navigator
              initialRoute={{ name: defaultName, component: defaultComponent }}
              configureScene={(route) => {
                return Navigator.SceneConfigs.VerticalDownSwipeJump;
              }}
              renderScene={(route, navigator) => {
                let Component = route.component;
                return <Component {...route.params} navigator={navigator} />
              }} />
            );
        }
    } 

此地来解释一下代码:

其三行:
七个开首首页的component名字,比方笔者写了一个component叫HomeComponent,那么这几个name就是那个组件的名字【HomeComponent】了。

第四行: 那么些组件的Class,用来讲话实例化成 <Component />标签

第七行: initialRoute={{ name: defaultName, component: defaultComponent
}} 那个内定了暗许的页面,也正是运营app之后会看见分界面包车型大巴第生龙活虎屏。
要求填写四个参数: name 跟
component。(注意这里填什么参数纯粹是自定义的,因为这些参数也是您自身发自身收,本人在renderScene方法中拍卖。我们这里示例用了五个参数,但实际真正使用的参数唯有component)

第八,九,十行: configureScene={() => {
澳门葡京备用网址,return Navigator.SceneConfigs.VerticalDownSwipeJump;
}}
那几个是页面之间跳转时候的卡通,具体有何样?可以看那个目录下,有源代码的:
node_modules/react-native/Libraries/CustomComponents/Navigator/NavigatorSceneConfigs.js

末段的几行: renderScene={(route, navigator) => {
let Component = route.component;
return <Component {…route.params} navigator={navigator} />
}} />
);

此处是各种人最疑忌的,大家先看见回调里的多少个参数:route,
navigator。通过打字与印刷大家发掘route里其实正是我们传递的name,component那八个货,navigator是贰个Navigator的指标,为何呢,因为它有push
pop jump…等形式,这是我们等下用来跳转页面用的相当navigator对象。

return <Component {...route.params} navigator={navigator} />

那边有几个料定,也正是如果传递步入的component存在,这大家正是回去二个这么些component,结合前面initialRoute
的参数,大家正是明亮,那是一个会被render出来给客商观察的component,然后navigator作为props传递给了这么些component。

所以下一步,在此个FirstPageComponent里面,大家得以向来获得这个props.navigator:

import React from 'react';
import {
    View,
    Navigator
} from 'react-native';

import SecondPageComponent from './SecondPageComponent';

export default class FirstPageComponent extends React.Component {
    constructor(props) {
        super(props);
        this.state = {};
    }
    _pressButton() {
        const { navigator } = this.props;
        //为什么这里可以取得 props.navigator?请看上文:
        //<Component {...route.params} navigator={navigator} />
        //这里传递了navigator作为props
        if(navigator) {
            navigator.push({
                name: 'SecondPageComponent',
                component: SecondPageComponent,
            })
        }
    }
    render() {
        return (
            <View>
                <TouchableOpacity onPress={this._pressButton.bind(this)}>
                    <Text>点我跳转</Text>
                </TouchableOpacity>
            </View>
        );
    }
}

本条里面创制了二个方可点击的区域,让我们点击能够跳到SecondPageComponent这一个页面,达成页面包车型客车跳转。
不久前来创设SecondPageComponent,并且让它能够再跳回FirstPageComponent:

import React from ‘react’;

 constructor(props) {
        super(props);
        this.state = {};
    }

    _pressButton() {
        const { navigator } = this.props;
        if(navigator) {
            //很熟悉吧,入栈出栈~ 把当前的页面pop掉,这里就返回到了上一个页面:FirstPageComponent了
            navigator.pop();
        }
    }

    render() {
    return (
            <View>
                <TouchableOpacity onPress={this._pressButton.bind(this)}>
                    <Text>点我跳回去</Text>
                </TouchableOpacity>
            </View>
    );
    }
}

居功至伟告成,能进能出了。

至于官方文书档案里有个东西,这里说一下:

getCurrentRoutes() - 获取当前栈里的路由,也就是push进来,没有pop掉的那些
jumpBack() - 跳回之前的路由,当然前提是保留现在的,还可以再跳回来,会给你保留原样。
jumpForward() - 上一个方法不是调到之前的路由了么,用这个跳回来就好了
jumpTo(route) - Transition to an existing scene without unmounting
push(route) - Navigate forward to a new scene, squashing any scenes that you could jumpForward to
pop() - Transition back and unmount the current scene
replace(route) - Replace the current scene with a new route
replaceAtIndex(route, index) - Replace a scene as specified by an index
replacePrevious(route) - Replace the previous scene
immediatelyResetRouteStack(routeStack) - Reset every scene with an array of routes
popToRoute(route) - Pop to a particular scene, as specified by its route. All scenes after it will be unmounted
popToTop() - Pop to the first scene in the stack, unmounting every other scene

这个都是navigator能够用的public
method,就是跳转用的,里面有些带参数的XXX(route),新手第三次看那几个文书档案会疑心,这些route参数是甚啊,那些route正是:

renderScene={(route, navigator) => 

此处的route,最基本的route便是:

var route = {
    component: LoginComponent
}

这种格式。这么些地方某个模糊的,在这里间先说精晓了。

下一场下边要研讨,怎么传递参数过去,可能从对方获得参数。
传送参数,通过push就足以了。
诸如在七个 press的风浪里:

//FirstPageComponent.js
import React from 'react';
import {
    View,
    Navigator
} from 'react-native';

import SecondPageComponent from './SecondPageComponent';

export default class FirstPageComponent extends React.Component {

    constructor(props) {
        super(props);
        this.state = {
            id: 2
        };
    }


    _pressButton() {
        const { navigator } = this.props;
        if(navigator) {
            navigator.push({
                name: 'SecondPageComponent',
                component: SecondPageComponent,
                //这里多出了一个 params 其实来自于<Navigator 里的一个方法的参数...
                params: {
                    id: this.state.id
                }
            });
        }
    }

    render() {
        return (
            <View>
                <TouchableOpacity onPress={this._pressButton.bind(this)}>
                    <Text>点我跳转并传递id</Text>
                </TouchableOpacity>
            </View>
        );
    }
}

params的来历:

// index.ios.js
<Navigator
  initialRoute={{ name: defaultName, component: defaultComponent }}
  configureScene={() => {
    return Navigator.SceneConfigs.VerticalDownSwipeJump;
  }}
  renderScene={(route, navigator) => {
    let Component = route.component;
    if(route.component) {
        //这里有个 { ...route.params }
        return <Component {...route.params} navigator={navigator} />
    }
  }} />
这个语法是把 routes.params 里的每个key 作为props的一个属性:

navigator.push({
    name: 'SecondPageComponent',
    component: SecondPageComponent,
    params: {
        id: this.state.id
    }
});

这里的 params.id
就改为了 <Navigator id={} 传递给了下二个页面。所以
SecondPageComponent就相应如此获得 id:

//SecondPageComponent.js
import React from 'react';
import {
   View,
   Navigator
} from 'react-native';

import FirstPageComponent from './FirstPageComponent';

export default class SecondPageComponent extends React.Component {

   constructor(props) {
       super(props);
       this.state = {
           id: null
       }
   }

   componentDidMount() {
       //这里获取从FirstPageComponent传递过来的参数: id
       this.setState({
           id: this.props.id
       });
   }

   _pressButton() {
       const { navigator } = this.props;
       if(navigator) {
           navigator.pop();
       }
   }

   render() {
       return (
           <View>
               <Text>获得的参数: id={ this.state.id }</Text>
               <TouchableOpacity onPress={this._pressButton.bind(this)}>
                   <Text>点我跳回去</Text>
               </TouchableOpacity>
           </View>
       );
   }
}

那般在页面间传递的参数,就能够赢得了。

@sunnylqm 很六个人不知晓这里的params,笔者不由自己作主微微补充一下。

澳门葡京备用网址 3

0_1453170797112_QQ图片20160119102616.png

接下来就是回到的时候,也急需传递参数回上一个页面:
唯独navigator.pop()并不曾提供参数,因为pop()只是从
[bilibili摄像也可以加快播放,从0基础入门全套教程。路由1,路由2,路由3。。。]里把最后一个路由踢出去的操作,并不支持传递参数给尾数第二个路由,这里要用到贰个概念,把上三个页面包车型地铁实例也许回调方法,作为参数字传送递到当前页面来,在当下页面操作上多少个页面包车型客车state:

那是三个询问客户新闻的例子,FirstPageComponent传递id到SecondPageComponent,然后SecondPageComponent重返user音信给FirstPageComponent

//FirstPageComponent.js
import React from 'react';
import {
    View,
    Navigator
} from 'react-native';

import SecondPageComponent from './SecondPageComponent';

export default class FirstPageComponent extends React.Component {

    constructor(props) {
        super(props);

        this.state = {
            id: 2,
        user: null,
        }
    }


    _pressButton() {
        let _this = this;
        const { navigator } = this.props;
        if(navigator) {
            navigator.push({
                name: 'SecondPageComponent',
                component: SecondPageComponent,
                params: {
                    id: this.state.id,
                    //从SecondPageComponent获取user
                    getUser: function(user) {
                        _this.setState({
                            user: user
                        })
                    }
                }
            });
        }
    }

    render() {
        if( this.state.user ) {
            return(
                <View>
                    <Text>用户信息: { JSON.stringify(this.state.user) }</Text>
                </View>
            );
        }else {
            return(
                <View>
                    <TouchableOpacity onPress={this._pressButton.bind(this)}>
                        <Text>查询ID为{ this.state.id }的用户信息</Text>
                    </TouchableOpacity>
                </View>
            );
        }

    }
}

然后再操作SecondPageComponent:
//SecondPageComponent.jsconst USER_MODELS = { 1: { name: 'mot', age: 23 }, 2: { name: '晴明大大', age: 25 }};import React from 'react';import { View, Navigator} from 'react-native';import FirstPageComponent from './FirstPageComponent';export default class SecondPageComponent extends React.Component { constructor(props) { super(props); this.state = { id: null } } componentDidMount() { //这里获取从FirstPageComponent传递过来的参数: id this.setState({ id: this.props.id }); } _pressButton() { const { navigator } = this.props; if(this.props.getUser) { let user = USER_MODELS[this.props.id]; this.props.getUser(user); } if(navigator) { navigator.pop(); } } render() { return( <View> <Text>获得的参数: id={ this.state.id }</Text> <TouchableOpacity onPress={this._pressButton.bind(this)}> <Text>点我跳回去</Text> </TouchableOpacity> </View> ); }}

看下效果如何吧。
放个类似的例子代码: [https://github.com/mozillo/navigation](https://github.com/mozillo/navigation)安装方法: npm install && react-native run-android

00-classification
重要讲的是哪些使用caffenet(与亚历克斯-net稍微差别的模子)对一张图片进行分类(基于imagenet的1000个体系)

澳门葡京备用网址 4

hello 我们好本人是BreakNg

先说说教程到底在哪(反正自身是找了半天也没察觉。。。)
实则并从未官方教程一说,只是在caffe/example/下有
00-classification.ipynb;
01-learning-lenet.ipynb;
02-fine-tuning.ipynb;
等等一些列 ipython
notebook文件,里面就是一些example,那正是所说的官方教程,张开ipynb文件有各个方法,笔者是直接在github上开辟的(附链接:)

进去获取!!!!进来获取!!!!

明日分享bilibili录制也足以完成加速播放效果,首先要求三样东西
第生龙活虎正是chrome浏览器

那个example其实是比较全的,举例00-classification不止告诉怎么用演练好的.caffemodel+
deploy.prototxt对一张新来的图形举行分拣,何况还讲到怎么着运用python对filters可视化,对feature
maps
可视化;怎样对各层activations进行绘图直方图;以致怎样绘制prob层的输出直方图;

澳门葡京备用网址 5

第二正是哔哩哔哩帮手

那功用未必是大家想要的,所以我们可以自动采纳,最终作者会附上自个儿的代码

澳门葡京备用网址 6

澳门葡京备用网址 7

函数总计

先总结一些最关注的接口函数,即大概用到的python接口函数,也是大家最关心的python里用什么样函数对blob,params进行”读“,”写“

  1. 加载model的函数,net = caffe.Net(model_def, model_weights,
    caffe.TEST)
    ,model_def是deploy.prototxt的路径,model_weights是***.caffemodel的不二诀窍,caffe.TEST是验证互连网是用来test的,不会进行dropout
  2. 推行测量试验out = net.forward() ,
  3. 赢得 batchsize中首先张图像的输出 put_prob = output[‘prob’][0]
  4. 最大值所在的标号 output_prob.argmax()
  5. 获取 网络weights 参数net.params[‘conv1’][0].data
  6. 获取网络blob里的数量net.blobs[‘conv1’].data[0, :9]
  7. top 5的获取 top_inds = output_prob.argsort()[::-1][:5]

早先在此以前说一下,第一步至第四步都以安分守纪官方教程上来的,并不是很完整的三个code,完整的code在最后边给出,不过和法定教程不平等,不过精气神儿上是同生机勃勃的。所以说一投注意事项,即须要的公文以致路线的注意事项

其三就是Video Speed Controller

须求的文书:

1.
互连网模型文件在 caffe/models/bvlc_reference_caffenet下 的 bvlc_reference_caffenet.caffemodel
2.
互联网描述文件在caffe/models/bvlc_reference_caffenet下 的deploy.prototxt
3.测验图片 cat.png 在caffe/examples/images下
4. 品种称号文件 synset_words.txt 自行下载
5.均值文件 ilsvrc_2012_mean.npy 自行下载
(百度云盘打包5个公文:链接: 密码:
rjbb)

澳门葡京备用网址 8

第一步、Setup

率先步鲜明是要安装好 python,安装好numpy,matplotlib
包。配置好python-caffe的接口(怎么铺排请参照他事他说加以调查别 的地道blog)。
在import caffe
以前必须要把门路增添进去,要不然会找不到caffe这几个模块;这里提供三种艺术,意气风发种是文书档案里的

import sys
caffe_root = '../'  # this file should be run from {caffe_root}/examples (otherwise change this line)
sys.path.insert(0, caffe_root + 'python')

黄金年代种是自己用的(参见尾巴部分代码)
首先步的全体代码

import numpy as np
import matplotlib.pyplot as plt  
# set display defaults
plt.rcParams['figure.figsize'] = (10, 10)        # large images
plt.rcParams['image.interpolation'] = 'nearest'  # don't interpolate: show square pixels
plt.rcParams['image.cmap'] = 'gray'  # use grayscale output rather than a (potentially misleading) color heatmap

现行反革命我们看一下怎么获取增加程序,点这里有更加多工具扩展程序拉到最下边点击的收获越多的扩充程序弄只要在那间追寻就行了,他缘何能兑现加速呢,因为此地这一个帮手,它能帮大家替换到HTML5播放器,然后这里Video
Speed Controller,

第二步、Load net and set up input preprocessing

其次步,加载网络以至对图纸打开预管理
加载网络须求有 deploy.prototxt和
***.caffemodel文件,而加载网络是经过路线名,所以先安装好那四个文件的路线名

model_def = caffe_root + 'models/bvlc_reference_caffenet/deploy.prototxt'
model_weights = caffe_root + 'models/bvlc_reference_caffenet/bvlc_reference_caffenet.caffemodel'

然后就可以加载网络

net = caffe.Net(model_def, model_weights,caffe.TEST) 

接下来设置cpu or gpu,可自行选择在那之中三个

# 用cpu
caffe.set_mode_cpu()
# 用gpu
caffe.set_device(0)  
caffe.set_mode_gpu()

是因为输入到网络的图形是通过管理的,所以要把读取进来的图样管理成与网络操练时所见过的图片是同等的,这里的等同包罗shape,颜色通道顺序,取值范围([0,1] or
[0,255]?),以致是或不是减均值(channel-wise or pixel-wise ?) ,
那个都亟待豆蔻梢头致。
第风姿罗曼蒂克把互联网采纳的均值文件加载进来(那一个文件在caffe/imagenet/ilsvrc_2012_mean.npy),

mu = np.load(caffe_root + 'python/caffe/imagenet/ilsvrc_2012_mean.npy')
mu = mu.mean(1).mean(1)  # 这里即是计算出 channel-wise所用到的均值
print 'mean-subtracted values:', zip('BGR', mu) # print出来BGR三个channel的均值是多少

接下去设置(create)预管理操作

transformer = caffe.io.Transformer({'data': net.blobs['data'].data.shape}) 
transformer.set_transpose('data', (2,0,1))  [h,w,c] → [c,h,w]
transformer.set_mean('data', mu) # 减均值 channel-wise
transformer.set_raw_scale('data', 255)    [0,1] → [0,255]
transformer.set_channel_swap('data', (2,1,0))  RGB--> BGR

其三步,输入图像举办分类
有了互联网net,有个对输入图像的预管理操作的装置,接来下就能够把一张图像
put到net中,net给出分类结果
第意气风发读取图像,读取图像这里要求专一几点,接受不一样函数读取进来的图像数据,其款式也许不一致等,这里给出一些计算
**caffe.io.load_image读取,读取进来的是[0,1],RGB,(h,w,3)
cv.2 读取进来的是 [0,255], BGR, (h,w,3)
matlab 读取进来的是 [0,255],RGB,(h,w,3)**

image = caffe.io.load_image(caffe_root + 'examplest.jpg')
transformed_image = transformer.preprocess('data', image)
plt.imshow(image)

(ps: 要协和丰裕 plt.show() 技能显得如下那只可爱的喵咪~~)
澳门葡京备用网址 9

接下去把图像喂给net吧

net.blobs['data'].data[...] = transformed_image
output = net.forward()

output_prob = output['prob'][0]  # 把网络输出层(prob)第一个值取出来 (注意了!这里shape用的是[50,3,227,227],一次一个batch的,batchsize是50,而我们只喂给网络一张图像,所以要取出对应的prob,即 output['prob'][0])output['prob'][0]是一个 1000维的向量

print 'predicted class is:', output_prob.argmax() # 再把这1000维的向量最大值所在的标号取出来,即分类类别

只晓得分类项指标号,并不能够满意大家最后想清楚这张图纸到底是什么物体,所以需求五个索引,索引存在synset_words.txt中,那几个文件须求团结下载,(下载形式:caffe/data/ilsvrc12里有个sh文件,通过那几个文件就能够下载)

labels_file = caffe_root + 'data/ilsvrc12/synset_words.txt'    
labels = np.loadtxt(labels_file, str, delimiter='\t')
print 'output label:', labels[output_prob.argmax()]

这样就可以print出那张图疑似如何物体了,结果正确的话正是:
output label: n02123045 tabby, tabby cat

对于Imagenet,总所周知的是除了top1 还也可能有 top5,
那么怎么样猎取top5呢,大家来寻访:

top_inds = output_prob.argsort()[::-1][:5]  # reverse sort and take five largest items
print 'probabilities and labels:'
zip(output_prob[top_inds], labels[top_inds])

至此classification就一命归阴啦!

她若是是HTML5的视频,它就能够兑现加速的法力,以往我们给我们演示一下,大家刷新一下,第一次跻身一齐跻身,他就直接帮你给替换到,HTML5播放器点击助手这里就看到替换到HTML5播放器,大家来试下增长速度,你就能够见到左上角有一个1.00的暗记,移动上去有个减加,大家试下加速,首先就是两倍。

第四步,看看中间层都是什么

不可能让神经互联网太”黑“,只领会input,output,所以那边提供了部分函数能够对filters,feature
maps实行可视化,还能对输入的可能率值举行绘图直方图
本人这里依据效果与利益分1-7个步骤
1.收获各blob的名字以致shape

for layer_name, blob in net.blobs.iteritems():
    print layer_name + '\t' + str(blob.data.shape)

2.取得params的名字以致shape

for layer_name, param in net.params.iteritems():
    print layer_name + '\t' + str(param[0].data.shape), str(param[1].data.shape)
  1. 对卷积核举行可视化
    率先要定义个函数,要来show出卷积核的,正是把n个卷积核画到一张图片上

def vis_square(data):
    """Take an array of shape (n, height, width) or (n, height, width, 3)
       and visualize each (height, width) thing in a grid of size approx. sqrt(n) by sqrt(n)"""

    # normalize data for display
    data = (data - data.min()) / (data.max() - data.min())

    # 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, 1), (0, 1))                 # add some space between filters
               + ((0, 0),) * (data.ndim - 3))  # don't pad the last dimension (if there is one)
    data = np.pad(data, padding, mode='constant', constant_values=1)  # pad with ones (white)

    # tile the filters into an image
    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')

然后来拜望conv1 的卷积核长什么样

filters = net.params['conv1'][0].data
vis_square(filters.transpose(0, 2, 3, 1))

transpose的是因为,互连网数据流动的shape是[batch,channel,h,w]
而plot函数是绘制[h,w,channel]的,所以要transpose一下
 澳门葡京备用网址 10

4.看看 经过conv1卷积获得的feature maps
是怎么着,这里只看前叁拾几个(好plot吧,究竟36 = 6*6)

feat = net.blobs['conv1'].data[0, :36]
vis_square(feat)

澳门葡京备用网址 11
5.探视 pool5后获取的 feature maps 是哪些

feat = net.blobs['pool5'].data[0]
vis_square(feat)

澳门葡京备用网址 12
6.看了feature 和 filters还不舒坦,那来造访中间层的activation的分布景况吧

feat = net.blobs['fc6'].data[0]
plt.subplot(2, 1, 1)
plt.plot(feat.flat)
plt.subplot(2, 1, 2)
_ = plt.hist(feat.flat[feat.flat > 0], bins=100)

澳门葡京备用网址 13
率先个图能够见到fc6层(40九十几个神经元)种种神经元输出值是微微,全部遍及在(0,60)之间
其次个图可以见见40一百个输出值是何等的一个布满,能够发今后0-20里面占了多边

7.来拜候互联网的输出prob的分布

feat = net.blobs['prob'].data[0]
plt.figure(figsize=(15, 3))
plt.plot(feat.flat)

澳门葡京备用网址 14
能够见到2八十几个神经元的输出是最大的,可是也可以有写苦恼项,全体来讲那样的输出还是很乐意的(即未有太多别的类别的搅动)

上述是依照官方教程来写的,
自己要好的demo实际不是完全相通,然而思路是平等的,大家能够参谋:
在意! 路线必要转移,

# -*- coding: utf-8 -*-
'''
@author: TensorSense
'''
import sys
sys.path.append('/home/***/caffe/python')
sys.path.append('/home/***/caffe/python/caffe')
import caffe
import numpy as np
import argparse
import glob
import matplotlib.pyplot as plt
# import cv2


def obtain_img_path(dir_path, codec='png'):
    # dir_path is the directory of image
    # imgs_path is a list , element of imgs_path is single image path
    imgs_path = [img_path for img_path in glob.glob(dir_path + '*' + codec)]
    return imgs_path

if __name__ == '__main__':
    parser = argparse.ArgumentParser()

    parser.add_argument('--deploy_folder', default='./', help='path to the deploy FOLDER. [DEFAULT=...]')
    parser.add_argument('--deploy_file', default='deploy.prototxt', help='path to the deploy NAME. [DEFAULT=deploy.prototxt]')
    parser.add_argument('--model_state_folder', default='./', help='stored model FOLDER. [DEFAULT=../../Result/Section6/]')
    parser.add_argument('--caffemodel_file', default='bvlc_reference_caffenet.caffemodel', help='path to the .caffemodel NAME')
    args =  parser.parse_args()

    caffe.set_mode_gpu()
    caffe.set_device(0)

    DEPLOY_FULL_PATH = args.deploy_folder + args.deploy_file
    CAFFEMODEL_FULL_PATH = args.model_state_folder + args.caffemodel_file

    # load caffemodel     
    # requirements: deploy.prototxt and  ***.caffemodel
    net = caffe.Net(DEPLOY_FULL_PATH,CAFFEMODEL_FULL_PATH,caffe.TEST)

    # load test images_path
    img_dir = '../../../caffe/examplest.jpg'
    # imgs_dir = '../../Data/tt/'  # the last '/' can not be less' 
    # imgs_path = obtain_img_path(imgs_dir, codec='png')
    labels_filename = './synset_words.txt'  # 类别名称文件,将数字标签转换回类别名称

    # image preprocess

    # load ImageNet mean 
    mu = np.load('./ilsvrc_2012_mean.npy') 
    mu = mu.mean(1).mean(1)  # BGR ,channel-wise not pixel-wise
    print '111111111111111111111`~~~~~~~~~~~`mu :',type(mu)
    print 'mean-subtracted values:', zip('BGR', mu)

    # process image
    transformer = caffe.io.Transformer({'data': net.blobs['data'].data.shape})  # (10,3,227,227), input one image, it will copy 10 copies
    transformer.set_transpose('data', (2,0,1))  # (w,h,c)--> (c,w,h)
    transformer.set_mean('data', mu)            # channel-wise 
    transformer.set_raw_scale('data', 255)      # [0,1] --> [0,255]
    transformer.set_channel_swap('data', (2,1,0)) # RGB -->  BGR



    # load image

    img = img_dir
    im=caffe.io.load_image(img)  # im is  RGB  with  0~1 float
    # print 'raw im ~~~~ :' , im.shape
    net.blobs['data'].data[...]=transformer.preprocess('data',im) 
    # print 'processed im ~~~: ', net.blobs['data'].data

    # 执行测试
    out = net.forward()
    labels = np.loadtxt(labels_filename, str, delimiter='\t')   # 读取类别名称文件
    prob= net.blobs['prob'].data[0].flatten() # 取出最后一层(Softmax)属于某个类别的概率值,并打印
    # print prob
    order=prob.argsort()[-1]  #   [-2] is second largest 
    print 'the class is:',labels[order]   # find labels name 
    print 'the class is : ' + str(order)

    # sort top five predictions from softmax output
    top_inds = prob.argsort()[::-1][:5]

    # the shape of net.blobs  
    for layer_name, blob in net.blobs.iteritems():
        print layer_name + '\t' + str(blob.data.shape)


    # the shape of net.params
    for layer_name, param in net.params.iteritems():
         print layer_name + '\t' + str(param[0].data.shape) , str(param[1].data.shape)

    # vis function
    def vis_square(data):
        """输入一个形如:(n, height, width) or (n, height, width, 3)的数组,并对每一个形如(height,width)的特征进行可视化sqrt(n) by sqrt(n)"""


        data = (data - data.min()) / (data.max() - data.min())

        #  
        n = int(np.ceil(np.sqrt(data.shape[0])))
        padding = (((0, n ** 2 - data.shape[0]),
                   (0, 1), (0, 1))                 # 在相邻的滤波器之间加入空白 
                   + ((0, 0),) * (data.ndim - 3))  # 不扩展最后一维
        data = np.pad(data, padding, mode='constant', constant_values=1)  # 扩展一个像素(白色)

        # tile the filters into an image
        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()

    # show  filters 
    # filters = net.params['conv1'][0].data
    # vis_square(filters.transpose(0, 2, 3, 1)) batchsize,c,w,h --> bs,w,h,c

    # show fearture maps   it require input 
    # feat = net.blobs['conv1'].data[0, :9]
    # vis_square(feat)

    # show the distribution
    feat = net.blobs['prob'].data[0]
    plt.ylim(feat.min(),feat.max())  # 设置坐标轴的最大最小区间
    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()

大家看那个进程条也看到他快了吧。

今日大家是试下三倍的播报,弹幕也加速表达他的确落到实处了增长速度那么些效果,小编想看一下他最高能实现多少倍
作者也未尝试过最高达到多少倍,未来玩一下,最高十九倍。

看完那些录像哦,那那几个就到此处吧。

可望我们爱不忍释了,也会因大家关心自个儿的微信和和讯啊。

赏识的话就点个赞,丢个硬币,留言个言.恶感你也能够在留言上写下自家有如何必要纠正的地点,那那期就好像此。

多谢大家见到 作者是BreakNg上期后会有期。 乐福 And Peace

录制地址

bilibili:http://www.bilibili.com/video/av5213838/

youku
:http://i.youku.com/u/videos

腾讯
:http://v.qq.com/page/l/t/o/l0311o9l2to.html

youtube:https://www.youtube.com/watch?v=U51aDWxIwvw

享用洋气文化 分享你所爱

网站:www.breakng.com

微信:breakng0

微博:http://weibo.com/breakng

优酷:http://i.youku.com/BreakNg0

bilibili:http://space.bilibili.com/4045313/

youtube:https://www.youtube.com/channel/UCbrVjXePULREkR4PRtT0aMw

初藳地址:http://www.breakng.com/thread-55-1-1.html

澳门葡京备用网址 15

相关文章

发表评论

电子邮件地址不会被公开。 必填项已用*标注

*
*
Website