खोज…


छवि वर्गीकरण कार्य के लिए छवि डेटासेट तैयार करें

कैफ में एक बिल्ड-इन इनपुट परत है जो छवि वर्गीकरण कार्यों (यानी, इनपुट छवि प्रति एकल पूर्णांक लेबल) के लिए सिलवाया गया है। यह इनपुट "Data" परत एक या डेटा संरचना पर बनाया गया है। "Data" परत का उपयोग करने के लिए सभी प्रशिक्षण डेटा के साथ डेटा संरचना का निर्माण करना होगा।

Caffe के convert_imageset लिए एक त्वरित मार्गदर्शिका

बिल्ड

पहली बात जो आपको करनी चाहिए वह है convert_imageset और convert_imageset के उपकरण ( convert_imageset इन उपकरणों में से एक है)।
कैफ स्थापित करने और आईएनजी make बाद यह सुनिश्चित करें कि आप make tools दौड़े।
सत्यापित करें कि एक बाइनरी फ़ाइल convert_imageset $CAFFE_ROOT/build/tools में बनाई गई है।

अपना डेटा तैयार करें

छवियां: सभी छवियों को एक फ़ोल्डर में रखें (मैं इसे यहां /path/to/jpegs/ ) पर कॉल करूंगा।
लेबल: एक पाठ फ़ाइल बनाएँ (उदाहरण के लिए, / path/to/ /path/to/labels/train.txt / /path/to/labels/train.txt ) प्रति इनपुट छवि <पथ / से / फ़ाइल> के साथ एक पंक्ति। उदाहरण के लिए:

img_0000.jpeg 1
img_0001.jpeg 0
img_0002.jpeg 0

इस उदाहरण में पहली छवि को 1 लेबल किया गया है जबकि अन्य दो को 0 लेबल किया गया है।

डेटासेट में कनवर्ट करें

बाइनरी को शेल में चलाएं

~$ GLOG_logtostderr=1 $CAFFE_ROOT/build/tools/convert_imageset \
    --resize_height=200 --resize_width=200 --shuffle  \
    /path/to/jpegs/ \
    /path/to/labels/train.txt \
    /path/to/lmdb/train_lmdb

कमांड लाइन समझाया:

  • GLOG_logtostderr ध्वज को कॉल करने से पहले 1 पर सेट कर दिया जाता है convert_imageset लॉग संदेश को stderr पर पुनर्निर्देशित करने के लिए लॉगिंग तंत्र को इंगित करता है।
  • --resize_height और --resize_width सभी इनपुट छवियों को समान आकार 200x200 आकार देते हैं।
  • --shuffle बेतरतीब ढंग से छवियों के क्रम को बदलते हैं और /path/to/labels/train.txt फ़ाइल में आदेश को संरक्षित नहीं करते हैं।
  • इमेज फोल्डर, लेबल्स टेक्स्ट फाइल और आउटपुट नाम के रास्ते निम्नलिखित हैं। ध्यान दें कि आउटपुट नाम convert_imageset को कॉल करने से पहले मौजूद नहीं होना चाहिए अन्यथा आपको एक डरावना त्रुटि संदेश मिलेगा।

अन्य झंडे जो उपयोगी हो सकते हैं:

  • --backend - आपको एक lmdb डेटासेट या levelDB बीच चयन करने की अनुमति देता है।
  • --gray - सभी छवियों को ग्रे स्केल में परिवर्तित करें।
  • --encoded और --encoded_type - डेटाबेस में छवि डेटा को एन्कोडेड (jpg / png) संकुचित रूप में रखें।
  • --help - कुछ मदद दिखाता है, उपकरण / Convert_imageset.cpp से झंडे के तहत सभी संबंधित झंडे देखें

आप एक उदाहरण के लिए $CAFFE_ROOT/examples/imagenet/convert_imagenet.sh जाँच कर सकते हैं कि कैसे convert_imageset का उपयोग किया convert_imageset

अधिक जानकारी के लिए इस धागे को देखें।

HDF5 प्रारूप में मनमाना डेटा तैयार करें

