Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/289.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何使用Spark和Caffe对图像进行分类_Python_Apache Spark_Pyspark_Rdd_Pycaffe - Fatal编程技术网

Python 如何使用Spark和Caffe对图像进行分类

Python 如何使用Spark和Caffe对图像进行分类,python,apache-spark,pyspark,rdd,pycaffe,Python,Apache Spark,Pyspark,Rdd,Pycaffe,我正在使用Caffe做图像分类,我可以使用MacOSX,Pyhton 现在我知道如何使用Caffe和Spark python对图像列表进行分类,但是如果我想让它更快,我想使用Spark 因此,我尝试对RDD的每个元素应用图像分类,RDD是从图像路径列表创建的。但是,Spark不允许我这样做 这是我的密码: 这是图像分类的代码: # display image name, class number, predicted label def classify_image(image_path, tr

我正在使用Caffe做图像分类,我可以使用MacOSX,Pyhton

现在我知道如何使用Caffe和Spark python对图像列表进行分类,但是如果我想让它更快,我想使用Spark

因此,我尝试对RDD的每个元素应用图像分类,RDD是从图像路径列表创建的。但是,Spark不允许我这样做

这是我的密码:

这是图像分类的代码:

# display image name, class number, predicted label
def classify_image(image_path, transformer, net):
    image = caffe.io.load_image(image_path)
    transformed_image = transformer.preprocess('data', image)
    net.blobs['data'].data[...] = transformed_image
    output = net.forward()
    output_prob = output['prob'][0]
    pred = output_prob.argmax()

    labels_file = caffe_root + 'data/ilsvrc12/synset_words.txt'
    labels = np.loadtxt(labels_file, str, delimiter='\t')
    lb = labels[pred]

    image_name = image_path.split(images_folder_path)[1]

    result_str = 'image: '+image_name+'  prediction: '+str(pred)+'  label: '+lb
    return result_str
该代码生成Caffe参数,并对RDD的每个元素应用classify_image方法:

def main():
    sys.path.insert(0, caffe_root + 'python')
    caffe.set_mode_cpu()
    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)

    mu = np.load(caffe_root + 'python/caffe/imagenet/ilsvrc_2012_mean.npy')
    mu = mu.mean(1).mean(1)

    transformer = caffe.io.Transformer({'data': net.blobs['data'].data.shape})

    transformer.set_transpose('data', (2,0,1))
    transformer.set_mean('data', mu)
    transformer.set_raw_scale('data', 255)
    transformer.set_channel_swap('data', (2,1,0))

    net.blobs['data'].reshape(50,
                          3,
                          227, 227)

    image_list= []
    for image_path in glob.glob(images_folder_path+'*.jpg'):
        image_list.append(image_path)

    images_rdd = sc.parallelize(image_list)
    transformer_bc = sc.broadcast(transformer)
    net_bc = sc.broadcast(net)
    image_predictions = images_rdd.map(lambda image_path: classify_image(image_path, transformer_bc, net_bc))
    print image_predictions

if __name__ == '__main__':
    main()
如您所见,这里我尝试广播caffe参数,
transformer\u bc=sc.broadcast(transformer)
net\u bc=sc.broadcast(net)
错误是:

运行时错误:未启用“caffe.\u caffe.Net”实例的酸洗

在我进行广播之前,错误是:

驱动程序堆栈跟踪。。。。原因:org.apache.spark.api.python.python异常:回溯(最近一次调用上次):


那么,您知道吗,有没有什么方法可以使用Caffe和Spark对图像进行分类,但也可以利用Spark?

当您处理复杂的非本机对象时,初始化必须直接转移到workers,例如使用singleton模块:

net\u builder.py

import cafe 

net = None

def build_net(*args, **kwargs):
     ...  # Initialize net here
     return net       

def get_net(*args, **kwargs):
    global net
    if net is None:
        net = build_net(*args, **kwargs)
    return net
import net_builder

sc.addPyFile("net_builder.py")

def classify_image(image_path, transformer, *args, **kwargs):
    net = net_builder.get_net(*args, **kwargs)
main.py

import cafe 

net = None

def build_net(*args, **kwargs):
     ...  # Initialize net here
     return net       

def get_net(*args, **kwargs):
    global net
    if net is None:
        net = build_net(*args, **kwargs)
    return net
import net_builder

sc.addPyFile("net_builder.py")

def classify_image(image_path, transformer, *args, **kwargs):
    net = net_builder.get_net(*args, **kwargs)
这意味着您还必须分发所有必需的文件。可以手动或机械方式完成


另一方面,你应该看一下包装。

谢谢,我已经试过你在这里写的东西了。没关系,你能看看我的问题吗?你能告诉我为什么我的方法被卡住了吗?谢谢