Python 2.7 create_lmdb.py文件的错误

Python 2.7 create_lmdb.py文件的错误,python-2.7,caffe,conv-neural-network,pycaffe,Python 2.7,Caffe,Conv Neural Network,Pycaffe,我正在使用来自github的代码,遵循教程。 我所做的改动很少,因为我正在用我的数据训练CNN。但是,我在'create_lmdb.py'文件中执行的更改可能有问题。这两个数据库之间的区别是: 第一:我正在用32x32图像训练我的网络。 第二:我的数据库只包含灰度图像。 但是,我也训练我的网络进行二进制分类 修改后,这是我的文件: import os import glob import random import numpy as np import cv2 import caffe fr

我正在使用来自github的代码,遵循教程。 我所做的改动很少,因为我正在用我的数据训练CNN。但是,我在
'create_lmdb.py'
文件中执行的更改可能有问题。这两个数据库之间的区别是:

第一:我正在用32x32图像训练我的网络。 第二:我的数据库只包含灰度图像。 但是,我也训练我的网络进行二进制分类

修改后,这是我的文件:

import os
import glob
import random
import numpy as np

import cv2

import caffe
from caffe.proto import caffe_pb2
import lmdb

#Size of images
IMAGE_WIDTH = 32
IMAGE_HEIGHT = 32

def transform_img(img, img_width=IMAGE_WIDTH, img_height=IMAGE_HEIGHT):

    #Histogram Equalization
    img = cv2.equalizeHist(img)
    #img[:, :, 1] = cv2.equalizeHist(img[:, :, 1]) not a RGB
    #img[:, :, 2] = cv2.equalizeHist(img[:, :, 2])

    #Image Resizing
    img = cv2.resize(img, (img_width, img_height), interpolation = cv2.INTER_CUBIC) # make sure all the images are at the same size

    return img


def make_datum(img, label):
    #image is numpy.ndarray format. BGR instead of RGB
    return caffe_pb2.Datum(
        channels=1, #not an RGB image
        width=IMAGE_WIDTH,
        height=IMAGE_HEIGHT,
        label=label,
        data=img.tostring())

train_lmdb = '/home/roishik/Desktop/Thesis/Code/cafe_cnn/first/input/train_lmdb'
validation_lmdb = '/home/roishik/Desktop/Thesis/Code/cafe_cnn/first/input/validation_lmdb'

os.system('rm -rf  ' + train_lmdb)
os.system('rm -rf  ' + validation_lmdb)


train_data = [img for img in glob.glob("../input/train/*png")]
test_data = [img for img in glob.glob("../input/test1/*png")]

#Shuffle train_data
random.shuffle(train_data)

print 'Creating train_lmdb'

in_db = lmdb.open(train_lmdb, map_size=int(1e12))
with in_db.begin(write=True) as in_txn:
    for in_idx, img_path in enumerate(train_data):
        if in_idx %  6 == 0:
            continue
        img = cv2.imread(img_path, cv2.IMREAD_GRAYSCALE)
        img = transform_img(img, img_width=IMAGE_WIDTH, img_height=IMAGE_HEIGHT)
        if 'cat' in img_path:
            label = 0
        else:
            label = 1
        datum = make_datum(img, label)
        in_txn.put('{:0>5d}'.format(in_idx), datum.SerializeToString())
        print '{:0>5d}'.format(in_idx) + ':' + img_path
in_db.close()


print '\nCreating validation_lmdb'

in_db = lmdb.open(validation_lmdb, map_size=int(1e12))
with in_db.begin(write=True) as in_txn:
    for in_idx, img_path in enumerate(train_data):
        if in_idx % 6 != 0:
            continue
        img = cv2.imread(img_path, cv2.IMREAD_GRAYSCALE)
        img = transform_img(img, img_width=IMAGE_WIDTH, img_height=IMAGE_HEIGHT)

        prec=int(img_path[(img_path.index('prec_')+5):(img_path.index('prec_')+8)])

        if prec>50:
            label = 1
        else:
            label = 0

        datum = make_datum(img, label)
        in_txn.put('{:0>5d}'.format(in_idx), datum.SerializeToString())
        print '{:0>5d}'.format(in_idx) + ':' + img_path
in_db.close()

print '\nFinished processing all images'
但我认为,根据训练结果,.mdb输出文件已损坏(可能是空的,甚至是47MB)

有人看到这个文件有问题吗?或者,给我一个关于构建lmdb文件的好教程的链接

非常感谢你的帮助!
谢谢

如果您想创建一个用于训练分类网络的
'lmdb'
图像数据集,请不要紧张!Caffe已经有了一个专门用于此目的的工具
您正在寻找
$CAFFE\u ROOT/build/tools/convert\u imageset
工具,您可以找到非常详细的(如果我可以这么说的话)教程。

好的,我解决了它! 在深入研究代码之后,我注意到我只更新了验证数据集的标签(并跳过了培训数据):P 在这段代码中可以看到:

 img = transform_img(img, img_width=IMAGE_WIDTH, img_height=IMAGE_HEIGHT)
        if 'cat' in img_path:
            label = 0
        else:
            label = 1
这属于原始教程


结论:如果您无法访问lmdb文件,可能是因为创建它的函数已损坏。

非常感谢。我开始构建一个新文件,然后发现了我的错误:P