छवि वर्गीकरण डेटासेट के अलावा, कैफ के पास "HDF5Data" परत भी है जो मनमानी इनपुट के लिए है। इस लेयर के लिए सभी प्रशिक्षण / सत्यापन डेटा को प्रारूप फाइलों में संग्रहीत किया जाना है।
यह उदाहरण दिखाता है कि इस तरह के एचडीएफ 5 फ़ाइल के निर्माण के लिए अजगर h5py मॉड्यूल का उपयोग कैसे करें और उस फ़ाइल को पढ़ने के लिए "HDF5Data" परत को कैसे सेटअप करें।

एचडीएफ 5 बाइनरी फाइल का निर्माण करें

मान लें कि आपके पास प्रत्येक फ़ाइल 'train.txt' साथ एक पाठ फ़ाइल 'train.txt' जिसमें एक छवि फ़ाइल नाम और एक एकल फ़्लोटिंग पॉइंट संख्या है जिसे प्रतिगमन लक्ष्य के रूप में उपयोग किया जा सकता है।

import h5py, os
import caffe
import numpy as np

SIZE = 224 # fixed size to all images
with open( 'train.txt', 'r' ) as T :
    lines = T.readlines()
# If you do not have enough memory split data into
# multiple batches and generate multiple separate h5 files
X = np.zeros( (len(lines), 3, SIZE, SIZE), dtype='f4' ) 
y = np.zeros( (1,len(lines)), dtype='f4' )
for i,l in enumerate(lines):
    sp = l.split(' ')
    img = caffe.io.load_image( sp[0] )
    img = caffe.io.resize( img, (SIZE, SIZE, 3) ) # resize to fixed size
    # you may apply other input transformations here...
    # Note that the transformation should take img from size-by-size-by-3 and transpose it to 3-by-size-by-size
    X[i] = img
    y[i] = float(sp[1])
with h5py.File('train.h5','w') as H:
    H.create_dataset( 'X', data=X ) # note the name X given to the dataset!
    H.create_dataset( 'y', data=y ) # note the name y given to the dataset!
with open('train_h5_list.txt','w') as L:
    L.write( 'train.h5' ) # list all h5 files you are going to use

"HDF5Data" परत को कॉन्फ़िगर करना

एक बार जब आपके पास सभी h5 फाइलें और उन्हें सूचीबद्ध करने वाली संबंधित परीक्षण फाइलें होती हैं, तो आप अपने train_val.prototxt इनपुट परत जोड़ सकते हैं:

 layer {
   type: "HDF5Data"
   top: "X" # same name as given in create_dataset!
   top: "y"
   hdf5_data_param {
     source: "train_h5_list.txt" # do not give the h5 files directly, but the list.
     batch_size: 32
   }
   include { phase:TRAIN }
 }

आप और अधिक जानकारी प्राप्त कर सकते यहाँ और यहाँ


जैसा कि ऊपर दिखाया गया है, हम कैफ को एचडीएफ 5 फाइलों की एक सूची में पास करते हैं। ऐसा इसलिए है क्योंकि वर्तमान संस्करण में सिंगल एचडीएफ 5 डेटा फ़ाइल के लिए 2 जीबी की आकार सीमा है। इसलिए यदि प्रशिक्षण डेटा 2GB से अधिक है, तो हमें इसे अलग-अलग फ़ाइलों में विभाजित करना होगा।

यदि एक एकल HDF5 डेटा फ़ाइल 2GB से अधिक है, तो हमें एक त्रुटि संदेश मिलेगा

Check failed: shape[i] <= 2147483647 / count_ (100 vs. 71) blob size exceeds INT_MAX

यदि डेटा की कुल मात्रा 2GB से कम है, तो क्या हम डेटा को अलग-अलग फ़ाइलों में विभाजित करेंगे या नहीं?

कैफ़ के स्रोत कोड में टिप्पणी के एक टुकड़े के अनुसार, एक एकल फ़ाइल बेहतर होगी,

यदि फेरबदल == सच है, HDF5 फ़ाइलों के आदेश में फेरबदल किया जाता है, और किसी भी दिए गए HDF5 फ़ाइल के भीतर डेटा के आदेश में फेरबदल किया जाता है, लेकिन विभिन्न फ़ाइलों के बीच डेटा को हस्तक्षेप नहीं किया जाता है।



Modified text is an extract of the original Stack Overflow Documentation
के तहत लाइसेंस प्राप्त है CC BY-SA 3.0
से संबद्ध नहीं है Stack Overflow