caffe에서 DATA 레이어 crop크기 해석
2684 단어 CAFFE
layer {
name: "data"
type: "Data"
top: "data"
top: "label"
include {
phase: TRAIN
}
transform_param {
mirror: true
crop_size: 600
mean_file: "examples/images/imagenet_mean.binaryproto"
}
data_param {
source: "examples/images/train_lmdb"
batch_size: 256
backend: LMDB
}
}
layer {
name: "data"
type: "Data"
top: "data"
top: "label"
include {
phase: TEST
}
transform_param {
mirror: false
crop_size: 600
mean_file: "examples/images/imagenet_mean.binaryproto"
}
data_param {
source: "examples/images/val_lmdb"
batch_size: 50
backend: LMDB
}
}
위의 데이터층의 정의에서 거울과crop 을 사용한 것을 알 수 있다size, mean 도 정의했습니다file. crop을 이용하여사이즈 이런 방식은 중심의 관심점과 모서리 특징을 잘라낼 수 있고mirror는 거울을 만들어 작은 데이터 집합의 부족함을 보완할 수 있다.여기서 크랩에 대해서 중점을 두고size는 훈련층과 테스트층의 차이점: 우선 mean 을 알아야 한다.file 및 crop사이즈는 상관없어요.mean_file는 훈련집 사진에 따라 제작된,crop사이즈는 트레이닝 세트 이미지를 재단하는 것으로 두 가지 모두 원시적인 트레이닝 세트 이미지를 처리한다.원본 트레이닝 이미지의 크기가 800*800이면cropsize 이미지가 600*600이면 meanfile 및 cropsize의 그림은 모두 800*800의 그림집입니다.카페에서 crop 을 정의했다면size, 그럼train에서crop보다 크게크기의 그림은 무작위로 편집되며 테스트에서 중간 부분만 캡처합니다 (자세한 내용은/caffe/src/caffe/data transformer.cpp 참조):
//We only do random crop when we do training.
if (phase_ == TRAIN) {
h_off = Rand(datum_height - crop_size + 1);
w_off = Rand(datum_width - crop_size + 1);
} else {
h_off = (datum_height - crop_size) / 2;
w_off = (datum_width - crop_size) / 2;
}
}
상술한 코드에서 알 수 있듯이 만약에 우리가 입력한 그림의 크기가crop 보다 크다면사이즈, 그럼 그림이 잘려요.phase 모드가 TRAIN일 경우 트림은 무작위로 트림되지만 TEST 모드일 때는 이미지의 중간 영역만 트림됩니다.