好好学习,天天向上.

accounts-app

simple account app
react/一个功能简单的小账本,记录现金的流入流出/可以做假账(随时编辑历史记录)

GitHub源地址:https://github.com/0rainge/accounts-app

0. 项目总结

0-1. 展示

image

0-2. 功能点

  1. 展示记录(设置表格,展示每条记录)
  2. 创建记录(设置表单,输入记录:时间,事项,收支金额)
  3. 计算并展示总金额(设置数据展示卡片,计算收入、支出、总金额并展示)
  4. 更新/删除记录(在表单中实现数据的更新和删除)
Read More
post @ 2019-01-31

也可以看成一个ToDoList

a To-Do-List using jQuery, nodejs, Express, mongoDB

实现一个flag清单,添加或删除flag

前端使用模版引擎EJS,引用jQuery库,后端使用nodejs,采用express框架,数据储存在mongoDB上

GitHub源地址:https://github.com/0rainge/myToDoList

界面展示:

前端:
image

后端:
image

Read More
post @ 2019-01-29

灵感来源于贪吃蛇retroSnakeGame

GitHub源地址:https://github.com/0rainge/retroSnakeGame

0.界面展示

  • 游戏开始界面

    image
  • 游戏界面

    image
  • 游戏结束界面

    image
Read More
post @ 2019-01-24

参考淘宝首屏布局

做网页时的笔记整理,有些意识流。。

GitHub源地址:https://github.com/0rainge/taobaoHomePageDemo

1. demo展示

image

Read More

对fission进行测试分析组件日志:

进行测试如下:

  1. 创建语言环境镜像、给函数创建路由route trigger、上传函数、测试函数、请求函数、查看函数日志
  2. 编译多个文件组成的源码函数:对源码进行打包上传,根据压缩包创建函数、创建路由、通过fission进行解释或编译链接、查看bulid日志
  3. 编译artifacts(已打包函数),创建函数、创建路由、测试函数、查看全部函数
  4. 创建语言环境镜像、创建builder、查看环境
  5. 自动扩容(需要未安装工具hey)
  6. 创建trigger:包括http trigger,time trigger,message queue trigger
  7. 传源码包:通过fission创建由多个文件组成的函数压缩包,创建package,查看package信息,通过package创建函数
  8. 创建部署包:通过fission创建由一个文件组成的函数压缩包,创建package,查看package信息,通过package创建函数
  9. 测试函数对k8s中secret和ConfigMaps的访问(demo中的secret路径出现问题,还没找到对的路径)
  10. fission的workflow测试

组件分析如下:

builder:

  • 作用:编译链接上传的源码package
  • 日志包括:记录创建builder service、builder deployment、builder pod、build程序包(注意给build.dh加权限)、上传部署包、更新部署包、build失败报错信息

controller:

  • 作用:每次http请求函数的信息
  • 日志包括:服务器状态,端口,返回http请求的head信息,每次向fission请求时http信息(包括请求错误url的proxy error)如
    1
    2
    3
    4
    127.0.0.1 - - [07/Jun/2018:01:50:33 +0000] "GET /v2/packages/demo-src-pkg-zip-8lwt?namespace=default HTTP/1.1" 404 9
    以及(应该是)每次请求的函数地址和传入参数的地址如
    github.com/fission/fission/controller.(*API).respondWithError(0xc420082ae0, 0x7f5c883e4e60, 0xc4201a4960, 0x178ea60, 0xc420510b40)
    /Volumes/MacintoshHD/Dropbox/Dropbox/goWorkspace/src/github.com/fission/fission/controller/api.go:98 +0x29

executor:

  • 作用:创建函数
  • 日志包括:检查是缓冲中跑起来的函数,没有找到的话创建一个,为函数分配环境,设置一个数据结构记录函数信息(如函数名,GenerateName:命名空间;SelfLink,Generation;创建时间戳,删除时间戳,存活时间(DeletionGracePeriodSeconds),标签,实例化url),从pool中得到这个函数,选择pod,通过pod ip实例化pod,从pool中找到可以实例化的pod,对函数和pod进行映射,对pod加上标签,选择pod,调用fetcher 拷贝函数到指定url上,实例化pod,用环境镜像实例化pod,为pod加上ip,创建对应语言的pool,拉取fetcher镜像等。

