我正在尝试使用caffe和python进行实时图像分类.我在一个过程中使用OpenCV从我的网络摄像头流式传输,并在一个单独的过程中,使用caffe对从网络摄像头拉出的帧执行图像分类.然后我将分类结果传回主线程以标注网络摄像头流.
问题是即使我有一个NVIDIA GPU并且正在执行GPU上的caffe预测,主线程也会变慢.通常没有做任何预测,我的网络摄像头流以30 fps运行; 但是,根据预测,我的网络摄像头流最多可获得15 fps.
我已经验证了caffe在执行预测时确实使用了GPU,而且我的GPU或GPU内存并没有最大化.我还验证了我的CPU内核在程序中的任何时候都没有达到最大限度.我想知道我是做错了什么,或者是否有办法让这两个过程真正分开.任何建议表示赞赏.这是我的代码供参考
class Consumer(multiprocessing.Process):
def __init__(self, task_queue, result_queue):
multiprocessing.Process.__init__(self)
self.task_queue = task_queue
self.result_queue = result_queue
#other initialization stuff
def run(self):
caffe.set_mode_gpu()
caffe.set_device(0)
#Load caffe net -- code omitted
while True:
image = self.task_queue.get()
#crop image -- code omitted
text = net.predict(image)
self.result_queue.put(text)
return
import cv2
import caffe
import multiprocessing
import Queue
tasks = multiprocessing.Queue()
results = multiprocessing.Queue()
consumer = Consumer(tasks,results)
consumer.start()
#Creating window and starting video capturer from camera
cv2.namedWindow("preview")
vc = cv2.VideoCapture(0)
#Try to …Run Code Online (Sandbox Code Playgroud) 我正在使用Caffe,它在加载神经网络时会向shell打印大量输出.
我想抑制输出,这可以通过设置GLOG_minloglevel=1运行Python脚本来完成.我尝试使用以下代码执行此操作,但我仍然从加载网络获得所有输出.如何正确抑制输出?
os.environ["GLOG_minloglevel"] = "1"
net = caffe.Net(model_file, pretrained, caffe.TEST)
os.environ["GLOG_minloglevel"] = "0"
Run Code Online (Sandbox Code Playgroud) 我希望能够将Tensorflow模型转换为Caffe模型.
我在谷歌搜索但我只能找到从caffe到tensorflow的转换器,但不是相反的.
有没有人知道如何做到这一点?
谢谢,Evi
看一个'solver.prototxt'在BVLC/caffe git上发布的例子,有一个训练元参数
weight_decay: 0.04
Run Code Online (Sandbox Code Playgroud)
这个元参数是什么意思?我应该赋予它什么价值?
machine-learning neural-network gradient-descent deep-learning caffe
通过将底部和顶部blob设置为相同,我们可以告诉Caffe进行"就地"计算以保持内存消耗.
目前,我知道我可以就地安全地使用"BatchNorm","Scale"并且"ReLU"层(请让我知道,如果我错了).虽然它似乎对其他层有一些问题(这个问题似乎是一个例子).
何时在Caffe中使用就地层?
它如何与反向传播一起工作?
machine-learning backpropagation neural-network deep-learning caffe
虽然我找到了类似于我的问题的许多答案,但我不相信它已经直接在这里解决了 - 我还有几个问题.共享连续numpy数组的动机如下:
(1)我正在编写的python创建了一个"数据处理程序"类,它实例化了两个连续的numpy数组.(2)工作进程在这些numpy数组之间交替,从磁盘加载数据,执行预处理,以及将数据插入numpy数组.(3)同时,python Caffe包装器将数据从另一个阵列发送到GPU以通过网络运行.
我有几个问题:
是否有可能在连续的numpy数组中分配内存然后将它包装在共享内存对象中(我不确定'对象'是否是正确的术语)使用类似python多处理的Array类?
Numpy数组有一个.ctypes属性,我认为这对于从Array()实例化共享内存数组很有用,但似乎无法确切地确定如何使用它们.
如果在没有 numpy数组的情况下实例化共享内存,它是否保持连续?如果没有,有没有办法确保它保持连续?
有可能做这样的事情:
import numpy as np
from multiprocessing import Array
contArr = np.ascontiguousarray(np.zeros((n_images, n_channels, img_height, img_width)), dtype=np.float32)
sm_contArr = Array(contArr.ctypes.?, contArr?)
Run Code Online (Sandbox Code Playgroud)
然后用实例化实例化
p.append(Process(target=some_worker_function, args=(data_to_load, sm_contArr)))
p.start()
Run Code Online (Sandbox Code Playgroud)
谢谢!
编辑:我知道有许多库在不同的维护状态下具有类似的功能.我宁愿将此限制为纯python和numpy,但如果这不可能,我当然愿意使用它.
我在Python上安装Caffe Deep Learning Framework时遇到了麻烦:
当我make在caffe目录运行命令时,它说
hdf5.h:没有这样的目录
我已经完成的步骤:
更新和升级我的Ubuntu服务器
安装Python 2.7
运行cp cp Makefile.config.example Makefile.config
在Makefile.config中取消注释cpu_only = 1
如果有人能帮助我,我将不胜感激.
错误信息:
CXX src/caffe/util/hdf5.cpp
in file include from src/caffe/util/hdf5.cpp:1:0:
./include/caffe/util/hdf5.hpp:6:18: fatal error: hdf5.h: No such file or directory
compilation terminated
Makefile:572 recipe for target '.build_release/src/caffe/util/hdf5.o'
failed Make:*** [.build_release/src/caffe/util/hdf5.o] Error 1
Run Code Online (Sandbox Code Playgroud) 据我了解,所有CNN都非常相似.它们都有一个卷积层,然后是池和relu层.有些人有像FlowNet和Segnet这样的专门层.我怀疑的是我们应该如何决定使用多少层以及如何为网络中的每个层设置内核大小.我已经找到了这个问题的答案,但我找不到具体的答案.网络是使用反复试验设计的,还是我不了解的一些特定规则?如果你能澄清一下,我将非常感谢你.
convolution neural-network deep-learning caffe conv-neural-network
我有一个有多个标签的图像数据集; 数据集中有100个类,每个图像都有1到5个与之关联的标签.
我正在按照以下URL中的说明操作:
https://github.com/BVLC/caffe/issues/550
它说我需要生成一个文本文件,列出图像及其标签,如
Run Code Online (Sandbox Code Playgroud)/home/my_test_dir/picture-foo.jpg 0 /home/my_test_dir/picture-foo1.jpg 1
在我的情况下,由于我有多标签图像,它是否可以简单地添加标签,如下所示?
Run Code Online (Sandbox Code Playgroud)/home/my_test_dir/picture-foo.jpg 0 2 5 /home/my_test_dir/picture-foo1.jpg 1 4
我有一种感觉,它可能不会那么简单,如果我是对的,在什么步骤,我应该如何在设置Caffe的过程中整合数据集的多标签?
neural-network multilabel-classification deep-learning caffe