【とりあえず動かすChainer】pix2pix

f:id:rew05:20171003232931p:plain

今更だけど、chainerでpix2pixを動かすやつ。

 

以下のソースコードをお借りしました。

github.com

 

pix2pixとは

簡単に言うと画像変換ネットワーク。

2つの画像A,Bをペアで学習させることで、画像A’を入力すると画像B'を出力するモデルになる。

https://arxiv.org/pdf/1611.07004v1.pdf

具体例は上記論文の画像を見てもらうとして、有名どころとしては

  • 線画→実写真
  • モノクロ→着色

などだろうか。

 

今回はお借りしたソースコードを動かして、学習が進むにつれて生成画像がそれっぽくなる様子を紹介する。

 

使用する環境は以下、マシンスペックはこちら→PC買いました。 - 深層ロック

Python3.5(Anaconda4.4.0)

Chainer == 2.0.0

cupy == 1.0.3

tqdm == 4.14.0

 

準備

githubからソースをダウンロードし、任意のフォルダに展開。今回はC:\python\pix2pixに展開する。

f:id:rew05:20171003221249j:plain

 

次にREADME.mdに記載されているhttp://cmp.felk.cvut.cz/~tylecr1/facade/からデータセットをダウンロードし「C:\python\pix2pix\facade」に配置。(extendedは要らないかも)

f:id:rew05:20171003221557j:plain

 

データセットについて

データセット

の同名異拡張子の3ファイルで1組になっている。jpgは実際の建物の写真、pngはjpgのラベリング画像。(xmlpng作成時に使用?生成?たぶん使わない。)

ここで言うラベリングとは、画像に写る各部位を色で表現する方法で、例えば今回の場合、濃い青は外壁、黄色は窓のシャッター(?)、赤は柱を表す色になっている。実際の写真とラベリングされた画像をペアで覚えさせることで、ラベリング画像を入力したときに「ここは赤色だから柱」「濃い青だから壁」と認識して建物っぽい画像を生成して出力する。

f:id:rew05:20171004232555p:plain

学習

コマンドプロンプトを開き、下記コマンドを実行。

python train_facade.py

 GPUを使用する場合は後ろに「-g 0」を引数で追加。

f:id:rew05:20171003222131j:plain

(データセットをダウンロードし忘れると上部のエラーが出る。わ、わざとだし・・・)

 

学習の際に建物の画像はランダムな位置から256*256pixelで切り抜かれ使用される。学習途中で行うテストには上記切り抜き画像を使用し、5*5=25枚並べた状態で出力される。

 

前述したスペックで学習終了まで約6時間半。朝起きたら終わってた。

学習の途中経過は「C:\python\pix2pix\result」に、学習途中で生成した画像は「C:\python\pix2pix\result\preview」に出力される。image_gen_***.pngが生成画像、image_gt_***.pngが正解画像、image_in_***.pngがラベル画像。

 

以下に出力された画像を結合した画像を配置した。左から生成画像、正解画像、ラベル画像。

f:id:rew05:20171004001758p:plain

学習1000回

f:id:rew05:20171004214034p:plain

学習30000回

f:id:rew05:20171004213627p:plain

学習59000回


学習回数が増えるにつれて、ぼんやりしていた部分がはっきりしてきたり、壁やパーツのバリエーションが増えていることがわかる。

 

おわり

 このようにpix2pixを使うと12色の画像から本物の建物っぽい画像が生成できる。今回のラベリング画像は識別しやすいように色を分けているが、コンピュータ的には値が1でも違えば識別できるので、実際は0000~1111までの4bitあれば今回の学習を再現することができる。しゅごい。

 

次は違うデータセットでやってみたい。ラベリングがめんどい。

 

 

 

 

 

ワイヤレスイヤホン買いました。

 

ワイヤレスイヤホン買いました。

 音質的なことはわからないので使用感について書きました。参考までに。

 

使用状況

基本は通勤時に音楽を聴くために使用。常用の携帯とは別に持ち歩いているiPod touchから再生。ほかの接続先は常用の携帯(Xperia)とデスクトップPC(Bluetooth非対応)。

 

メリット

①体の前にイヤホンがぷらぷらしない。

すごい快適。体感して初めて分かったけど、コードってだいぶストレスあったんだなーと思った。コード自体もだけれど、コードの接続先を線でつなげる範囲に置かなくてもいいのって楽。鞄の中に入れておけばいいのが楽すぎて、これだけで有線には戻れない。