kubewatcher:

没有查到日志

router:

  • 作用:对http请求进行转发
  • 日志包括:
    1
    2
    3
    4
    5
    6
    7
    2018/06/07 05:47:12 Calling getServiceForFunction for function: hello
    2018/06/07 05:47:30 Tapped 1 services in batch
    2018/06/07 05:47:30 Tapped 1 services in batch
    2018/06/07 05:48:00 Tapped 1 services in batch
    2018/06/07 05:48:00 Tapped 1 services in batch
    2018/06/07 05:48:15 Tapped 1 services in batch
    2018/06/07 05:48:15 Tapped 1 services in batch

storagesvc:

  • 作用:储存服务
  • 日志包括:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    time="2018-06-06T07:24:53Z" level=info msg="Storage service started"
    time="2018-06-06T07:24:53Z" level=info msg="listening to archiveChannel to prune archives"
    time="2018-06-06T08:24:53Z" level=info msg="getting orphan archives"
    time="2018-06-06T09:24:53Z" level=info msg="getting orphan archives"
    time="2018-06-06T09:32:41Z" level=info msg="Handling upload for /packages/demo-src-pkg-zip-fbza-o3s5sk-icbzii.zip"
    172.16.76.86 - - [06/Jun/2018:09:32:41 +0000] "POST /v1/archive HTTP/1.1" 200 72
    172.16.76.115 - - [06/Jun/2018:09:40:01 +0000] "GET /v1/archive?id=%2Ffission%2Ffission-functions%2Fde313c06-247e-44a5-83a6-0d257d224212 HTTP/1.1" 200 103852
    time="2018-06-06T10:24:53Z" level=info msg="getting orphan archives"
    time="2018-06-07T01:50:32Z" level=info msg="Handling upload for /packages/demo-src-pkg-zip-d20x-rnhpna-i8fmoq.zip"
    172.16.76.95 - - [07/Jun/2018:01:50:32 +0000] "POST /v1/archive HTTP/1.1" 200 72
    time="2018-06-07T02:24:53Z" level=info msg="getting orphan archives"

timer:

  • 作用:一个基于时间的triggers,定时向请求指定函数。这里是每30s请求一次。
  • 日志包括:
    2018/06/07 08:17:30 Making HTTP request to http://router.fission/fission-function/hello
    主要是记录时间
Read More
post @ 2018-06-01

定义:

压缩神经网络参数——轻量化网络
SqueezeNet是一个小型化的网络模型结构,在保证不降低检测精度的同时,用了比AlexNet少50倍的参数。

