人工知能プログラミングやってくブログ

深層学習・機械学習・AIについて調べてやってみたことをまとめるブログです

Fashion-MNISTの画像を似た順に並べる簡単サンプル

https://gyazo.com/200b5884333246d353050f566d0dbf98 DeepLearningで似た画像を探すプログラムを作ってみたくなったんで、やってみました。

仕組み

画像を識別する畳み込みニューラルネットワークから得られる特徴ベクトルが、近いものを「似てる」と判定することとします。
ランダムに1まい選んだFashion-MNISTの画像を、ニューラルネットワークにとおした結果、同じジャンルだったものを特徴ベクトル順に20枚づつ表示します。

ソースコード

GitHub

学習済みのモデルがここに入ってて、それを使ってるるんで動かしてみたい場合はこのリポジトリをcloneしてください。

github.com

参考

www.slideshare.net

ina17.hatenablog.jp

参考になりました!ありがとうございますー。

pandasとseabornで相関係数をヒートマップ表示

f:id:uchidamax:20180509165708p:plain

「データ項目ごとの相関係数を表で出せるんだ!?いいね!!」
と思ったんで、やって見ました。

Kaggleのタイタニックのデータの項目毎の相関を表示させてます。
やり方は次のソースコード

ソースコード

参考

ohke.hateblo.jp

参考になりました!どもです!

Kaggleのタイタニック号コンペのデータを分析してみる

Kaggleコンペのチュートリアルタイタニック号のデータを機械学習にかける前に自分で分析してみましたよ。

分析してみた結論

Kaggleのタイタニック号のコンペの内容は、乗員の年齢、性別、座席、チケット代などの属性から、沈没事故で生き残ったかどうかを予測するというモノ。
機械学習用の教師データと、それから学習したモデルで予測するテストデータが入っている。

この教師データから、どんな傾向が見られるかをPythonで集計して調べてみました。
唐突に結論を言えば、僕が見たところ、高い金出した客が生き残っているという傾向が見られる。 あとは生き残り確率の高い年齢層が存在するというのが大きな傾向かと思います。

分析

タイタニックの教師データの項目は次のモノ。

項目 意味
PassengerID 乗客ID
Survived 生存結果 (1: 生存, 2: 死亡)
Pclass 乗客の階級 1が一番位が高い
Name 名前
Sex 性別
Age 年齢
SibSp 兄弟、配偶者の数
Parch 両親、子供の数
Ticket チケット番号
Fare 乗船料金
Cabin 部屋番号
Embarked 乗船した港。Cherbourg、Queenstown、Southamptonの3種類

Pythonで集計した要点を貼っていく。

Pclass(乗客の階級)との関連

f:id:uchidamax:20180507204035p:plain

f:id:uchidamax:20180507204044p:plain

Pclassが1が一番等級の高い乗客ですが、1だと生き残り確率が62.96%と他より高い。

年齢との関連

f:id:uchidamax:20180507204359p:plain

f:id:uchidamax:20180507204401p:plain

0才〜5才が70%を超える生存率。おそらく優先的に救命ボートに乗せられたのだろう。

乗船料金との関連

f:id:uchidamax:20180507204634p:plain

f:id:uchidamax:20180507204640p:plain

51ポンド以下は31.83%の生存率で、他より明らかに低い。
チケットが高い乗客が優先的に救命ボートに乗ったであろうと思われる。

部屋番号との関連

f:id:uchidamax:20180508005822p:plain f:id:uchidamax:20180508005827p:plain

部屋番号あり無しで生存数、生存率を集計。部屋番号が無いグループは生存率29.99%、ある場合は66.67%。
部屋番号があるグループはチケット代が高く、優先的に救命ボートに乗ったと思われる。

この結論に至るまでの分析コードが以下。

ソースコード

参考

qiita.com

参考になりました!ありがとうございますー。

Titanic: Machine Learning from Disaster | Kaggle

追伸

なーんとなく二ヶ月くらい書かなかったなぁ。
Kaggleのコンペも結構やってみたい気持ちはあるから、そろそろやってみようかなぁ。

Pillow(PIL)をベースにOpenCVのエフェクトを使う簡単サンプル

https://gyazo.com/dac2b6f61021bb249d7d1076ae305afb

Pythonで画像処理をいくつか作ってみて、画像を重ねたりする基本的処理はOpenCVよりもPillowがやりやすいと思う。だけどOpenCVのブラーや輪郭抽出は便利。
なんでPillowをベースにOpenCVの機能を使うって形が良いんだろうな。
と思って試しに作ってみました。

Pillowで画像を重ねてOpenCVでブラーをかける

PillowからOpenCVに変換して輪郭描画。その後Pillowで画像を重ねる

参考

次のサイトを参考にさせてもらいました。ありがとうございます!

stackoverflow.com