②コードが絡まらない。

イヤホン部がマグネットになっている、コードが短い&きし麺なので、基本的に絡まらない。絡まれない。なので絡まり対策(コードをまとめる、プレイヤーに巻き付けるなど)を施す必要がない。デジタルとアナログの差はあるけれど断線の心配がないから、自分の使い方的に耐久性は上がる気がする。

 

デメリット

①充電管理

充電めんどい。いくら少し充電すればすぐ使えるとは言えどめんどい。フル充電で6時間(体感5時間くらい)使えるけど、片道1.5時間の通勤だと毎日充電しないといけない。そして携帯と違って充電しながら使えるわけでもないのがネック。充電量はiOS端末なら見れるけれど、自分の場合鞄の中だから見ない。


②ペアリング周り

普段はiPod touchを使って音楽を聴いているけれど、TwitterのGIF動画をみるときはXperia、そしてデスクトップPC。ペアリング登録は2台まで。有線の場合は差し替えればいいけど無線の場合はペアリングし直しが必要。なので結局有線イヤホンはPC前で待機。

 

まとめ

  • 短距離移動/2端末以内の場合は手間削減。
  • 日常的に長距離移動/3端末以上の場合は手間微増。

3000円でこのメリットなら十分元は取れたという印象。値段あげて再生時間長いのを選ぶのもありかも。

 

 

「知らない物は怖い」ということが怖いというメモ

更新頻度をあげるために書き升。


年を重ねると「知らない物は怖い」「理解の及ばない物は怖い」という思考が出てくる。

例えば情報を得る手段の場合、
新聞で育った段階世代がテレビを否定したり、
テレビで育ったバブル世代がネットを否定するように、
ネットで育った僕も将来新しい情報会得手段を怖がり、否定するのでしょうか。



やだなー。こわいなー。とか考えてて、将来といいつつ既にいくつか否定してる物に気付いた。

①.YouTube、ニコニコ等の動画コミュニティ
②.SEKAI NO OWARI等のファンの年齢層が自分より下のバンド
③.小学生がスマホを所持している現状
などなど。

原因は色々あると思うんだけど、
共通してるのはどれも若者の生活する環境の変化を 考慮に入れてないことなのかなと思った。

例えば①は、今学生が学校で集まってする会話はテレビ番組ではなく、動画共有サイトで日々更新される動画なのだろう。であれば学校での会話に参加するためにユーザー登録を行うことも自然だし、それによってコミュニティが活発になるのも(面白いゲームに釣られて登録したモバゲーで、最終的にはしっかりブログを更新していた過去を回想して)わかる。

②も③も同様に、「自分が若いとき」と比較するのではなく「自分が今若者になったとしたら」で語る必要があるなと。

・若者にとっての必要性(ないとどう困るか)
・若者にとっての便利性(あるとどう快適になるか)
あたりを考えると良さそう。

なので新しい情報会得手段が現れたときに、否定する前に上記ポイントを抑えてから肯定否定したい。


#業務でのPython使用に慣れてきたからブログ書きたいけどプロコンが手から離れないので書けません。助けてください。

完全ワイヤレスイヤホン

電車の移動時にイヤホンを使用して音楽を聴いている。

音楽は好きだがあまり音質にこだわりがあるわけではないため安い(3000円程度の)イヤホンを買い、飽きるか断線するまで使用して交換するサイクルがここ4年ほど。

現在使用している中華製のイヤホンが断線したため、新しいイヤホンを物色している話。

 

断線したイヤホンはこれ。

【ノーブランド品】 iPhone Samsung 用  KZ ZS3 HIFIスポーツ 高音質 重低音 イヤホン

昨年12月ごろ購入。当時2500円ほど。安くなってやがる・・・。

新しいイヤホンを例のごとくアマゾンで物色。どうやらiPhone7の影響からか、Bluetoothのワイヤレスイヤホンが流行っているらしい。

値段は予算の範囲。ガチャじゃないけどレビュー見て安定してそうなのをポチる予定。

 

 

 

リッチなプログレスバー、tqdm

機械学習をしていると進捗状況をみつつ作業することが多い(らしい)。

確かに仕事で機械学習を行う際に、終了時間の検討がつかないことには次の作業に移りづらい。上司に報告しづらい。メンタル的につらい。仕事辞めたい。

 

そんなあなたにtqdm

 