同时采用了deep compression技术,对squeezenet进行了压缩,将原始AlexNet模型压缩至原来的1/500(模型文件< 0.5MB,原始AlexNet模型约为200MB,同时增大了计算量。

措施:

  1. 将一部分3x3的filter(卷集核)替换成1x1的filter;
    本文替换3x3的卷积kernel为1x1的卷积kernel可以让参数缩小9X。但是为了不影响识别精度,并不是全部替换,而是一部分用3x3,一部分用1x1。
  2. 减少输入的channels(3x3卷积核的input feature map数量,输入通道数);
    如果是conv1-conv2这样的直连,那么实际上是没有办法减少conv2的input feature map数量的。因此把一层conv分解为两层,封装为一个Fire Module。使用squeeze layers来实现。
  3. 在整个网络后期才进行下采样,使得卷积层有比较大的activation maps;
    分辨率越大的特征图(延迟降采样)可以带来更高的分类精度,因为分辨率越大的输入能够提供的信息就越多。将欠采样操作延后,可以给卷积层提供更大的激活图:更大的激活图保留了更多的信息,可以提供更高的分类准确率。

其中:措施1、2可降低参数数量。措施3用来大化网络精度。

fire module:

一个类似inception的网络单元结构。SqueezeNet的网络结构由若干个 fire module 组成。
将原来一层conv层变成两层:squeeze卷集层(有1x1卷集核)+expand卷集层(1x1和3x3卷积核)。

  1. 策略1:squeeze层用1x1的卷集filter。squeeze层借鉴了inception的思想,利用1x1卷积核来降低输入到expand层中3x3卷积核的输入通道数channels。
  2. 策略2: 定义squeeze层中1x1卷积核的数量是s1x1,expand层中1x1卷积核的数量是e1x1, 3x3卷积核的数量是e3x3。令s1x1 < e1x1+ e3x3从而保证输入到3x3的输入通道数减小,这样squeeze layer可以限制输入通道数量。
    激活函数:为了保证1x1卷积核和3x3卷积核具有相同大小的输出,3x3卷积核采用1像素的zero-padding和步长 squeeze层和expand层均采用RELU作为激活函数 。

Fire module输入的feature map为HWM的,输出的feature map为HM(e1+e3),可以看到feature map的分辨率是不变的,变的仅是维数,也就是通道数,这一点和VGG的思想一致。
首先,HWM的feature map经过Squeeze层,得到S1个feature map,这里的S1均是小于M的,以达到“压缩”的目的。
其次,HWS1的特征图输入到Expand层,分别经过11卷积层和33卷积层进行卷积,再将结果进行concat,得到Fire module的输出,为 HM(e1+e3)的feature map。
fire模块有三个可调参数:S1,e1,e3,分别代表卷积核的个数,同时也表示对应输出feature map的维数,在本文提出的SqueezeNet结构中,e1=e3=4s1

模型:

SqueezeNet以卷积层(conv1)开始,接着使用8个Fire modules (fire2-9),最后以卷积层(conv10)结束。每个fire module中的filter数量逐渐增加,并且在conv1, fire4, fire8, 和 conv10这几层之后使用步长为2的max-pooling,即将池化层放在相对靠后的位置,这使用了以上的策略(3)。
最后是一个conv10,在fire9后采用50%的dropout 由于全连接层的参数数量巨大,因此借鉴NIN的思想,去除了全连接层FC而改用global average pooling。

减少参数的优点:

1、实现更高效的分布式训练;
服务器间的通信是分布式CNN训练的重要限制因素。对于分布式 数据并行 训练方式,通信需求和模型参数数量正相关。小模型对通信需求更低。
2、训练出轻量级的模型,减小下载模型到客户端的额外开销 ;
比如在自动驾驶中,经常需要更新客户端模型。更小的模型可以减少通信的额外开销,使得更新更加容易。
3、在FPGA和嵌入式硬件上的部署实现;

GitHub项目:

SqueezeNet https://github.com/DeepScale/SqueezeNet 1.4k star
SqueezeNet-Deep-Compression: https://github.com/songhan/SqueezeNet-Deep-Compression 314 star https://arxiv.org/abs/1602.07360
SqueezeNet-Generator: https://github.com/songhan/SqueezeNet-Generator
SqueezeNet-DSD-Training: https://github.com/songhan/SqueezeNet-DSD-Training
SqueezeNet-Residual: https://github.com/songhan/SqueezeNet-Residual
https://github.com/vonclites/squeezenet 52 star 有原论文 https://arxiv.org/abs/1602.07360
https://github.com/rcmalli/keras-squeezenet 251 star Keras实现 squeezenet
https://github.com/DT42/squeezenet_demo 175 star

相关论文:

https://arxiv.org/pdf/1602.07360v3.pdf squeezenet用了比AlexNet少50倍的参数,达到了AlexNet相同的精度
https://arxiv.org/pdf/1506.02626v3.pdf Learning both Weights and Connections for Efficient Neural Network (NIPS’15)
https://arxiv.org/pdf/1510.00149v5.pdf 深度压缩,用剪枝来压缩深度神经网络,训练量化和 Huffman 编码
https://arxiv.org/pdf/1602.01528v1.pdf 压缩神经网络的Efficient Inference Engine

总结:

squeezenet采用“多层小卷积核”策略,通过增加计算量换来更少的参数,把参数读取的代价转移到计算量上。计算耗时还是要远远小于数据存取耗时的,是“多层小卷积核”策略成功的根源。

其他:

mobilenet和,squeezenet都是alexnet参数量1/50,mobilenet速度比alexnet快10倍,squeezenet提升3%

Read More

ARM

  1. ARM Compute Library案例:

Raspberry Pi 3

  1. 用opencv在树莓派上部署SqueezeNet
  • 案例:用OpenCV3.3.0在Raspberry Pi 3上部署 pre-trained SqueezeNet Neural Network
  • 产品化程度:
    比较高,可以输出结果。
1
2
3
4
5
6
7
8
9
10
11
(1)在图像上绘出最高的预测分类标签和相应的概率
(2)将前五个结果和概率打印到终端
(3)将图像显示在屏幕上

[INFO] loading model...
[INFO] classification took 0.4432 seconds
[INFO] 1. label: drake, probability: 0.25705
[INFO] 2. label: goose, probability: 0.18581
[INFO] 3. label: black stork, probability: 0.10414
[INFO] 4. label: hornbill, probability: 0.074497
[INFO] 5. label: quail, probability: 0.051127
  1. 使用Raspberry Pi和预先训练的深度学习神经网络对输入图像进行分类
  1. 在Raspberry Pi 中运行Movidius Neural Compute Stick
  1. 使用Raspberry Pi 3进行目标检测

其他

  1. 通过SqueezeNet进行猫狗识别
  1. MXNet在Raspberry Pi上的实时对象检测
  1. 手机上的Squeezing Deep Learning
    链接:https://www.slideshare.net/anirudhkoul/squeezing-deep-learning-into-mobile-phones
Read More

系统:ubuntu、树莓派(centos系统)、

  1. 调整树莓派时间(默认好像是去年)
    用ntpdate同步时间
    https://jingyan.baidu.com/article/f71d6037815a0d1ab741d167.html

  2. 失败的尝试,看了之前的博客
    https://www.wandianshenme.com/play/build-tensorflow-on-raspberry-pi-step-by-step-guide/
    http://www.cnblogs.com/jojodru/p/7744630.html
    写的比较复杂,而且都没有成功,可能是现在tensorflow lite 发展的比较快,信息更新的比较快

  3. 成功的尝试,官网
    https://github.com/tensorflow/tensorflow/blob/master/tensorflow/contrib/lite/g3doc/rpi.md
    很快就build好了

Read More

复现activitynet2016未剪辑视频分类冠军算法模型:

代码链接:https://github.com/yjxiong/anet2016-cuhk

系统:ubuntu

装上unzip和cmake

复现activitynet2016未剪辑视频分类冠军算法模型:https://github.com/yjxiong/anet2016-cuhk

主要通过脚本安装https://github.com/yjxiong/anet2016-cuhk/blob/master/build_all.sh

环境准备如下:

  1. 安装anaconda
  2. 安装caffe
  3. 安装tensorflow
  4. 安装opencv

脚本有一些地方运行不了,整理的之后步骤如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101



#!/usr/bin/env bash
# TODO: add compilation steps

# update the submodules: Caffe and Dense Flow
git submodule update --remote

# install Caffe dependencies
sudo apt-get -qq install libprotobuf-dev libleveldb-dev libsnappy-dev libhdf5-serial-dev protobuf-compiler libatlas-base-dev
不对!!!!!!!!!!sudo apt-get -qq install --no-install-recommends libboost1.55-all-dev
改成sudo apt-get -qq install --no-install-recommends libboost-all-dev
sudo apt-get -qq install libgflags-dev libgoogle-glog-dev liblmdb-dev

# install Dense_Flow dependencies
sudo apt-get -qq install libzip-dev

# install common dependencies: OpenCV
# adpated from OpenCV.sh
version="2.4.13"

echo "Building OpenCV" $version
mkdir 3rd-party/
cd 3rd-party/

echo "Installing Dependenices"
不对!!!!!!!!!sudo apt-get -qq install libopencv-dev build-essential checkinstall cmake pkg-config yasm libjpeg-dev libjasper-dev libavcodec-dev libavformat-dev libswscale-dev libdc1394-22-dev libxine-dev libgstreamer0.10-dev libgstreamer-plugins-base0.10-dev libv4l-dev python-dev python-numpy libtbb-dev libqt4-dev libgtk2.0-dev libfaac-dev libmp3lame-dev libopencore-amrnb-dev libopencore-amrwb-dev libtheora-dev libvorbis-dev libxvidcore-dev x264 v4l-utils

改成sudo apt-get -qq install libopencv-dev build-essential checkinstall cmake pkg-config yasm libjpeg-dev libjasper-dev libavcodec-dev libavformat-dev libswscale-dev libdc1394-22-dev libxine2-dev libgstreamer0.10-dev libgstreamer-plugins-base0.10-dev libv4l-dev python-dev python-numpy libtbb-dev libqt4-dev libgtk2.0-dev libfaac-dev libmp3lame-dev libopencore-amrnb-dev libopencore-amrwb-dev libtheora-dev libvorbis-dev libxvidcore-dev x264 v4l-utils

echo "Downloading OpenCV" $version

echo "Installing OpenCV" $version
unzip OpenCV-$version.zip
cd opencv-$version
mkdir build
cd build
cmake -D CMAKE_BUILD_TYPE=RELEASE -D WITH_TBB=ON -D WITH_V4L=ON -D WITH_QT=ON -D WITH_OPENGL=ON ..

!!!!!!!!!!
在这里Makefile.config加入:
LINKFLAGS := -Wl,-rpath,/root/anaconda3/lib
!!!!!!!!!!
??????????cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local -D WITH_TBB=ON -D BUILD_NEW_PYTHON_SUPPORT=ON -D WITH_V4L=ON -D INSTALL_C_EXAMPLES=ON -D INSTALL_PYTHON_EXAMPLES=ON -D BUILD_EXAMPLES=ON -D BUILD_TIFF=ON -D WITH_OPENGL=ON..

cmake -D CMAKE_BUILD_TYPE=RELEASE -D WITH_TBB=ON -D WITH_V4L=ON -D WITH_QT=ON -D WITH_OPENGL=ON -D BUILD_TIFF=ON ..

cp lib/cv2.so ../../../
echo "OpenCV" $version "built"

# build dense_flow
cd ../../../

echo "Building Dense Flow"
cd lib/dense_flow
mkdir build
cd build
OpenCV_DIR=../../../3rd-party/opencv-$version/build/ cmake .. -DCUDA_USE_STATIC_CUDA_RUNTIME=OFF
make -j
!!!!!!!!需要下载
echo "Dense Flow built"

https://github.com/jaejunlee0538/openfabmap/issues/3


# build caffe
echo "Building Caffe"
cd ../../caffe-action
mkdir build
cd build
OpenCV_DIR=../../../3rd-party/opencv-$version/build/ cmake .. -DCUDA_USE_STATIC_CUDA_RUNTIME=OFF

!!!!!!!!!!!!!!!改成
OpenCV_DIR=../../../3rd-party/opencv-$version/build/ cmake .. -DCUDA_USE_STATIC_CUDA_RUNTIME=OFF -D BUILD_TIFF=ON
然后如果你装了anaconda包的话,删除anaconda/lib/下面的 libm https://blog.csdn.net/ccemmawatson/article/details/42004105
sudo rm -rf libm*

make -j32
echo "Caffe Built"
cd ../../../

# install python packages
pip install -r py_requirements.txt

# setup for web demo
mkdir tmp

# copy website files to the folder
wget -O 3rd-party/bootstrap-fileinput.zip https://github.com/kartik-v/bootstrap-fileinput/zipball/master
cd 3rd-party
unzip bootstrap-fileinput.zip
mv kartik-v-bootstrap-* Bootstrap-fileinput

!!!!!!!!!!!cannot move 'kartik-v-bootstrap-fileinput-61c9523' to 'Bootstrap-fileinput/kartik-v-bootstrap-fileinput-61c9523': Directory not empty

cp -r Bootstrap-fileinput/js ../static/js
cp Bootstrap-fileinput/css/* ../static/css/


export ANET_HOME=/root/anet2016-cuhk
Read More

作者

Feng Mao

思路

提取CNN和C3D特征作为帧特征,使用average pooling 和 LSTM 将帧特征聚集为视频特征,使用MoE进行分类
CNN_C3D_averagePooling_LSTM_MoEcd

特征提取

CNN:使用数据集ImageNet 21k 训练模型inception-v1 。在分类层POOL5/7X7YS1,选择分类层之前的那一个hidden层作为帧级特征第一部分。
C3D:使用PCA降维

特征聚合

无监督 average pooling
有监督 aggregation LSTM

分类

MoE(Mixture of experts) ,结合不同特征和不同聚合模型:

  • CNN + average pooling
  • CNN + LSTM
  • C3D + average pooling
  • C3D + LSTM

需要训练的参数是CNN and C3D 的LSTM参数和 MoE parameters

Read More
⬆︎TOP