久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

Caffe 中LMDB接口處理多標(biāo)簽(Multi

 mscdj 2016-09-29

Caffe的數(shù)據(jù)接口主要有原始圖像(ImageData), HDF5, LMDB/LevelDB,。由于Caffe自帶的圖像轉(zhuǎn)LMDB接口只支持但label,對于多l(xiāng)abel的任務(wù),,往往需要使用HDF5,。

然而,Caffe對于HDF5的數(shù)據(jù),,需要預(yù)先讀取整個h5文件,,這對于小數(shù)據(jù)的情況不成問題,,而且一次性讀到內(nèi)存里還節(jié)省訓(xùn)練中的IO開銷??墒菍τ跀?shù)據(jù)量大的情況,,內(nèi)存可能放不下整個h5文件,則需要劃分成幾個小的h5文件,??蛇@樣的實現(xiàn)一方面不優(yōu)雅,另一方面訓(xùn)練中需要不停地輪流讀取h5文件,。一種可能的解決方案是把圖像數(shù)據(jù)放到lmdb,,label數(shù)據(jù)放到h5文件,prototxt里面label和data分別來自兩個data layer,??墒莻€人覺得這樣的實現(xiàn)也不好看,畢竟代碼里面要做HDF5和LMDB的存儲,。

最近從網(wǎng)上看到一種更直接的方法,,大致是結(jié)合Python的LMDB庫和Caffe的Python 接口 caffe.io.array_to_datum,把圖像數(shù)據(jù)和label,分別存儲到兩個lmdb文件,。而對于存儲好的lmdb,,又怎樣寫prototxt里面的datalayer來讀取呢?目前caffe的datalayer, 指明了LMDB作為backend的話,,默認(rèn)第一個top就是存儲lmdb時datum的data,,第二個top就是datum的label,在下面的代碼里沒有指定datum的label,,因此,,對于data和label的lmdb,分別寫一個datalayer, 每個datalayer的第一個top就是對應(yīng)lmdb里的內(nèi)容了,。而top的blob的名字是可以自己定義的。
代碼如下:

  1. def write_lmdb(image_name_list,label_array,lmdb_img_name,lmdb_label_name,resize_image = False):
  2. for lmdb_name in [lmdb_img_name, lmdb_label_name]:
  3. db_path = os.path.abspath(lmdb_name)
  4. if os.path.exists(db_path):
  5. shutil.rmtree(db_path)
  6. counter_img = 0
  7. counter_label = 0
  8. batchsz = 100
  9. fail_cnt = 0
  10. print("Processing {:d} images and labels...".format(len(image_name_list)))
  11. for i in xrange(int(np.ceil(len(image_name_list)/float(batchsz)))):
  12. image_name_batch = image_name_list[batchsz*i:batchsz*(i+1)]
  13. label_batch = label_array[batchsz*i:batchsz*(i+1),:]
  14. print label_batch[np.newaxis,np.newaxis,0].dtype
  15. raw_input('r')
  16. imgs, labels = [], []
  17. for idx,image_name in enumerate(image_name_batch):
  18. img = skimage.io.imread(image_name)
  19. if resize_image==True:
  20. img = skimage.transform.resize(img,(96,96))
  21. imgs.append(img)

  22. db_imgs = lmdb.open(lmdb_img_name, map_size=1e12)
  23. with db_imgs.begin(write=True) as txn_img:
  24. for img in imgs:
  25. datum = caffe.io.array_to_datum(np.expand_dims(img, axis=0))
  26. txn_img.put("{:0>10d}".format(counter_img), datum.SerializeToString())
  27. counter_img += 1
  28. print("Processed {:d} images".format(counter_img))
  29. db_labels = lmdb.open(lmdb_label_name, map_size=1e12)
  30. with db_labels.begin(write=True) as txn_label:
  31. for idx in range(label_batch.shape[0]):
  32. datum = caffe.io.array_to_datum(label_batch[np.newaxis,np.newaxis,idx])
  33. txn_label.put("{:0>10d}".format(counter_label), datum.SerializeToString())
  34. counter_label += 1
  35. print("Processed {:d} labels".format(counter_label))
  36. print fail_cnt,'images fail reading'
  37. db_imgs.close()
  38. db_labels.close()

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,,所有內(nèi)容均由用戶發(fā)布,,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式,、誘導(dǎo)購買等信息,,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,,請點擊一鍵舉報,。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多