qiita.com

tatabox.hatenablog.com

note.nkmk.me

pythonのopencvで画像重ね、回転、輪郭抽出する簡単サンプル

https://gyazo.com/bbf7d908155b0d048968fcab4370b923

opencvで、いくつかやりたいことがあったので下調べとして作ってみました。 jupyter notebookで作ってます。

画像を重ねて描画

これを作ってみてわかったOpenCVの特徴。

  • 画像データを読み込むとnumpy.ndarrayで返ってくる
  • ピクセルの色データがB, G, R(Blue, Green, Red)の順に並んでいてRGBではない

PNG画像の透過部分を透過させて画像を描画

背景を水色にして、アルファ部分を透過してpng画像を重ねて描画。

PNG画像の透過部分を保持したまま画像を回転

PNG画像をJPG画像の上にリサイズ、回転させて透過描画

画像の回転、縮小、輪郭を抽出した矩形を描画

抽出した輪郭ぴったりに線を描画

参考

ども、ありがとうございます! stackoverflow.com

end0tknr.hateblo.jp

skattun.hatenablog.jp

YOLOでMNISTを学習させてみる

https://gyazo.com/3649c293e3e718aa11af32e59d4897a4

YOLOでの学習の練習にMNISTの教師データを自前で作って学習させてみました。

必要なソフトのインストール

Kerasのインストール

KerasがPython環境に入っていない場合は入れてください。

pip install tensorflow
pip install keras

darknet YOLOのインストール

darknet YOLOのリポジトリを取得する

git clone https://github.com/pjreddie/darknet
cd darken
make

ビルドなど、うまくいかない場合はdarknet YOLOの公式サイト参照。

pjreddie.com

学習データの作成

github.com

学習データを作成するためのスクリプトを作り、GitHubにあげました。 まずは、このリポジトリを取得。

git clone https://github.com/uchidama/MNIST-TrainDataForYOLO.git

とか。

[1] MNISTの画像とラベルの作成

python mnist_to_jpg_and_label.py

画像とラベルの入ったテキストファイルが7万枚ずつ作成されます。

[2] train.txt と test.txtの作成

python generate_train_txt_and_test_txt.py

訓練用の画像一覧 train.txt とテスト用の画像一覧 test.txtが作成されます。 以上で学習データの作成は終了です。

YOLOでの学習

[3] リポジトリのcfgディレクトリ、dataディレクトリ内のファイルをdarknetにコピー

cp cfg/tiny-yolo-mnist.cfg <darknet_dir>/cfg
cp cfg/voc-mnist.data <darknet_dir>/cfg
cp data/voc-mnist.names <darknet_dir>/data

tiny-yolo-mnist.cfg の上の方にあるbatch, subdivisionsをコメントアウトして切り替えておく

[net]
# Training
batch=64
subdivisions=2
# Testing
#batch=1
#subdivisions=1

[4] <darknet_dir>/cfg/voc-mnist.dataを編集。2で作成したtrain.txt、test.txtにパスを通す

train  = <path-to-mnist-train>/train.txt
valid  = <path-to-mnist-test>/test.txt

[5] 学習に使うトレーニング済のウェイトをダウンロードする

cd <darknet_dir>
wget https://pjreddie.com/media/files/darknet19_448.conv.23

[6] 学習モデルの保存ディレクトリを作成

mkdir backup

[7] 学習する

./darknet detector train cfg/voc-mnist.data cfg/tiny-yolo-mnist.cfg darknet19_448.conv.23

backupディレクトリの中に学習したモデル(weights)が保存される。

学習したモデルで識別する

./darknet detector test <data file> <cfg file> <weights> <predict image>  

コマンドとしては、こういう指定。

./darknet detector test cfg/voc-mnist.data cfg/tiny-yolo-mnist.cfg weights/tiny-yolo-mnist_500000.weights ~/MNIST-TrainDataForYOLO/JPEGImages/60015.jpg

なんで、こんな感じで識別できます。

学習済のモデル

学習すると時間かかるんで、学習済みの重みもGitHubに置いときました。 https://github.com/uchidama/MNIST-TrainDataForYOLO/blob/master/weights/tiny-yolo-mnist_500000.weights

参考

pjreddie.com

github.com

KerasのMNISTデータをJPEGに書き出す簡単サンプル

https://gyazo.com/d7b0564823a7628c2dbd60d275b544af

MNISTをサンプルの学習データ作りで画像に書き出したかったんで、やってみました。

ソースコード

Keras使ってるんでシンプルに出来てます。

ついでにFashion-MNISTも書き出してみる

https://gyazo.com/06f71fd2d18e5659b2a8abeaf05d793d

まぁついでなんで、ちょっとだけ書き換えてやってみました。

参考

euglena1215.hatenablog.jp

参考になりました!ありがとうございますー。