2016-08-25 2 views
1

현재 Caffe에서 3D 체적 데이터로 작업하고 있습니다. 전체적으로 볼 때 25 권이 있으며, 각 권에서 서브 볼륨을 가져 와서 컨볼 루션 네트워크를 통해 공급해야합니다. 문제는 수천 개의 볼륨이있을 수 있으며 현재 하드 디스크를 많이 사용하는 hdf5 파일에 저장하는 것입니다. 또한 일부 데이터 확장 작업을 수행 할 계획이므로 훈련을 차단하지 않고 별도의 스레드에서 데이터를로드하기 위해 프리 페치 기술을 사용하는 것이 더 좋습니다.Caffe의 별도 스레드에서 데이터를 프리 페치

dataqueue=Queue 
pool = Pool(processes=3) 

#here I want to do this in groups of say 3 because each volume is very big 

for idx,namepatient in enumerate(patients): 
    pool.apply_async(workerv1,args=(idx,namepatient,path_patients,volsz,destres,samplesperpatient,dirname)) 

for i in xrange(iterations): 
    net.blobs['data'].data[0:sizebatch,...] =dataqueue.get() 
    solver.step(1) 

그래서 기본적으로 내가 큐에 데이터를 공급 유지 일부 스레드를 원하지만 훈련을 위해 메인 스레드를 차단하지 않고 : 나는 이런 식으로 뭔가를 할 수 있습니다. 데이터를 공급하는 스레드에서 가능한 경우 서브 볼륨 샘플링 및 기능 보강을 수행해야합니다. 아무도 나를 구현하는 방법을 안내 할 수 있습니다. 이 예제는 https://github.com/rbgirshick/py-faster-rcnn/blob/master/lib/roi_data_layer/layer.py입니다. 그러나 하나의 이미지 만로드하여 큐에 넣습니다. 미리 감사드립니다.

답변

1

여러 개의 서브 볼륨을 한꺼번에 처리하려는 경우 트라이닝을위한 별도의 스레드와 데이터 프리 페칭 및 기능 보강을위한 별도의 다목적 풀을 시작할 수 있습니다. 내 설명이 좀 간결 할 수도 있습니다. 완료된 방법을 자세히 알고 싶다면 LRCN Video Data을 살펴볼 수 있습니다.

0

Caffe에는 기본 스레드가 교육을 수행하는 동안 데이터를 병렬로 프리 페치하는 내장 된 프리 페치 스레드가 있습니다. include 및 src의 base_data_layer 및 internal_thread 파일 내부에 구현됩니다. 이 프리 페치는 대부분의 응용 프로그램에서 잘 작동한다고 생각하지만 필요한 경우 다른 볼륨에 대해 더 많은 프리 페치 스레드를 생성 할 수 있습니다.

관련 문제