Caffe crop

5260 단어 Caffe
다음은 간단한 예로 소개합니다.
[python] view plain
copy
print ?
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  
  }  
}  
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는 거울을 만들어 작은 데이터 집합의 부족함을 보완할 수 있다.
여기서 크랩에 대해서 중점을 두고크기 훈련층과 테스트층의 차이점:
우선 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 참조):
[python] view plain
copy
print ?
//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;  
    }  
  }  
//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 모드일 때는 이미지의 중간 영역만 트림됩니다.

  • 다음은 내가 인터넷에서 찾은 내가 그림을 재단하는 프로그램이다.
    제공된 웹 주소와 함께 자세히 볼 수 있습니다.http://blog.csdn.NET/u011762313/article/details/48343799
    우리는 수동으로 그림을 재단하여pycaffe에 가져올 수 있으며 식별률을 높일 수 있다(pycaffe는caffemodel을 이용하여 분류할 수 있다: 이 단계는 다음과 같다).
    [python] view plain
    copy
    print ?
    #분류확률분포기록pridects = np.zeros((1, CLASS_NUM))  
      
    # 이미지 차원(두께, 폭)img_shape = np.array(img.shape)  
    # 자르기 크기(H, W)crop_dims = (32, 96)  
    crop_dims = np.array(crop_dims)  
    # 여기에 사용된 그림의 높이는 모두 32로 고정되며, 길이는 96으로 가변적이다.
    # 자르기 시작 0, 끝 wrange  
    w_range = img_shape[1] - crop_dims[1]  
    #왼쪽에서 오른쪽으로 한 번 자르고 오른쪽에서 왼쪽으로 한 번 자르면 보폭은 96/4=24for k in range(0, w_range + 1, crop_dims[1] / 4) + range(w_range, 1, -crop_dims[1] / 4):  
    # 이미지 자르기    crop_img = img[:, k:k + crop_dims[1], :]  
    # 데이터 입력, 사전 처리    net.blobs[’data’].data[…] = transformer.preprocess(‘data’, crop_img)  
    # 전방향 교체, 즉 분류    out = net.forward()  
    # 분류마다 확률 분포 중첩    pridects += out[’prob’]  
      
    # 가장 큰 확률로 최종 결과 분포pridect = pridects.argmax()  
    # 
    pridects = np.zeros((1, CLASS_NUM))
    
    
    
    
    
    

    # 이미지 차원(높음, 넓이)imgshape = np.array(img.shape) #자르기의 크기(높음, 넓이) cropdims = (32, 96) crop_dims = np.array(crop dims)# 여기에 사용된 그림의 높이는 모두 32로 고정되어 있으며 길이는 변할 수 있습니다. 최소 96# 재단 기점은 0이고 끝점은 w 입니다.range w_range = img_shape[1] - crop_dims[1] # 왼쪽에서 오른쪽으로 한 번 자르고 오른쪽에서 왼쪽으로 한 번 자르면 96/4=24 for k in range(0, w range + 1, crop dims[1]/4) + range(w range, 1, -crop dims[1]/4): # 이미지 커팅 cropimg = img[:,k:k + crop dims[1],:] # 데이터 입력, 사전 처리 net.blobs['data'].data[...] = transformer.preprocess('data', crop img) # 전방향 교체, 즉 분류out = net.forward () # 매번 분류, 확률 분포 중첩pridects + = out ['prob'] # 최대 확률 분포 최종 결과pridect = pridects.argmax()
  • caffe에서 샘플링 방법 제공(oversample), 자세한 내용은/caffe/python/caffe/io.py, 재단한 것은 그림의 중앙, 4개의 각과 거울 총 10장의 그림이다.

  • 주: 그림이 너무 크면,
    적당히 줄여야 하는batch크기 값입니다. 그렇지 않으면 GPU를 사용할 때 캐시 크기를 초과하여 오류가 발생할 수 있습니다.

    좋은 웹페이지 즐겨찾기