更加详细的信息参考链接:Ubuntu速配指南,Ubuntu release end of life
macOS Sierra (10.12.4)下Caffe执行Python代码报告错误“Mean shape incompatible with input shape”
在执行macOS Sierra (10.12.4)下Caffe通过Python接口加载binaryproto格式的均值文件的时候,最后报告错误:
1 2 3 4 5 6 7 8 |
Traceback (most recent call last): File "analysis_memnet.py", line 29, in <module> detector = caffe.Detector(model_def, pretrained_model, mean=means) File "/Users/Source/caffe/distribute/python/caffe/detector.py", line 46, in __init__ self.transformer.set_mean(in_, mean) File "/Users/Source/caffe/distribute/python/caffe/io.py", line 259, in set_mean raise ValueError('Mean shape incompatible with input shape.') ValueError: Mean shape incompatible with input shape. |
这个错误发生的原因是由于memnet
提供的均值文件是256*256
的,但是提供的配置文件却是227*227
的,导致在io.py
里面的代码在进行判断的时候发生异常。调整源代码中的python/caffe/io.py
里面的代码:
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 |
def set_mean(self, in_, mean): """ Set the mean to subtract for centering the data. Parameters ---------- in_ : which input to assign this mean. mean : mean ndarray (input dimensional or broadcastable) """ self.__check_input(in_) ms = mean.shape if mean.ndim == 1: # broadcast channels if ms[0] != self.inputs[in_][1]: raise ValueError('Mean channels incompatible with input.') mean = mean[:, np.newaxis, np.newaxis] else: # elementwise mean if len(ms) == 2: ms = (1,) + ms if len(ms) != 3: raise ValueError('Mean shape invalid') if ms != self.inputs[in_][1:]: raise ValueError('Mean shape incompatible with input shape.') self.mean[in_] = mean |
调整为:
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 |
def set_mean(self, in_, mean): """ Set the mean to subtract for centering the data. Parameters ---------- in_ : which input to assign this mean. mean : mean ndarray (input dimensional or broadcastable) """ self.__check_input(in_) ms = mean.shape if mean.ndim == 1: # broadcast channels if ms[0] != self.inputs[in_][1]: raise ValueError('Mean channels incompatible with input.') mean = mean[:, np.newaxis, np.newaxis] else: # elementwise mean if len(ms) == 2: ms = (1,) + ms if len(ms) != 3: raise ValueError('Mean shape invalid') if ms != self.inputs[in_][1:]: in_shape = self.inputs[in_][1:] m_min, m_max = mean.min(), mean.max() normal_mean = (mean - m_min) / (m_max - m_min) mean = resize_image(normal_mean.transpose((1,2,0)),in_shape[1:]).transpose((2,0,1)) * (m_max - m_min) + m_min #raise ValueError('Mean shape incompatible with input shape.') self.mean[in_] = mean |
调整完成后,需要重新编译Caffe
:
1 2 3 4 |
$ make clean $ make $ make pycaffe $ make distribute |
参考链接
macOS Sierra (10.12.4)下Caffe通过Python接口加载binaryproto格式的均值文件
macOS Sierra
(10.12.4
)下Caffe
通过Python
接口加载均值文件的时候,都是加载的.npy
格式的文件,这个格式是Python
存储的格式,跟我们经常下载到的.binaryproto
格式的均值文件是不同的,这样就导致了加载问题。
.binaryproto
是Google
的Protocol Buffer
序列化后的数据,而.npy
格式是Python
的numpy
模块序列化后的数据。
之所以会出现两种不同的存储格式,目前猜测是由于目前Python 3
不能很好的支持Protocol Buffer
导致的。
Python
下是不能直接加载.binaryproto
格式的数据的,必须进行一次转换才行,示例代码如下:
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 |
#coding=utf-8 #加载必要的库 import numpy as np import sys,os #设置当前目录 caffe_root = '/Users/Source/caffe/distribute/' sys.path.append(caffe_root + 'python') import caffe os.chdir(caffe_root) memnet_root = '/Users/Source/caffe/' model_def =memnet_root + 'models/memnet/deploy.prototxt' pretrained_model=memnet_root + 'models/memnet/memnet.caffemodel' means_file=memnet_root + 'models/memnet/mean.binaryproto' caffe.set_mode_cpu() blobProto=caffe.io.caffe_pb2.BlobProto() binProtoFile=open(means_file,'rb') blobProto.ParseFromString(binProtoFile.read()) means = caffe.io.blobproto_to_array(blobProto)[0] binProtoFile.close() # Make detector. detector = caffe.Detector(model_def, pretrained_model, mean=means) |
参考链接
macOS Sierra (10.12.4)编译pycaffe成功后,执行时候崩溃,错误“Segmentation fault: 11”
参照 macOS Sierra (10.12.3)编译Caffe 编译成功 Caffe
后,开始尝试使用 Caffe
的 Python
接口,执行如下命令:
1 |
$ make pycaffe |
编译一切成功,但是当执行
1 |
import caffe |
的时候,程序崩溃,提示如下内容:
1 |
Segmentation fault: 11 |
继续阅读macOS Sierra (10.12.4)编译pycaffe成功后,执行时候崩溃,错误“Segmentation fault: 11”
macOS Sierra (10.12.4)下Python通过PyAV调用FFMPEG操作视频
macOS Sierra
(10.12.4
)下使用Python
操作视频,FFMPEG
是目前来说最好的一个选择,但是没有为Python
专门提供适配接口,网上搜索了比较长时间,才找到PyAV
来操作FFMPEG
。
PyAV
的文档地址在:https://mikeboers.github.io/PyAV/
代码地址在:https://github.com/mikeboers/PyAV
首先需要通过HomeBrew
安装FFMPEG
:
1 |
$ brew install ffmpeg |
接下来安装PyAV
,安装方式两种:
一种是直接通过PIP
来安装:
1 |
$ pip install av |
另外一种是通过下载代码来手工安装
1 2 3 |
$ git clone https://github.com/mikeboers/PyAV.git $ cd PyAV $ python setup.py install |
安装好后的例子如下:
1 2 3 4 5 6 7 8 9 10 11 |
import av from av.frame import Frame from av.packet import Packet from av.stream import Stream from av.utils import AVError from av.video import VideoFrame container = av.open('san.mp4') for frame in container.decode(video=0): frame.to_image().save('./pyav/frame-%04d.jpg' % frame.index) |
macOS Sierra (10.12.4)系统上Caffe借助现有的模型训练自己的数据集
Caffe
代码中自带一些模型的例子,这些例子在源代码的models
目录下,这些都是其他项目中用来训练的配置文件,学习的时候,我们没有必要完全自己从头到尾搭建自己的网络模型,而是直接使用例子中的模型,后期在这些模型上简单调整一下,一般可以满足大多数的需求。
下面我们以models/bvlc_alexnet
目录下的模型配置文件为例子,训练我们自己的神经网络。
macOS Sierra (10.12.4)优酷客户端下载后的视频文件位置
macOS Sierra (10.12.4)优酷客户端下载后的视频文件位置在:
1 |
/Users/你的用户名/Library/Containers/com.youku.mac/Data |
可以在命令行下执行:
1 |
$ open ~/Library/Containers/com.youku.mac/Data |
打开这个目录。
Hollow导读
本文大部分内容来源于Hollow官方文档
开发过程中会遇到这样的数据:体量算不上“大数据”,数据在变化,幅度也不大。处理这类数据的时候,一般是把数据放到内存中(容器、json、xml、RDBMS),隔断时间更新一次。
这样处理有很多局限性
- 内存限制
- 更新频率不能过快,造成延迟
- 频繁的读写造成I/O、GC等
世界陷入水火,一般的套路现在主角就该出场了
Netflix推出了Hollow,它是数据的利剑,内存的盾牌,它将不JSON、不XML、少GC、高效率的解决问题,总而言之,他是人民的大救星,下面请一起走进科学,走进Hollow的内心世界。
Hollow致力于解决内存数据问题,处理的量级(将数据转为JSON)一般在GB级别,TB/PB就爱莫能助了。
快照-增量
生产的数据有两种类型,Snapshot、Delta,即全量、增量数据。大多数情况下,我们处理的是增量数据。
生产-消费者模式
一个生产者服务多个消费者,生产者生产快照和增量数据更新至BLOB(二进制大数据)文件,消费者在内存中使用数据,只读属性保证了消费的高效。生产文件到内存对开发者是透明的。
数据模型
数据模型基于一个POJO,又相当于数据库的一行。开发者只需要定义一个POJO,Hollow的API-Generator会生产这个POJO相应的消费文件。
它适用于只读数据、单个生产者、可能多个消费者的情形。Hollow实现持久化的唯一机制是利用BLOB存储,它只是一个文件存储,可能是S3、NFS、甚至一台FTP服务器。启动的时候,消费者们读取整个数据集的快照,并将数据集引导到内存中。通过增量的方法,可以保证内存中的数据集是最新的。对于每个消费者,内存中的数据备份是临时性的,如果消费者重新启动,需要从BLOB存储中重新加载快照。
实际上BLOB快照文件的格式很简单,它在很大程度上和在内存布局的结构相同,因此数据初始化主要是将BLOB的内容直接复制到内存中,这一步可以快速完成,确保了初始化的时间很短。
macOS Sierra (10.12.3)使用Eclipse IDE for C/C++ Developers结合CMake Editor编辑Linux MakeFile项目
使用macOS Sierra
(10.12.3)开发C/C++
项目,经常用到网上的开源项目,很多项目是直接用MakeFile
来管理项目的,导致在调试,编辑项目的时候,比较麻烦,搜索了半天,才找到目前看来比较方便的方式,就是结合Eclipse IDE for C/C++ Developers
, CMake Editor
的方式来进行处理。
继续阅读macOS Sierra (10.12.3)使用Eclipse IDE for C/C++ Developers结合CMake Editor编辑Linux MakeFile项目
macOS Sierra (10.12.3)利用aria2解决CUDA下载失败问题
macOS Sierra
(10.12.3)上尝试下载Nvidia
的CUDA,但是由于国内网络问题,导致使用浏览器下载的时候,不仅慢,而且还经常失败,基本上没办法下载成功。尝试使用迅雷的话,如果不是会员,貌似也没有太多的用处。另外一个比较麻烦的问题是,Nvidia
下载服务器,随着下载时间的延长,会强制限制下载速度,导致越来越慢,到最后只有若干KB
的速度。
继续阅读macOS Sierra (10.12.3)利用aria2解决CUDA下载失败问题