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

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

新規登録して質問してみよう
ただいま回答率
85.48%
CSV

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

機械学習

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

Python

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

Q&A

解決済

1回答

14787閲覧

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

FALLOT

総合スコア16

CSV

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

機械学習

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

Python

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

0グッド

2クリップ

投稿2018/06/13 05:29

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

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

環境
windows
python
tensorflow

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

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

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

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

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

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

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

mkgrei

2018/06/13 10:10

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

2018/06/14 03:25

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

2018/06/14 03:38

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

2018/06/14 08:21

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

回答1

0

ベストアンサー

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を使います。

python

1from keras.preprocessing.image import ImageDataGenerator 2 3train_datagen = ImageDataGenerator( 4 rescale=1.0 / 255, 5 shear_range=0.2, 6 zoom_range=0.2, 7 horizontal_flip=True) #画像のカサ増し時に実行する変形をキーワードで 8#train_datagen = ImageDataGenerator(rescale=1.0 / 255) #そのまま使うのなら 9 10train_generator = train_datagen.flow_from_directory( 11 'data/train', 12 target_size=(256, 256), 13 batch_size=batch_size, 14 class_mode='categorical') #./data/trainの画像を256x256に統一する

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

python

1history = model.fit_generator( 2 train_generator, 3 nb_epoch=nb_epoch)

投稿2018/06/14 10:33

編集2018/06/19 09:26
mkgrei

総合スコア8560

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

FALLOT

2018/06/19 04:56

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

2018/06/19 04:57

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

2018/06/19 09:08

画像をラベルごとにフォルダ分けしておけば、ラベルを簡単につけられるというリンクです。 画像を準備してから、どのようなコードを書くべきかわからないということでしょうか?
FALLOT

2018/06/19 09:13

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

2018/06/19 09:33

Kerasのコードを抜粋してコメントをつけました。 回答に追記してあります。 慣れないうちはTensorflowを直に触るよりも、Kerasを使った方がいろいろと楽ですよ。 またライブラリをできる限り利用した方が、バグにはまることなくゴールにたどり着けます。 --- ファイル構造を維持してラベル付きで画像を読み込むのは落ち着いて考えればかけるかと思われます。 os.path/glob/opencv/pil/numpy.zerosあたりを使うかと。
FALLOT

2018/06/20 09:24

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

2018/06/20 09: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のサブディレクトリにデータが存在する必要があることに注意してください. とあります。
mkgrei

2018/06/20 09:31

予測したいのはラベルではないようですね。 検出の場合は分類や単純回帰ではうまくいきません。 計算コスト的にもかかってしまう手法を使う必要があります。 このようなものを利用すると良いかと思います。 https://qiita.com/watanabe0621/items/0b1cfa2d89c8321767e2
FALLOT

2018/06/20 09:35

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

2018/06/20 09:39

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

2018/06/20 09:42

検出の場合、答えyの与え方に自由度が高く、既存のうまくいっている方法を採用するのが一般的です。 結構ノウハウが必要になるので、とっつきづらいのですが、 幸いにしてこのような動画のチュートリアルがあるので参考にされると良いかと。 https://m.youtube.com/watch?v=COlbP62-B-U
mkgrei

2018/06/20 09:44

> labellmgをもちいて1つずつ一番強い力の位置を指定していけばいいということですね おっしゃる通りです。
FALLOT

2018/06/20 09:58

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

2018/06/20 11:50

やっていることとしては、CNNです。 損失関数に工夫がある場合があります。 最適化アルゴリズムは同じです。
FALLOT

2018/06/21 04:20

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問