質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.51%

  • Python

    8042questions

    Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

  • 機械学習

    689questions

    機械学習は、データからパターンを自動的に発見し、そこから知能的な判断を下すためのコンピューターアルゴリズムを指します。人工知能における課題のひとつです。

  • TensorFlow

    677questions

  • CSV

    637questions

    CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

CSVで画像に正解ラベルの付け方

解決済

回答 1

投稿

  • 評価
  • クリップ 0
  • VIEW 846

FALLOT

score 3

 画像を取り込む→正解ラベルを付ける→MLのデータセットに変換する

機械学習の勉強をしている大学院生です。

環境
windows
python
tensorflow

現在、MLPでの回帰問題をするにあたり、自分自身でデータセットを作りたいと考えています。
そもそもCSVかTFRecordのどちらでデータセットを作成しようか考えましたが、
TFRecordが難しそうなので、CSVにしました。
できれば、以下のようなことをしたいと考えています。

1.画像データを読み込む(RGBか白黒かはまだ決めかねています)

2.それぞれの画像データに正解ラベルを付ける

3.画像データを機械学習できるようにピクセル数などを合わせる

4.訓練データと教師データにランダムに分ける(分ける比率は7:3の予定)

できれば、ソース付きで解説してくれると大変有り難いです。
CSVをはじめて使うので宜しくお願い致します。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • mkgrei

    2018/06/13 19:10

    大学では講義はやられていないのですか?

    キャンセル

  • FALLOT

    2018/06/14 12:25

    機械系のために一切ないですね。

    キャンセル

  • mkgrei

    2018/06/14 12:38

    何か参考にした情報があれば追記してください。それを踏まえた補足をいたします。

    キャンセル

  • FALLOT

    2018/06/14 17:21

    最初はhttps://github.com/tensorflow/tensorflow/blob/master/tensorflow/contrib/learn/python/learn/datasets/mnist.pyを参考にしました。でも、よくわからないと思ってCSVの勉強を始めました。なので、teretailでhttps://teratail.com/questions/113349を見ていました。

    キャンセル

回答 1

checkベストアンサー

+3

csvはただのコンマで仕切られたファイルです。
https://www.weblio.jp/content/amp/Comma-Separated+Values
多次元配列を記述できるということで、いろいろなところで見かけます。
フォーマットの問題なので、データセットを作るときは特に気にしなくても大丈夫です。

データセットを最も簡単に作る方法はこちらになります。
https://qiita.com/agumon/items/ab2de98a3783e0a93e66
これならば、カテゴリ別に異なるフォルダに入れればできます。


データの分け方ですが、sklearnのkfoldなどを使うのが一般的です。
https://qiita.com/19930404/items/09ddbe506d0e4ab0e10c


直接質問には関係ないことですが、質問する際には何を調べたのかについて記載するとよいです。
でないと、最初に思うことは「検索したらいいじゃん」ということです。
ついでに、どの部分がわからないかまであると、より短い時間に解決につながります。


追記

https://keras.io/ja/preprocessing/image/
のImageDataGeneratorを使います。

from keras.preprocessing.image import ImageDataGenerator

train_datagen = ImageDataGenerator(
    rescale=1.0 / 255,
    shear_range=0.2,
    zoom_range=0.2,
    horizontal_flip=True) #画像のカサ増し時に実行する変形をキーワードで
#train_datagen = ImageDataGenerator(rescale=1.0 / 255) #そのまま使うのなら

train_generator = train_datagen.flow_from_directory(
    'data/train',
    target_size=(256, 256),
    batch_size=batch_size,
    class_mode='categorical') #./data/trainの画像を256x256に統一する

あとはKerasのモデルを作ってfitするだけ

