Caffe 中 Python 生成 lmdb 文件过大,而且不收敛?

2017-09-21 00:13:22 +08:00
 Hzzone

CASIA-WebFace 4 个 g 的人脸数据,在我生成普通的分类数据集之后,生成的 lmdb 文件有 70 个 g,这是不是很不正常?
另外是,cv2.resize 之后的图片,只有 lmdb,为什么不会收敛呢,而我如果用自带的 tool 是可以的?
放几行关键代码,希望各位可以指点一二:

def generate_ordinary_lmdb(source, target, IMAGE_SIZE=227):
    env = lmdb.Environment(target, map_size=int(1e12))
    with env.begin(write=True) as txn:
        for label, person in enumerate(os.listdir(source)):
            person_dir = os.path.join(source, person)
            one_person_samples = os.listdir(person_dir)
            for im_files in one_person_samples:
                s = os.path.join(person_dir, im_files)
                datum = caffe.proto.caffe_pb2.Datum()
                datum.channels = 3
                datum.height = IMAGE_SIZE
                datum.width = IMAGE_SIZE
                sample = preprocess.process(s, IMAGE_SIZE)
                datum.data = sample.tobytes()
                datum.label = label
                str_id = "%s" % s
                print str_id
                txn.put(str_id, datum.SerializeToString())
            print "--------"
def process(source, IMAGE_SIZE=227):
    im = cv2.imread(source)
    im = cv2.resize(im, (IMAGE_SIZE, IMAGE_SIZE))
    # plt.imshow(im)
    # plt.show()
    im = im[:, :, ::-1]  # RGB TO BGR
    im = im.transpose((2, 0, 1))  # X1*X2*3 TO 3*X1*X2
    return im
1903 次点击
所在节点    机器学习
2 条回复
mingran
2017-09-21 08:39:02 +08:00
正常,人脸,图像矩阵经过了 jpg 压缩

我的理解 lmdb 是 berkleyDB 的近亲,属于[key-value]型数据库
得把图像矩阵变成字符存储,不做任何压缩。( 你走进 sample.tobytes() 看看详细 )
文件大到令人发指可以理解。


不收敛,跟用什么 DB 没关系。
mingran
2017-09-21 08:43:21 +08:00
https://docs.scipy.org/doc/numpy-1.13.0/reference/generated/numpy.ndarray.tobytes.html


我不搞 Caffe 很久了。神烦 Caffe 数据输入的那些 layer。。。楼主要是看到好的总结文章,给我共享一份。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/392412

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX