我正在尝试使用caffe为图像实现像素级二进制分类.对于尺寸为3x256x256的每个图像,我有一个256x256标签数组,其中每个条目都标记为0或1.此外,当我使用下面的代码读取我的HDF5文件时,
dirname = "examples/hdf5_classification/data"
f = h5py.File(os.path.join(dirname, 'train.h5'), "r")
ks = f.keys()
data = np.array(f[ks[0]])
label = np.array(f[ks[1]])
print "Data dimension from HDF5", np.shape(data)
print "Label dimension from HDF5", np.shape(label)
Run Code Online (Sandbox Code Playgroud)
我得到数据和标签维度
Data dimension from HDF5 (402, 3, 256, 256)
Label dimension from HDF5 (402, 256, 256)
Run Code Online (Sandbox Code Playgroud)
我试图将这些数据提供给给定的hdf5分类网络,在训练时,我有以下输出(使用默认求解器,但在GPU模式下).
!cd /home/unni/MTPMain/caffe-master/ && ./build/tools/caffe train -solver examples/hdf5_classification/solver.prototxt
Run Code Online (Sandbox Code Playgroud)
给
Run Code Online (Sandbox Code Playgroud)I1119 01:29:02.222512 11910 caffe.cpp:184] Using GPUs 0 I1119 01:29:02.509752 11910 solver.cpp:47] Initializing solver from parameters: train_net: "examples/hdf5_classification/train_val.prototxt" test_net: "examples/hdf5_classification/train_val.prototxt" test_iter: 250 test_interval: 1000 base_lr: 0.01 …
我最近安装了 Caffe 以及 OpenCV 和其他依赖项。Pycharm 运行良好 2 天,今天我无法在 Pycharm 中启动 Python 控制台了。我可以在终端中毫无问题地启动 python ......每次我尝试启动 Python 控制台时,“连接到控制台”都需要一段时间,然后这就是我得到的结果:
/Users/myname/anaconda/bin/python "/Applications/PyCharm CE.app/Contents/helpers/pydev/pydevconsole.py" 56229 56230
Python 2.7.10 |蟒蛇 2.2.0 (x86_64)| (默认,2015 年 5 月 28 日,17:04:42)输入“版权”、“信用”或“许可”以获取更多信息。
IPython 3.0.0——增强的交互式 Python。Anaconda 由 Continuum Analytics 提供。请查看:http : //continuum.io/thanks和https://binstar.org
无法连接到控制台进程。
进程完成,退出代码 137
我在caffe中有一个图像分类问题.我使用imagenet模型(来自caffe教程)对我创建的数据进行分类,但我总是得到相同的分类结果(同一个类,即第3类).这就是我的进展方式:
我使用caffe for windows和Python作为接口
(1)我收集数据.我的样本图像(训练和测试)是尺寸为5x5x3(RGB)uint8的图像,因此其像素值从0到255.
(2)我将它们的大小调整为imagenet所需的大小:256x256x3.因此我在matlab中使用resize函数(最近邻插值).
(3)我创建了一个LevelDB和image_mean.
(4)训练我的网络(3000次迭代).我在imagenet定义中更改的唯一参数是平均图像和LevelDB的路径.我得到的结果:
I0428 12:38:04.350100 3236 solver.cpp:245] Train net output #0: loss = 1.91102 (* 1 = 1.91102 loss)
I0428 12:38:04.350100 3236 sgd_solver.cpp:106] Iteration 2900, lr = 0.0001
I0428 12:38:30.353361 3236 solver.cpp:229] Iteration 2920, loss = 2.18008
I0428 12:38:30.353361 3236 solver.cpp:245] Train net output #0: loss = 2.18008 (* 1 = 2.18008 loss)
I0428 12:38:30.353361 3236 sgd_solver.cpp:106] Iteration 2920, lr = 0.0001
I0428 12:38:56.351630 3236 solver.cpp:229] Iteration 2940, loss = 1.90925
I0428 12:38:56.351630 3236 solver.cpp:245] …
Run Code Online (Sandbox Code Playgroud) 我正在对我的数据进行FCN32语义分段.我运行算法来微调我的数据(只有一个通道的灰度图像),直到80,000次迭代; 然而,损失和准确度是波动的,输出图像完全是黑色的.甚至,在80,000次迭代后损失如此之高.我认为分类器不能很好地训练我的数据.所以,我要从头开始训练.另一方面,我的数据有不平衡的类成员.背景像素多于其他四个类.一些研究人员建议使用加权损失.有谁有想法吗?我做得对吗?如何将此加权损失添加到train_val.prototxt?
如果您了解与加权损失培训相关的任何资源/示例,我将非常感激,请在此与我分享.
再次感谢
我编写了一个调用的多线程模块fast_nn
,Cython
并使用以下内容编译它setup.py
:
from distutils.core import setup
from distutils.extension import Extension
from Cython.Build import cythonize
import numpy
setup(
ext_modules = cythonize([
Extension("fast_nn", ["fast_nn.pyx"], language = 'c++', extra_compile_args = ['-O3', '-fopenmp'], extra_link_args = ['-fopenmp'], include_dirs = [numpy.get_include()])
])
)
Run Code Online (Sandbox Code Playgroud)
另外,我使用了caffe
框架的python 绑定。
如果我单独或pycaffe
单独使用我的模块,一切都很好。但是,以下组合是有问题的:
import caffe.io
import fast_nn
Run Code Online (Sandbox Code Playgroud)
在一台机器上,它不会导致任何问题。在另一台机器上,我收到以下异常:
Traceback (most recent call last):
File "test.py", line 2, in <module>
import fast_nn
ImportError: dlopen: cannot load any more object with static TLS
Run Code Online (Sandbox Code Playgroud)
从这个线程我了解到有太多带有初始执行静态 …
我正在使用Python Caffe,并与net.layers [layer_index] .blobs和net.params [layer_type]混淆.如果我理解的话,net.params包含所有网络参数.以LeNet为例,net.params ['conv1']代表'conv1'层的网络系数.然后net.layer [layer_index] .blobs应该表示相同.但是,我发现它们并不完全相同.我使用以下代码来测试它:
def _differ_square_sum(self,blobs):
import numpy as np
gradients = np.sum(np.multiply(blobs[0].diff,blobs[0].diff)) + np.sum(np.multiply(blobs[1].diff,blobs[1].diff))
return gradients
def _calculate_objective(self, iteration, solver):
net = solver.net
params = net.params
params_value_list = list(params.keys())
[print(k,v.data.shape) for k,v in net.blobs.items()]
layer_num = len(net.layers)
j = 0
for layer_index in range(layer_num):
if(len(net.layers[layer_index].blobs)>0):
cur_gradient = self._differ_square_sum(net.layers[layer_index].blobs)
key = params_value_list[j]
cur_gradient2 = self._differ_square_sum(params[key])
print([cur_gradient,cur_gradient2])
assert(cur_gradient == cur_gradient2)
Run Code Online (Sandbox Code Playgroud)
关于他们之间的区别的任何想法?谢谢.
我正在使用PyCaffe来实现受VGG 16层网络启发的神经网络.我想使用GitHub页面提供的预训练模型.通常,这通过匹配图层名称来实现.
对于我的"fc6"
图层,我在train.prototxt文件中有以下定义:
layer {
name: "fc6"
type: "InnerProduct"
bottom: "pool5"
top: "fc6"
inner_product_param {
num_output: 4096
}
}
Run Code Online (Sandbox Code Playgroud)
以下是VGG-16部署体系结构的prototxt文件.请注意,"fc6"
他们的原型文本与我的相同(除了学习率,但这是无关紧要的).值得注意的是,我的模型中的输入大小也相同:3通道224x224px图像.
我一直非常密切地关注本教程,并且给我一个问题的代码块如下:
solver = caffe.SGDSolver(osp.join(model_root, 'solver.prototxt'))
solver.net.copy_from(model_root + 'VGG_ILSVRC_16_layers.caffemodel')
solver.test_nets[0].share_with(solver.net)
solver.step(1)
Run Code Online (Sandbox Code Playgroud)
第一行加载我的求解器原型,然后第二行从预先训练的模型中复制权重(VGG_ILSVRC_16_layers.caffemodel
).解算器运行时,我收到此错误:
Cannot copy param 0 weights from layer 'fc6'; shape mismatch. Source param
shape is 1 1 4096 25088 (102760448); target param shape is 4096 32768 (134217728).
To learn this layer's parameters from scratch rather than copying from a …
Run Code Online (Sandbox Code Playgroud) 我正在尝试为我的问题训练一个完全卷积网络.我正在使用https://github.com/shelhamer/fcn.berkeleyvision.org的实现.我有不同的图像大小.
在GoogleNet等相关模型中 https://github.com/BVLC/caffe/tree/master/models/bvlc_googlenet
我们可以看到两个描述网络的.prototxt文件,它们之间有什么区别?
我的关键问题是,在python界面中,为什么我只能使用前者?也就是说:
model_def = caffe_root + 'models/bvlc_googlenet/deploy.prototxt'
model_weights = caffe_root + 'models/bvlc_googlenet/bvlc_googlenet.caffemodel'
net = caffe.Net(model_def,model_weights,caffe.TEST)
Run Code Online (Sandbox Code Playgroud)
此代码运行正确,同时:
model_def = caffe_root + 'models/bvlc_googlenet/train_val.prototxt'
model_weights = caffe_root + 'models/bvlc_googlenet/bvlc_googlenet.caffemodel'
net = caffe.Net(model_def,model_weights,caffe.TEST)
Run Code Online (Sandbox Code Playgroud)
这不.它给出了错误信息:
layer {
name: "inception_4e/relu_5x5_reduce"
type: "ReLU"
bottom: "inception_4e/5x5_reduce"
top: "inception_4e/5x5_reduce"
}
layer {
I0805 10:15:13.698256 30930 layer_factory.hpp:77] Creating layer data
I0805 10:15:13.698444 30930 net.cpp:100] Creating Layer data
I0805 10:15:13.698465 30930 net.cpp:408] data -> data
I0805 10:15:13.698514 30930 net.cpp:408] data -> label
F0805 10:15:13.699956 …
Run Code Online (Sandbox Code Playgroud)