画像データをdb(leveldb/lmdb)ファイルに変換

3064 ワード

DLではピクチャファイルを使用することが多く,ピクチャフォーマットが異なり,サイズも一致しない可能性がある.caffeでよく使われるデータ型はlmdbまたはleveldbです.次に、元のピクチャファイルをcaffeのdbファイルに変換する方法について説明します.
caffeでは、すでにファイルが存在します:convert_imageset.cppは、コンパイルに成功した後、対応する実行可能ファイルをbuild/tools/の下に配置します.このファイルの役割は、ピクチャファイルをcaffeフレームワークで直接使用できるdbファイルに変換することです.
このファイルの使用形式:convert_imageset [FLAGS] root_path/list_file db_nameには4つのパラメータが必要です.
  • FLAGS:ピクチャパラメータグループ、後述
  • root_path/:画像格納の絶対パスlinuxシステムルートディレクトリから
  • list_file:画像ファイルリスト、一般的にtxtファイル、1行1枚の画像
  • db_name:最終的に生成されたdbファイル格納ディレクトリ
  • 自分のピクチャデータに基づいて、ピクチャリストリストを作成し、txtファイルとして保存します.caffeで持参した画像を例にとると、ディレクトリexample/images/の2枚の画像、cat.jpgとfish_bike.jpgは、2つのカテゴリを表します.
    私たちはshスクリプトファイルを作成してピクチャーリストを生成します:(so...Shellスクリプトは書くことができます)sudo gedit examples/images/create_file_list.sh次のshスクリプトを編集して、保存します...
    # /usr/bin/env sh
    DATA=examples/images
    echo "Create train.txt..."
    rm -rf $DATA/train.txt
    find $DATA -name *cat.jpg | cut -d '/' -f3 | sed "s/$/ 1/">>$DATA/train.txt
    find $DATA -name *bike.jpg | cut -d '/' -f3 | sed "s/$/ 2/">>$DATA/tmp.txt
    cat $DATA/tmp.txt>>$DATA/train.txt
    rm -rf $DATA/tmp.txt
    echo "Done.."
    

    shスクリプトファイルのrm,find,cut,sed,catなどのコマンドを紹介します.
  • rm:削除ファイル
  • find:ファイルを探す
  • cut:切断経路
  • sed:各行の一番後ろに寸法を付けます.この例では、見つかったcat.jpgファイルを1と表記し、見つかったbike.jpgファイルを2
  • と表記する.
  • cat:2つのカテゴリを1つのファイルにマージします.

  • 最終的に次のtrain.txtファイルを生成します.
    cat.jpg 1
    fish-bike.jpg 2
    

    画像が少ない时はもちろん手动でこのリストファイルを书くことができて、but...今训练したデータセットlaは大きくて、本当に手书きですか?だからおとなしくスクリプトファイルを書いて自動生成しましょう!以降の実際のアプリケーションでは、対応するval.txtとtest.txtファイルを生成する必要があります.方法は同じです.
    生成されたこのtrain.txtファイルは、3番目のパラメータ(list_file)として辛いものを使用することができます.
    Now、FLAGSパラメータについて説明します.
  • -gray:画像をグレースケールで開くかどうか.プログラムはopencvライブラリのimread()関数を呼び出してピクチャを開き、デフォルトはfalse
  • です.
  • -shuffle:画像の順序をランダムに乱すかどうか.デフォルトはfalse
  • -backend:変換するdbファイルフォーマット、オプションleveldbまたはlmdb、デフォルトlmdb
  • -resize_width/resize_height:画像のサイズを変更します.実行中は、すべてのピクチャのサイズが一致する必要があるため、ピクチャのサイズを変更する必要があります.プログラムはopencvライブラリのresize()関数を呼び出してピクチャを拡大縮小し、デフォルトは0であり、
  • を変更しない.
  • -check_size:すべてのデータに同じサイズがあるかどうかを確認します.デフォルトはfalseで、
  • はチェックされません.
  • -encoded:最終データに元のピクチャを符号化するかどうか、デフォルトはfalse
  • である.
  • -encode_type:前のパラメータに対応して、ピクチャをどのフォーマットに符号化しますか:‘png’,‘jpg’......
  • OK! 次にlmdb形式のデータファイルを生成します.のパラメータが少し多いので、shスクリプトを書いて体力節約を実行します.shスクリプトファイルの作成:sudo gedit examples/images/create_lmdb.sh編集、次のコードを入力して保存します.
    #!/usr/bin/en sh
    DATA=examples/images
    rm -rf $DATA/img_train_lmdb
    build/tools/convert_imageset --shuffle \
    --resize_height=256 --resize_width=256 \
    /home/xxx/caffe/examples/images/ $DATA/train.txt  $DATA/img_train_lmdb
    

    パラメータ-shuffleを設定し、画像の順序を乱します.パラメータの設定-resize_heightと-resize_widthは、すべてのピクチャサイズを256*256./home/xxx/caffe/examples/images/ピクチャに保存された絶対パスに変更します.run:sudo sh examples/images/create_lmdb.sh emmm,examples/images/ディレクトリを開くとimg_という名前のtrain_lmdbのフォルダ、中のファイルは私たちが必要とするdbファイルです.