2017-04-04 22 views
0

내 lmdb를 거대하게 만드는 대형 데이터 세트가 있습니다. 16.000 샘플의 경우 데이터베이스는 이미 20GB입니다. 그러나 전체적으로 나는 엄청난 양의 데이터로 끝날 800,000 개의 이미지를 가지고 있습니다. lmdb를 압축 할 수있는 방법이 있습니까? 아니면 HDF5 파일을 사용하는 것이 더 낫습니까? 누군가가이 문제에 대한 최선의 해결책을 알고 있는지 알고 싶습니다.lmdb에서 데이터를 압축하는 가장 좋은 방법은 무엇입니까

+0

caffe의 'convert_imageset'을 사용하여 이미지를 변환 했습니까? 그렇다면'--encoded' 매개 변수를 사용 했습니까? – lnman

+0

아니요, 데이터를 변경하고 변형해야하기 때문에 파이썬 코드를 사용하고 있습니다. @Inman – thigi

+0

어떻게 프로그래밍 방식으로 파일을 인코딩합니까? 내가하는 일은 :'vtxn.put ('{: 0> 10d}'. format (in_idx), datum.SerializeToString())'. 하지만 "압축"SerializeToString() 메서드를 사용할 수 없다고 생각합니까? @Inman – thigi

답변

2

ReadImageToDatum의 기능을 보면 io.cpp의 기능을 압축 (jpg/png) 형식이나 원시 형식으로 유지할 수 있습니다. 압축 된 형식을 사용하려면 cv::imencode을 사용하여로드 된 이미지를 압축 할 수 있습니다. 이제 데이터를 압축 된 데이터로 설정하고 encoded 플래그를 설정합니다. 그런 다음 데이터를 lmdb에 저장할 수 있습니다.

+0

인코딩 된 플래그를 어떻게 설정합니까? – thigi

+0

https://github.com/BVLC/caffe/blob/master/src/caffe/util/io.cpp#L133 – lnman

+0

파이썬에 사용 된'datum-> set_encoded (true);'datum.encoded = True ' – lnman

0

입력 크기를 줄이기위한 다양한 방법이 있지만 그 대부분은 응용 프로그램에 따라 다릅니다. 예를 들어, ILSVRC-2012 데이터 세트 이미지는 교육 시간 또는 모델 정확도에 지장없는 효과없이 약 256x256 픽셀로 조정할 수 있습니다. 이렇게하면 데이터 세트가 240Gb에서 40Gb로 줄어 듭니다. 간단한 "물리적"압축으로 데이터 세트의 충실도가 저하 될 수 있습니까? 얼마나 작은 데이터 세트가 있어야합니까?

HDF5 파일로 충분한 정보를 얻지 못한 것 같습니다.

+0

가능한 한 작고 가능한 한 빨리 작성하고 싶습니다. 그래서, 아마도이 두 가지 사이에서 최상의 트레이드 오프를 찾아야 할 것입니다. 압축 매개 변수를 설정할 수있는 순간에 HDF5 파일을 만들려고합니다. 그러나 분명히 압축이 좋을수록 데이터 집합을 생성하는 계산 시간이 길어집니다. 나는 png 형태로 자체 데이터 집합을 가지고있다. 나는 lmdb 또는 hdf5 또는 ** caffe **가 허용하는 다른 어떤 곳에 저장해야합니다. 하지만 먼저 사진을 처리해야하므로 원본 사진을 사용할 수 없습니다. 내 raw 이미지의 4GB가 lmdb로 전송 될 때 20GB가됩니다. @Prune – thigi

+0

첫 번째 질문을 무시하고 두 번째 질문을 "최선의 절충"으로 대체했습니다. 이것은 토론에 더할 나위없이 떠오르게합니다. – Prune

+0

음, 내 데이터 세트는 이미 압축되어 있습니다. 질문은 압축 된 데이터 집합을 어떻게 저장할 수 있는가하는 것이 었습니다. lmdb를 사용할 때 이전에 압축 된 데이터 세트가 훨씬 커집니다. lmdb는 어떤 종류의 압축도 사용하지 않기 때문입니다. 따라서 귀하의 질문에 대해 다소 혼란 스러웠습니다. @Prune – thigi