caffe
교육을위한 데이터 준비
수색…
이미지 분류 작업을위한 이미지 데이터 세트 준비
Caffe는 이미지 분류 작업 (즉, 입력 이미지 당 단일 정수 레이블)에 맞게 조정 된 입력 레이어를 기본 제공합니다. 이 "Data" 입력 레이어는 lmdb 또는 leveldb 데이터 구조를 기반으로합니다. "Data" 레이어를 사용하려면 모든 교육 데이터로 데이터 구조를 구성해야합니다.
Caffe의 convert_imageset 대한 빠른 가이드
짓다
가장 먼저해야 할 일은 caffe와 caffe의 도구를 만드는 것입니다 (convert_imageset 은 이러한 도구 중 하나입니다). caffe를 설치하고
make 를 한 후에 make tools 를 실행했는지 확인하십시오. $CAFFE_ROOT/build/tools 에 이진 파일 convert_imageset 이 만들어 졌는지 확인하십시오. 데이터 준비
이미지 : 모든 이미지를 폴더에 넣으십시오 (여기서는/path/to/jpegs/ 부름). 레이블 : 입력 이미지 <path / to / file>에 따라 텍스트 파일 (예 :
/path/to/labels/train.txt )을 만듭니다. 예 : img_0000.jpeg 1
img_0001.jpeg 0
img_0002.jpeg 0
이 예제에서 첫 번째 이미지는 1 로 표시되고 나머지 두 이미지는 0 으로 표시됩니다.
데이터 세트 변환
쉘에서 바이너리 실행하기~$ GLOG_logtostderr=1 $CAFFE_ROOT/build/tools/convert_imageset \
--resize_height=200 --resize_width=200 --shuffle \
/path/to/jpegs/ \
/path/to/labels/train.txt \
/path/to/lmdb/train_lmdb
설명 된 명령 행 :
- 호출 전에
GLOG_logtostderr플래그가 1로 설정됩니다.convert_imageset은 로그 메시지를 stderr로 리디렉션하는 로깅 메커니즘을 나타냅니다. -
--resize_height및--resize_width모든 입력 이미지의 크기를 동일한 크기 (200x200로 조정 합니다 . -
--shuffle임의로 이미지 순서를 변경하고/path/to/labels/train.txt파일에서 순서를 유지하지 않습니다. - 다음은 images 폴더, 레이블 텍스트 파일 및 출력 이름에 대한 경로입니다.
convert_imageset을 호출하기 전에 출력 이름이 존재해서는 안되며, 그렇지 않으면 무서운 오류 메시지가 나타납니다.
유용한 다른 플래그들 :
-
--backend-lmdb데이터 세트 또는levelDB중에서 선택할 수 있습니다. -
--gray- 모든 이미지를 그레이 스케일로 변환합니다. -
--encoded와--encoded_type- 이미지 데이터를 인코딩 된 (jpg / png) 압축 형식으로 데이터베이스에 보관합니다. -
--help- 몇 가지 도움말을 표시합니다. Flags from tools / convert_imageset.cpp에있는 모든 관련 플래그를 참조하십시오.
당신은 확인하실 수 있습니다 $CAFFE_ROOT/examples/imagenet/convert_imagenet.sh 사용하는 방법에 대한 예 convert_imageset .
자세한 내용은 이 스레드 를 참조하십시오.
임의의 데이터를 HDF5 형식으로 준비하십시오.
이미지 분류 데이터 세트 외에도 Caffe는 임의 입력을위한 "HDF5Data" 레이어를 가지고 있습니다. 이 계층에서는 모든 교육 / 유효성 검사 데이터를 hdf5 형식 파일에 저장해야합니다.
이 예제는 python h5py 모듈을 사용하여 hdf5 파일을 생성하는 방법과 caffe "HDF5Data" 계층에서 파일을 읽는 방법을 보여줍니다.
hdf5 바이너리 파일 만들기
이미지 파일 이름과 회귀 대상으로 사용할 단일 부동 소수점 숫자가있는 각 줄이있는'train.txt' 텍스트 파일이 있다고 가정합니다. import h5py, os
import caffe
import numpy as np
SIZE = 224 # fixed size to all images
with open( 'train.txt', 'r' ) as T :
lines = T.readlines()
# If you do not have enough memory split data into
# multiple batches and generate multiple separate h5 files
X = np.zeros( (len(lines), 3, SIZE, SIZE), dtype='f4' )
y = np.zeros( (1,len(lines)), dtype='f4' )
for i,l in enumerate(lines):
sp = l.split(' ')
img = caffe.io.load_image( sp[0] )
img = caffe.io.resize( img, (SIZE, SIZE, 3) ) # resize to fixed size
# you may apply other input transformations here...
# Note that the transformation should take img from size-by-size-by-3 and transpose it to 3-by-size-by-size
X[i] = img
y[i] = float(sp[1])
with h5py.File('train.h5','w') as H:
H.create_dataset( 'X', data=X ) # note the name X given to the dataset!
H.create_dataset( 'y', data=y ) # note the name y given to the dataset!
with open('train_h5_list.txt','w') as L:
L.write( 'train.h5' ) # list all h5 files you are going to use
"HDF5Data" 레이어 구성
모든 h5 파일과 해당 테스트 파일이 나열 train_val.prototxt HDF5 입력 레이어를 추가 할 수 있습니다. layer {
type: "HDF5Data"
top: "X" # same name as given in create_dataset!
top: "y"
hdf5_data_param {
source: "train_h5_list.txt" # do not give the h5 files directly, but the list.
batch_size: 32
}
include { phase:TRAIN }
}
위의 그림과 같이 Caffe에 HDF5 파일 목록을 전달합니다. 현재 버전에서는 단일 HDF5 데이터 파일의 크기 제한이 2GB이기 때문입니다. 따라서 교육 데이터가 2GB를 초과하는 경우 별도의 파일로 분할해야합니다.
단일 HDF5 데이터 파일이 2GB를 초과하면 다음과 같은 오류 메시지가 표시됩니다.
Check failed: shape[i] <= 2147483647 / count_ (100 vs. 71) blob size exceeds INT_MAX
총 데이터 양이 2GB 미만인 경우 데이터를 별도의 파일로 분할해야합니까?
Caffe 소스 코드 의 주석에 따르면 단일 파일이 더 좋을 것이라고합니다.
shuffle == true이면 HDF5 파일의 순서가 섞여서 지정된 HDF5 파일 내의 데이터 순서가 바뀌지 만 다른 파일 사이의 데이터는 인터리브되지 않습니다.