history = model.fit_generator(
    train_generator,
    nb_epoch=nb_epoch)

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/06/19 13:56

    ご助言ありがとうございます。
    データセットを最も簡単に作る方法はこちらになります。
    https://qiita.com/agumon/items/ab2de98a3783e0a93e66
    を拝見しましたが、cifar10を配列に入れているということでしょうか?

    キャンセル

  • 2018/06/19 13:57

    できれば、パブリックで適当に拾った画像に正解ラベルをつけたいなと考えています。

    キャンセル

  • 2018/06/19 18:08

    画像をラベルごとにフォルダ分けしておけば、ラベルを簡単につけられるというリンクです。

    画像を準備してから、どのようなコードを書くべきかわからないということでしょうか?

    キャンセル

  • 2018/06/19 18:13

    そうですね。
    説明が拙くて申し訳ないです。
    仰るとおりです。画像を1万枚(500×500(仮))を準備したのですが、そこからのコードが分からないという状況です。

    キャンセル

  • 2018/06/19 18:33

    Kerasのコードを抜粋してコメントをつけました。
    回答に追記してあります。

    慣れないうちはTensorflowを直に触るよりも、Kerasを使った方がいろいろと楽ですよ。
    またライブラリをできる限り利用した方が、バグにはまることなくゴールにたどり着けます。

    ---

    ファイル構造を維持してラベル付きで画像を読み込むのは落ち着いて考えればかけるかと思われます。
    os.path/glob/opencv/pil/numpy.zerosあたりを使うかと。

    キャンセル

  • 2018/06/20 18:17

    ありがとうございます。
    https://qiita.com/agumon/items/ab2de98a3783e0a93e66
    からはデータを読み込めるということですね。
    class_mode='categorical'
    で正解ラベルの付け方を指定するという解釈でよろしいですか?

    キャンセル

  • 2018/06/20 18:24

    画像データからどこに強い力働いているのかを予測したので、正解ラベルにはx座標とy座標の値を入れたいと考えています。そうであれば、class_modeはbinaryという形ですかね?

    キャンセル

  • 2018/06/20 18:26

    https://keras.io/ja/preprocessing/image/
    をみると、

    class_mode: "categorical"か"binary"か"sparse"か"input"か"None"のいずれか1つ.デフォルトは"categorical".返すラベルの配列のshapeを決定します:"categorical"は2次元のone-hotにエンコード化されたラベル,"binary"は1次元の2値ラベル,"sparse"は1次元の整数ラベル,"input"は入力画像と同じ画像になります(主にオートエンコーダで用いられます).Noneであれば,ラベルを返しません(ジェネレーターは画像のバッチのみ生成するため,model.predict_generator()やmodel.evaluate_generator()などを使う際に有用).class_modeがNoneの場合,正常に動作させるためにはdirectoryのサブディレクトリにデータが存在する必要があることに注意してください.

    とあります。

    キャンセル

  • 2018/06/20 18:31

    予測したいのはラベルではないようですね。

    検出の場合は分類や単純回帰ではうまくいきません。

    計算コスト的にもかかってしまう手法を使う必要があります。
    このようなものを利用すると良いかと思います。
    https://qiita.com/watanabe0621/items/0b1cfa2d89c8321767e2

    キャンセル

  • 2018/06/20 18:35

    なるほど。それぞれの値が違うのでラベルとは言えないのですね。
    根本的に間違っていました。ありがとうございます。
    機械学習をして経験が浅いので考え方が間違っていました。

    キャンセル

  • 2018/06/20 18:39

    材料の中に異物が混入して、その異物が移動した場合どこに一番強い力が働いくのかを対称としています。labellmgをもちいて1つずつ一番強い力の位置を指定していけばいいということですね。

    キャンセル

  • 2018/06/20 18:42

    検出の場合、答えyの与え方に自由度が高く、既存のうまくいっている方法を採用するのが一般的です。

    結構ノウハウが必要になるので、とっつきづらいのですが、
    幸いにしてこのような動画のチュートリアルがあるので参考にされると良いかと。
    https://m.youtube.com/watch?v=COlbP62-B-U

    キャンセル

  • 2018/06/20 18:44

    > labellmgをもちいて1つずつ一番強い力の位置を指定していけばいいということですね

    おっしゃる通りです。

    キャンセル

  • 2018/06/20 18:58

    ありがとうございます。
    今まで、
    MNISTのMLP
    簡単な線形回帰・非線形回帰
    MNISTのCNN(これは全結合と畳み込みは理解できず)
    を一通り勉強しました。
    今回の問題では、検出なので異なるNNのアルゴリズムですか?

    キャンセル

  • 2018/06/20 20:50

    やっていることとしては、CNNです。
    損失関数に工夫がある場合があります。

    最適化アルゴリズムは同じです。

    キャンセル

  • 2018/06/21 13:20

    ありがとうございます。
    いきなり、それだと難しいので、力がある・ないの0か1のbinaryからはじめます。
    それであれば、ある・ないの画像データをフォルダに分けてから、正解ラベルをつけるという流れですかね?

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 90.51%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

  • 解決済

    VB.net データセットについて

    データセットを使う際、新しい項目の追加からデータセットを作成する方法と、 コードで(Public ds As New DataSet)と書いてDBから取ってきたデータをデータ

  • 解決済

    D3.jsにてcsvファイルラベルデータの抽出を変数にて行いたい

    プログラムすべてを記載すると長く読みづらいので割愛しています。 var strYear =document.selectFrame.selectYear.value; var

  • 解決済

    機械学習用のデータセットについて

    お世話になります。 現在、機械学習に興味があり勉強中です。 昨今話題になっているディープラーニングを勉強したいと思い、 tensorflowのチュートリアルを試してみまし

  • 解決済

    データセットの作り方がわからない

     前提・実現したいこと 「ゼロから作るディープラーニング」を読み終えた学生です。 せっかくディープラーニングをかじり始めたため、自分に役に立つことをディープラーニングを利用してやっ

  • 解決済

    Chainerのデータセットの作り方

     前提・実現したいこと 現在、chainerを用いて画像分類をするために、chainer.datasets.ImageDatasetを使おうと考えていますが、引数に何を指定すればい

  • 解決済

    機械学習 複数の学習データからデータセットの作成方法

    DQNを使って、ゲームのソルバーを作ろうとしています。 陣取りのボードゲームで、マスごとに点数が割り振られており、多くのマスを獲得したプレーヤーが勝ちとなります。 また、ボードの大

  • 解決済

    自前のデータセットの作成方法について

     前提・実現したいこと 今年の4月から機械学習の勉強を始めた大学院生です。 横軸が時間、縦軸が力のグラフを分類してくれるモデルを作りたいと考えています。 そのため、測定したデー

  • 解決済

    フォルダ分けされたcsvデータをデータセットにしたい

     前提・実現したいこと ・横軸が速度、縦軸が力のグラフを分類してくれるモデルを作りたいと考えています。 グラフの測定データ(CSV)を入力すると、実験が分類したグラフのパターンが出

同じタグがついた質問を見る

  • Python

    8042questions

    Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

  • 機械学習

    689questions

    機械学習は、データからパターンを自動的に発見し、そこから知能的な判断を下すためのコンピューターアルゴリズムを指します。人工知能における課題のひとつです。

  • TensorFlow

    677questions

  • CSV

    637questions

    CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。