2016-07-09 3 views
1

간단한 의미 이미지 세분화 작업 (즉, 이미지의 각 픽셀을 2 개의 클래스 중 하나에 속하는 것으로 분류)에 Caffe를 사용하려고합니다.Caffe : 시멘틱 세분화를 위해 이미지 데이터를로드하는 방법

두 가지 문제가 있습니다. 1) 데이터 준비, 2) 네트워크 계층 정의.

몇 가지 예를 읽으려고했습니다. Labels in Caffe as Images

  • How to feed caffe multi label data in HDF5 format?
  • 링크가 유용하지만, 그들은 특히 2D 이미지와 의미 론적 분할에 적용되지 않습니다

    • .

      나는 극단적으로 매끄러운 파이프 라인에서 다음과 같은 사항에 대해 (심지어 간단한) 코드 예제를 부탁드립니다 :

      1. 가 올바른 형식으로 이미지 라벨 (2 차원 배열)을 준비합니다. MemoryData 또는 HDF5를 입력으로 사용하는 예제가 완벽 할 것입니다!
      2. 데이터 및 위의 레이블을 입력하려면 네트워크 프로토 타입을 올바르게 정의하십시오.

      고마워요!

    답변

    2

    아직이 책의 Caffe 마스터 스레드에은 없지만 Caffe에서 의미 론적 세분화에 대한 자습서가 많이 있습니다. 처음에는 Fully Convolutional Networks mastertutorial on using SegNet (GitHub는 별도로 here) 또는 DeepLab을 사용하여 자습서를 조사해야합니다. 이것들은 의미 론적 세분화를 위해 Caffe를 사용하는 최첨단 방법입니다.

    더 직접적으로 귀하의 질문에 대답하기 위해,

    1) 데이터 준비 : 최근 깊은 학습 방법에 관심을 보여이있는 사용자로 , 당신은 아마 데이터를 수행 할 하나 개의 방법이 없다는 것을 발견 할 것이다 예비. 그것들은 수학적으로 가능한 것 (결국 완전히 연결된 레이어를 가진 네트워크는 같은 비율의 이미지와 보통 같은 크기를 필요로합니다)과 성능 (평균 빼기)을 향상시키는 것에 모두 의존합니다. 즉, 평범한 몇 가지 기술이 있습니다 (전체 컨벌루션 네트워크와 같이 다양한 저울의 이미지를 사용할 수 있음을 간략히하기 위해이 지점에서 가정합니다. 자르기가 어떻게 작동하는지 알고 싶다면 좋은 점이 있습니다. Caffe의 ImageNet 튜토리얼에서 데이터 준비의 유형에 대한 설명). Transformer 클래스를 사용하여, 대부분의 사람들이 다음을 수행하십시오 분할의 맥락에서

    transformer.set_transpose('data', (2,0,1)) # move image channels to outermost dimension 
    transformer.set_mean('data', mu)   # subtract the dataset-mean value in each channel 
    transformer.set_raw_scale('data', 255)  # rescale from [0, 1] to [0, 255] 
    transformer.set_channel_swap('data', (2,1,0)) # swap channels from RGB to BGR 
    

    , 즉 당신이해야 할 모든 것입니다. 시맨틱 레이블은 이미지 자체 (일반적으로)의 형태입니다. 예를 들어, 파스칼 VOC CAFFE 예, 당신은 ** 네트워크 계층에 대한 정의는

    가 기억

    n.data, n.label = L.Python(module = 'pascal_multilabel_datalayers', layer = datalayer, ntop = 2, param_str=str(data_layer_params)) 
    

    ** 2) 네트워크 계층 정의로 라벨에 읽어 신경에 대한 화려한 비트 중 하나 네트워크는 입력 및 출력을 제외하고 다양한 데이터 유형을 처리 할 수 ​​있습니다. 따라서 중간 레이어는 모두 같고 실제로는 입력이 동일합니다.결국 당신이 필요로하는 것은 이미지에 대한 교차 엔트로피 손실을 평가하는 것입니다. DeepLab 들어, 그들은 이것을 수행 "Interp" layer 썼습니다. 한편 SegNet은 "Upsample" layer type이라고 썼습니다. softmax 전에 네트워크 출력을 레이블과 동일한 크기로 만들려면 simply use a Softmax

    나는이 모든 것에 단점을 가지고 있다고 생각합니다. 명확하게 Caffe에서 이것을 올바르게 수행하는 명확한 방법이지만, 좋은 점은 성공적으로 수행 된 많은 예제가 있다는 것입니다. 희망이 도움이