Actuellement, je travaille avec des données volumétriques 3D avec Caffe en Python. Au total, j'ai 25 volumes, et à partir de chacun, je dois prendre des sous-volumes, et les nourrir à travers un réseau convolutif. Le problème est qu'il pourrait y avoir des milliers de ces volumes, et actuellement je les sauvegarde dans des fichiers hdf5, ce qui fonctionne bien mais utilise beaucoup de disque dur. Aussi, je prévois de faire une augmentation des données à la volée, donc je pense qu'il est préférable d'utiliser une technique de prélecture afin de charger les données dans un thread séparé sans bloquer l'entraînement. Je veux quelque chose comme ceci:Prefetch données dans un fil séparé dans 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)
Donc, fondamentalement, je veux des fils qui maintiennent l'alimentation des données à la file d'attente, mais sans bloquer le thread principal pour faire la formation. Dans les fils de données d'alimentation, je devrais faire l'échantillonnage et l'augmentation du sous-volume si possible. Quelqu'un pourrait-il me guider sur la façon de mettre en œuvre cela. J'ai vérifié cet exemple https://github.com/rbgirshick/py-faster-rcnn/blob/master/lib/roi_data_layer/layer.py mais il ne charge qu'une image et la place dans la file d'attente. Merci d'avance.