for文にかませるだけで、進捗パーセンテージ、経過時間、終了までの残り時間を表示してくれる。

以下、使用例。まずは普通のfor文

import time
for i in range(100)
sleep(0.1)

 

このfor文に、以下のようにtqdmをかませる。

from tqdm import tqdm
import time
for i in tqdm(range(100))
time.sleep(0.1)

そうすると

26%|███████████▏ | 26/100 [00:02<00:07, 9.36it/s]

なんかこんな感じの進捗バーが出る。おしゃみが高い。

 以下は上記例と同義。tqdm(range(xxx)) = trange(xxx)

from tqdm import trange
import time
for i in trange(100)
time.sleep(0.1)

 

なおimport時に import tqdmだけだと以下のエラーが出る。たまにミスるからメモ。

TypeError: 'module' object is not callable

 

2017/09/25 追記: 

そのままでも十分使えるけど、以下の引数を追加してより良いプログレスバーに。

 

desc='xxx':プログレスバーの名前を指定可能。

 leave=True or False:Falseを指定することで、プログレスバーが100%に達したときにバーの表示が削除される。

 勉強次第追加します。。。

Anacondaを使用したPython仮想環境の構築

1台のPCにPythonの環境を複数作成する方法はいくつかあるが、
Windowsはほぼ1択っぽいのでメモ。

 

環境

Windows10 x64 Home

Python 3.6.1 (Anaconda3 4.4.0 64-bit)

 

下記コマンドをコマンドプロンプトで入力することで、

簡単に仮想環境を作成できる。

conda create -n [仮想環境名] python=[Pythonバージョン番号] anaconda

例えば

conda create -n py27 python=2.7 anaconda

と入力して実行すると、Python2.7の環境が仮想環境として作成される。

 

作成後は

conda info -e

と入力することで、作成済みのバージョンを確認可能。

 

仮想環境の使用および構築の続きは、下記コマンドで仮想環境をアクティベート後に行う。

activate [仮想環境名]

activateに成功すると、コマンドの行頭に仮想環境名が追加される。この状態で導入したパッケージや設定は、activateしている環境でのみ適用される。

root環境に戻る場合は下記コマンドでdeactivateする。

deactivate

 

 作成した仮想環境を削除する場合は以下。

conda remove -n [仮想環境名] --all

 

 

 

 

 

PC買いました。

DeepLearning用にPCを買ったのでスペックメモ。

 

購入店:PC SEVEN

pc-seven.jp

OS:Windows 10 x64 Home

CPU:Core i7-7700
マザーボード:ASRock B250M-HDV (別VGA)
ケース:Silverstone Precision PS14
メモリ:Crucial DDR4-2400 8GB (8GBx1枚)
HDD:HDD 1TB(1000GB) SATA3 6Gbps
光学式ドライブ:DVDスーパーマルチ GH24NSD1 BL ブラック
グラフィック(カード):GeForceGTX1060 3GB
地デジチューナー:なし
カードリーダー:なし
電源ユニット:80PLUS Bronze 600W 電源

下記リンク先のセミオーダーです。

pc-seven.jp

 

以下、カスタマイズ
ケースファン追加:スリーブベアリング超静音ファン1個 +1,480円
無線LAN:ELECOM WDC-433DU2HBK +3,580円
オフィスソフト:Microsoft Office Home and Business Premium DSP版 +19,800円

 

注文時から発送まで2~5営業日でとのことだったが、水曜に注文して金曜には発送してもらえた。

 

梱包は大きめの箱に

  • PCケースの箱
  • 各パーツの箱
  • パーツ・ソフトの説明書類、電源ケーブル

が、緩衝材(ビニール袋に空気が入ってるタイプ)と共に詰められていた。

パーツの箱の中身はどれも緩衝材以外は空であったが、一応全ての中身を確認したほうが良いかもしれない。またモノによっては箱に保証書がついている場合もありそう。

 

PCケースの箱を開けると組みあがったPC。

電源ケーブルを差して起動を確認。HDMIケーブルは付属していなかった。(オプションで付属できたかも。忘れた。)

バイスマネージャーでGPUの認識も確認。また以下のソフトでも動作や温度を確認。

ELSA System Graph | 株式会社 エルザ ジャパン

f:id:rew05:20170702125452j:plain

Graphics Clockが上がったのはyoutubeを起動して動作を確認した。

 

 

CUDAとか整えてmnistをGPUで動かしたら再度更新する。