2014-12-12 2 views
14

두 개의 입력 이미지와 레이블 (나중에는 다른 데이터)을 받아들이는 Caffe CNN을 구현하고 있으며,이를 위해 prototxt 파일에 올바른 구문을 알고 있는지 궁금해하고 있습니까? 추가 상단이있는 IMAGE_DATA 레이어입니까? 또는 각각에 대해 별도의 IMAGE_DATA 레이어를 사용해야합니까?Caffe Multiple Input Images

감사합니다, 제임스

+1

이것을 알아 냈습니까? 그렇다면 답변을 게시하십시오. – Shai

+0

두 개의 이미지를 두 배로 간주 했습니까? – Frazer

+0

@ james-sergeant 아마도 당신은 대답을 받아 들일 수 있습니까? RusellStewart의 답변은 훌륭합니다. – Jonathan

답변

12

편집 : 나는 이것을 위해 최근에 HDF5_DATA 층을 사용하고있다 그리고 그것은 확실히 갈 방법입니다.

HDF5는 키 값 저장소이며 각 키는 문자열이며 각 값은 다차원 배열입니다. 따라서 HDF5_DATA 레이어를 사용하려면 사용하려는 각 윗면에 새 키를 추가하고 사용하려는 이미지를 저장하기 위해 해당 키의 값을 설정하십시오. 파이썬에서 이러한 HDF5 파일을 작성하는 것은 간단하다

import h5py 
import numpy as np 

filelist = [] 
for i in range(100): 
    image1 = get_some_image(i) 
    image2 = get_another_image(i) 
    filename = '/tmp/my_hdf5%d.h5' % i 
    with hypy.File(filename, 'w') as f: 
     f['data1'] = np.transpose(image1, (2, 0, 1)) 
     f['data2'] = np.transpose(image2, (2, 0, 1)) 
    filelist.append(filename) 
with open('/tmp/filelist.txt', 'w') as f: 
    for filename in filelist: 
     f.write(filename + '\n') 

그런 다음 단순히 '/tmp/filelist.txt을', 그리고 '데이터 1'과 '데이터 2 "로 정상을 설정 HDF5_DATA의 PARAM의 소스를 설정합니다. =================================

:

나는 아래의 원래의 응답을 떠날거야 ===================

이렇게하는 좋은 방법이 두 가지 있습니다. 가장 쉬운 방법은 두 개의 개별 IMAGE_DATA 레이어를 사용하는 것입니다. 하나는 첫 번째 이미지와 레이블, 두 번째 이미지는 두 번째 이미지입니다. Caffe는 키 값 저장소 인 LMDB 또는 LEVELDB에서 이미지를 검색하고, 동일한 정수 ID 키를 갖는 해당 이미지로 두 개의 데이터베이스를 작성한다고 가정하면 Caffe는 실제로 이미지를 올바르게로드합니다. 데이터/두 레이어의 레이블.

이 접근법의 문제점은 두 개의 데이터 레이어를 사용하는 것이 실제로 만족스럽지 않고 경계 상자 등의 경우 정수가 아닌 라벨을 사용하는 것과 같은 고급 작업을 수행하려는 경우 매우 잘 확장되지 않는다는 것입니다. 이 작업에 시간을 할애 할 준비가 되었다면 tools/convert_imageset.cpp 파일을 수정하여 이미지 또는 다른 데이터를 여러 채널에 쌓을 수 있습니다. 예를 들어 첫 번째 이미지 RGB의 첫 번째 이미지 3 개와 두 번째 이미지 RGB의 두 번째 이미지 인 6 개의 채널로 데이 텀을 생성 할 수 있습니다. IMAGE_DATA 레이어를 사용하여 이것을 읽은 후에는 slice_dim = 1 차원을 따라 인덱스 3에있는 slice_point가있는 SLICE 레이어를 사용하여 스트림을 두 개의 이미지로 나눌 수 있습니다. 더 멀리 나아가려면 더 복잡한 데이터 모음을로드하기로 결정 했으므로 인코딩 체계를 이해하고 src/caffe/layers/data_layer.cpp를 기반으로하는 자체 디코딩 레이어를 작성하여 완벽하게 제어 할 수 있습니다 파이프 라인의

+0

고마워요! 나는 그 접근법에 동의한다. 둘째로, 다른 크기의 이미지가 있다면 어떨까요? 그래서 저는 그것들을 다른 채널에 쌓을 수는 없습니다, 맞습니까? – RockTheStar

+0

크기가 2GB를 초과하는 hdf5 데이터를로드 할 수 없습니다! – curio1729

2

여러 개의 "상단"이있는 HDF5_DATA 레이어를 사용하는 것도 좋습니다