「Googleに学ぶディープラーニング」読書レビュー やはりGoogleは偉大だった

いよいよこのブログから200本チャレンジの幕が上がる。

 

さて、「Googleに学ぶディープラーニング」は前々から読みたいと思っていた本なのだが、やはりさすがは

f:id:Ryotaro_Kubo:20181229095905j:plain

 

ディープラーニングニューラルネットワーク機械学習などの用語の違いをわかりやすく説明してくれる入門編から始まりグーグルでの活用編、グーグルがオープンソース化したコンテンツを利用した企業の活用事例編などに別れている。

 

人工知能機械学習ディープラーニング

 

この3つの単語を聞いたことのある人はたくさんいるだろう。

しかし、その違いを説明できる人はあまりいないと思う。

 

この本では

人工知能」=知的な情報処理をするもの。その技術

機械学習」=機会が答えを出す手法を人間がプログラムとして与えるのではなく、機会が自動的に膨大な学習データから学習してモデルを作る学習

ディープラーニング」=機械学習の手法の一つで、複数の層の処理を重ねて複雑な判断をできるようになる技術

 

と書かれています。

 

この3つの言葉のイメージは下図のようなベン図で考えると楽です

f:id:Ryotaro_Kubo:20181229145807p:plain

人工知能の一種が機械学習機械学習を行う方法の一つがディープラーニングというわけだ。

 

僕は、Google driveGmailなど多くのGoogleのコンテンツを無料で利用している。

 

その便利さはいうまでもなく、Google driveなどは容量無制限という点において他の追随を許さないコンテンツとなっている。

 

実はGoogleは誰にでも使えるAIを無料で公開している。

つまり、人工知能はプログラミングが一ミリもわからない素人であってもデータさえあれば開発・実用化することができているのだ。

 

この本を読みながらGoogleの世界への貢献度の高さを感じたとともにもしGoogleが自社コンテンツの技術とかを秘密にしだしたら人類の進歩は何年間分遅れてしまうのだろうかと考えてぞっとした。

 

yolov3で画像を出力して順繰りに全て保存する方法まとめ

最近よく書いているyolov3シリーズ。

同じyolov3を使っている友達に

 

「yoloの画像っていちいちdarknet開いてコマンド走らせてリネームしなきゃ保存できないの不便だよねえ」

って言われました。

 

いやいや!!!できるし!!!!

 

というわけでpython

①外部コマンドを用いて画像をyolov3の識別にかける

②画像の名前をリネームして別ファイルに保存

この2つを命令するスクリプトを書こう。必要なコマンドたちについても書き記す。

 

①外部コマンドを用いて画像をyolov3の識別にかける

①−⒈外部コマンド:os, subprocess

僕はosを使う派なのでosを今回のスクリプトでも使っているが、osコマンドは現代的ではなくて非推奨らしい。

現代はsubprocessが汎用的に用いられている。

ちなみにひと昔使われていた、commandsモジュールは廃止されるのでさすがに使わないことがおすすめ。

その辺の詳しいことはhttps://stackoverflow.com/questions/4813238/difference-between-subprocess-popen-and-os-systemに詳しく載っている。

 

まずは、lsコマンドを実行する簡単な方法

import subprocess
 
subprocess.call("ls")

subprocessを呼び出して

subprocess.call()で実行をする。コレダケ...

 

そしてosを使った場合

import os
 
os.system("ls")

 osを呼び出して

os.system()で実行をする。コレダケ...

 

これでunixコマンドのlsと同じことが実行できる。

osやsubprocessは他にも便利な使い道があるのでそれもまたいずれ説明する。

 

以降はosを使ったパターンを書くが、subprocess使いたい人はos.systemをsubprocess.callに置き換えてくれればオッケー。

 

①−⒉ディレクトリ内の画像数を数える

yolov3を実行するにあたって、

・どの画像を認識させるのか

・認識させる画像が何枚なのか

この二つがわかる必要がある。

 

import os
direct='home/user/darknet/non-predicted_img'
#画像が入っているディレクトリの指定

info=os.listdir(direct)#ディレクトリの情報を引き出す

count=1
 
for file in info:
    index=re.search('jpg',info)#jpg形式のファイルがinfo内にあるか調べる
    if index:
        count+=1#info内にjpgを発見したらカウントが増える
 
print(count)

 このように記述すれば、darknetの中のnon-predicted_imgというディレクトリの中に幾つのjpgファイルがあるかを最後にprintしてくれる。

②画像の名前をリネームして別ファイルに保存

②−⒈renameコマンドを使って画像のパスと名前を変更する

これはすごくすごく簡単

import os
 
path1='home/user/darknet/predictions.jpg'
path2='home/user/darknet/keepimg/new.jpg'
 
os.rename(path1, path2)

#これでリネーム先のパスにnew.jpgが入った
 というだけの話なのだ。

 

最後に①と②をまとめて手を加えた完成版がこれ


import os

direct='/home/user/darknet/non-predicted_data'  

files=os.listdir(direct)

count=1
for file in info:
    index=re.search('jpg',file)
    if index:
        count+=1

for i in range(1, count):

    os.chdir("home/user/darknet")    #cd darknetを外部コマンドで実施している

    os.system("./darknet detect cfg/yolov3-voc.cfg yolov3.weights non-predicted_data/dog"+str(i)+".jpg")

    path1="home/user/darknet/predictions.jpg"
    path2="home/user/darknet/keepimg/new"+str(i)+".jpg"
         
    os.rename('path1', 'path2')

案外簡単にいけるものだ!では明日からのブログ祭り、いろいろ書くことを楽しみにして今日は早く寝ようzzz

やってくる地震半端なさすぎで笑えない。最新の防災訓練ってどんなの?

 

僕は災害の防災・減災に大きな関心がある。せっかくなのでこれからくる(と思われている)地震の情報などなどを書こう。

 

今日のところは「南海トラフ巨大地震」「首都直下型地震」の二つにフォーカスを当てよう。比較対象として「東日本大震災」のデータも使う。

 

東日本大震災

2011.3.11.14:16

 

前触れもなくやってきたマグニチュード9.0の巨大地震は不意に東北の人々を絶望の底まで叩き落とした。

想定外の高さの津波は防波堤を軽々超えて、街を壊し人々の命を無慈悲に淡々と奪った。

僕を含め多くの人がその恐ろしさを画面を通じて、もしくは身を以て経験したことであろう。何を隠そうこの地震こそが当時僕が災害研究を志した理由である。

 

では早速統計的なデータ

死者数+行方不明者数(震災関連死含む):22085人(2017/12/7警視庁発表)

住宅倒壊棟数:129391棟(2012/9/11総務省発表)

経済損失:約16兆9000億円(2011/6/23内閣府発表)

改めてとんでもない数字だなこれは。

 

東日本大震災気象庁が推定した中で最大となった岩手県大船渡市を襲った津波高16.7メートルがどれほどやばかったのか、とか

津波火災というものがどうして引き起こされたのか、とか

今どのように復興が進んでいて過疎地域がどれほど大変な現実を突きつけられているか、とか

災害が起きた時国から自治体に送りまくったファックスで自治体がパンクしちゃった話とかとかとかとか、、、、、、書きたいことは尽きないけれどもこの辺の話は明後日から始めるブログ200本のためにとっておこう。てか全部書いたら1日が終わる。

 

というわけでこのデータを比較対象としてこれから書く二つの地震を見てみよう

 

 


南海トラフ地震

30年以内の地震の発生確率は70%と言われている。

 

もはや何と言えばいいのかわからないレベルの被害予想がこれ
死者数:約10〜30万人
住宅倒壊棟数:約100〜200万棟東日本大震災の約20倍)
経済損失:約100〜150兆円
震度分布:
スクリーンショット 2018-12-10 10.57.41.png

ん?これは漫画かな?冗談だよな?といいたくなるが、冗談でもなんでもなくこれは内閣府が出しているデータなのだ。

内閣府が出しているということは、、言い方は悪いかもしれないが「(もちろん最善は尽くすが)このままいけば現状これくらいは死ぬ想定です」ということである。

 

そもそも死者数の予想が10万人〜30万人って振れ幅大きすぎだろう。

それぐらい未知数ということか。

阪神淡路大震災は家屋倒壊と火災・東日本大震災津波と被害の特徴が大きかったが、南海トラフ巨大地震は規模が大きすぎて、家屋倒壊はもちろん火災、そして沿岸部は東日本大震災以上の津波、、、全部くる。

 

しかも震源に近い和歌山県静岡県津波到達予想まで五分もかからないと言われている。凄まじい揺れの後は3、4分でありえない高さの津波がやってくる。

すなわち、地震が来てからさあどうしようでは間に合わない。間違いなく死ぬ。

この地震がほぼ間違いなく来るのだから、早めの対策が当然必要だろう。

 


首都直下型地震

この地震が30年以内に起こる確率も約70%と言われている。

あ、けどこの地震の確率の算出方法はあまり好きじゃないからそれも今度書こう。

 

じゃあさっそく被害予想のデータ
死者数:約2万人
住宅倒壊棟数:約60万棟
経済損失:約100兆円
震度分布:
スクリーンショット 2018-12-10 11.07.16.png

もちろんこのデータも内閣府が出したものである。

南海トラフ地震より人が死なないということに目が行きやすいが、このデータで一番注目して欲しいのは経済損失だ。

南海トラフ巨大地震よりも人的被害や震度は小さいにもかかわらず経済損失は同規模になっている。

日本の経済の中枢で大規模地震が起きるのだからこれは当然の話である。

 

経済損失に加えて、帰宅困難者や交通の混乱でパニックが起きる。イメージとしては東京のあっちこちの駅で渋谷ハロウィンのような人混みが発生する感じ。

もし、もしも死ぬことなく自分が帰宅困難者になると気づいたならば、早急な宿の確保が必要である。と言ってもホテルやネカフェなんてすぐに埋まってしまう。

そこでおすすめはラブホテルだ。冗談でもなんでもなく、僕がもし帰宅困難者になったら一人で行ってもバレない近くのラブホテルを探してそこに泊まる。

 

少し話が逸れたが、この二つの地震をとっても直近30年くらいで日本に未曾有の危機が「巨大地震」という形で訪れて来ることは想像に易い。

 

じゃあ防災に取り組もう!

 

この様な地震が発生した時のための防災訓練なのだが最近は色々面白いものがある。

例えば、首都直下地震で火災が発生した時のシュミレーションをVRを用いて行うもの


防災訓練用VR ~火災避難編~


見るとわかりやすいが、バイオハザードみたいである。

他には、ハザードマップのデータから津波の水害予想をVRで可視化するもの
スクリーンショット 2018-12-10 11.42.05.png

東京都はVRを用いて防災訓練をできるトラック型の設備に億単位のお金を投資したらしい。素晴らしい!

 

これらの防災訓練のいい点は、全て自分ごととして災害を疑似体験できることだ。

この「自分ごと」というフレーズが防災ではとてもとても大切になる。

巨大地震が発生した時は「なんとかなるわww」とか思っている人ほど死ぬ確率が高い。当たり前である。

危機感を持って早い段階で避難行動できる人は地震が来る前から「地震が来る」という未来の出来事を自分に起きることとして、避難経路の確認や避難時に持って出るものの準備ができている。

この地震が来るときの備えをするということも「自分ごと」として地震を捉えることの一つである。

 

まあ要するに、みんな自分ごととして最低限避難場所とその経路くらいは調べておくべきだ!ってことかな。
ちなみにいい感じに地震が起きた時にまずすべきことが

https://kiki-kaihi.com/?p=216

このサイトにいい感じにまとまっている。

ここに書いてあることの中で忘れがちな注意すべきことは避難する時に通電火災対策としてブレーカー落とすことだろうか。首都直下型地震とかでは通電火災をどれだけ防げるかは死者数を減らす上で肝になって来るはずである。

 

 

防災訓練や防災グッズも日々開発されているがまだ足りない。

何しろ地震が起きた時のための技術や制度で改善できることはまだまだある。

地震が来るまでに実現ができなければ意味がないのは事実である。

でも間に合うかわからないからと言って妥協していてはこれから死んでいく人に顔向けができない。

だから、僕はこれまでもこれからも大学の教授や地震の専門家の人に会って話を聞き発信を続ける。ブログもその一環にいずれなっていけばいいと思っている。

 

年末年始を利用して、防災としての技術で改善できるはずだと思っていることについても書こう。今日はこのぐらいでおしまいzzz

darknet yolov3導入のイロハ

f:id:Ryotaro_Kubo:20181226232631p:plain

 

 まず、darknetという名前から厨二病っぽい感じがプンプンである。

 

とはいえ、yolov3は素晴らしく使いやすい。

 

https://pjreddie.com/darknet/yolo/

 

上記のサイトがyolov3のオフィシャルサイトになるわけだが、

如何せん自前データのトレーニングの手順は不親切な書き方をしている。

 

なので、わかりやすくまとめ直そうと思う。

 

Windowsでdarknetのyolov3を使うことに成功した(Ubuntuでは失敗)

ここにも簡単な手順も書いたが、

今回はWindowsじゃない人向けに、わかりやすくかく。

 

といっても、手順は割と明確である。

 

コマンドで以下をじゃんじゃん実行してもらえばオッケーだ。

 

git clone https://github.com/pjreddie/darknet

cd darknet

これでdarknetのファイル自体は出来上がった。

 

ここでGPU環境の整っている人はdarknet直下にあるmakefileを開いて

GPU=0

GPU=1

に変更する。

 

GPU環境のない人はそのままでオッケー!

 

ちなみに、

 

OpenCV=0

 

 についてだが、

これはリアルタイム(デモ)でdarknetを使いたい人には、

必須となる。

 

リアルタイム予測って何?

という人は後からでもmakeし直せるので

とりあえずはいじらなくて良い。

 

ただし、

リアルタイム予測で使いたい人は

OpenCV の環境を整えた上で、

 

OpenCV=0

OpenCV=1

 

に変更する必要がある。

 

ここまでできたら、

 

make

 

を走らせてコンパイルが完了した。

 

 これで本体が完成したので、

次にウェイトをダウンロードする。

 

wget https://pjreddie.com/media/files/yolov3.weights

 

実はもうこれで画像判定のサンプルデータと学習済みのウェイトが入った。

 

では、早速サンプルデータでテストを回してみよう。

 

./darknet detect cfg/yolov3.cfg yolov3.weights data/dog.jpg

 

これを打ち込むと

f:id:Ryotaro_Kubo:20181225233136p:plain

この有名な画像がdarknetフォルダ直下にできる。

 

実はもうこれで、darknetはあなたのものだ。

 

ここまでは楽だったが、

いざ自分のデータを学習させるとなると、

 

とーっても不親切なのだ。

 

VOCでのトレインの方法

 

まずは必要なものをコマンドでインストールしましょう。

 

wget https://pjreddie.com/media/files/VOCtrainval_11-May-2012.tar
wget https://pjreddie.com/media/files/VOCtrainval_06-Nov-2007.tar
wget https://pjreddie.com/media/files/VOCtest_06-Nov-2007.tar
tar xf VOCtrainval_11-May-2012.tar
tar xf VOCtrainval_06-Nov-2007.tar
tar xf VOCtest_06-Nov-2007.tar

 

これでVOCdevkitというフォルダに

アノテーション済みの大量のデータが入る。

 

データ量が割と半端ないので時間かかるかもだけどちょいそこは辛抱。

 

次に、以下を走らせる。

 

wget https://pjreddie.com/media/files/voc_label.py
python voc_label.py

 

これでdarknetを動かすpythonスクリプトが入った。

pythonは入っている前提で話しています。

 

そしたら、

散り散りになっていたアノテーションデータのラベルをまとめる。

 

cat 2007_train.txt 2007_val.txt 2012_*.txt > train.txt

 

これで必要なテキストデータをtrain.txtにまとめた。

 

後は、学習のモデルをダウンロードする。

 

wget https://pjreddie.com/media/files/darknet53.conv.74

 

これで全て必要なものはダウンロードが完了した。

 

「ん?これのどこがしんどいの?」

と言いたくなる気持ちはわかります。ご心配なく。

 

実は一番面倒なのはこれから。

 

順を追って書いていこう。

 

自分の用意した画像を学習させるには、

いくつか変更しなければならない点がある。

 

変えなければいけないことは

①/darknet/cfg/voc.data

②/darknet/data/voc.names

③/darknet/cfg/yolov3.cfg

④/darknet/train.txt

の4つ。

 

1つずつ変える内容を見ていこう。

 

①/darknet/data/voc.names

 

このファイルを開くと、

デフォルトの状態は

 

aeroplane

bicycle

bird

boat

bottle

bus

sofa

train

tvmonitor

 

と20個の英単語が並んでいる。

 

この単語1つ1つは、

 

class(クラス)

 

と呼ばれるものである。

この後も出てくるから覚えておいてほしい。

 

変更する点はクラスの中身だ。

 

デフォルトのクラスを消して、

自分が判定してほしい画像のクラス名を入れる。

 

例えば、

サッカーボールや野球ボールなどのボールの違いを認識させたいならば

 

soccerball

baseball

tennisball

volleyball

という感じで書けばオッケー。

 

そして、このクラスの数が

後に出てくるvoc.dataのclassesに該当する数になる。

 

②/darknet/cfg/voc.data

 

このファイルは開くと、

 

classes=20 
train = train.txt
valid = test.txt
names = data/data.names
backup = backup

 

と書いてあるのだが、

 

・classes=20

のところは①で出てきたvoc.namesに記載したクラスの合計数に20を変更する。

 

・train=train.txt

のところは /darknet/train.txt が存在するパスを書く。

 

パス自体は絶対でも相対でも大丈夫だが、

自分は絶対パスを書いていた。

 

 

・valid=test.txt

のところもtrain.txtと全く同じで

/darknet/test.txt が存在するパスを書く。

 

・namesとbackupは上の書き方から変更しなくても大丈夫。

 

よって具体的な例を出すと、こんな感じになる

 

classes=15
train = home/user/darknet/train.txt
valid = home/user/darknet/test.txt
names = data/data.names
backup = backup

 

③yolov3.cfg

 

こーいつが最もややこしい。

まず開くと

# Testing
# batch=1
# subdivisions=1
# Training
batch=64
subdivisions=16
width=608
height=608
channels=3
momentum=0.9
decay=0.0005
angle=0
saturation = 1.5
exposure = 1.5
hue=.1

 

こんな塊があると思う。

自前データを学習させるためには 

 上から5行目の初めて#が消える行

batch=64

batch=32

に変える。

 

これは変えなくても学習できるのだが、

変えたほうが、学習が回りやすくなる。

 

時折#の場所が変なとこについてるので上の通りにすると良い。

 

次に「コマンド+F」を利用してyoloという文字列を見つける。

これが3箇所あるはず。

 

[yolo]
mask = 0,1,2
anchors = 10,13, 16,30, 33,23, 30,61, 62,45, 59,119, 116,90, 156,198, 373,326
classes=80
num=9
jitter=.3
ignore_thresh = .7
truth_thresh = 1
random=1

こんな感じの塊。

ここの中のうちの、

 

classes=80

 

を先ほど②で変更した

classes=

における変更後の数字に書き換える。

 

[yolo]の塊それぞれにclasses書き換えポイントは存在するので、

3つ全て書き換える必要がある。

 

さらに検索したそれぞれの[yolo]の一つ上にある、

[convolutional]の中のfiltersの数字を

 

(classesの数字+5)*3

 

に書き換える。

 

具体的に、

例えばclasses=15だとすると、

 

[convolutional]
size=1
stride=1
pad=1
filters=255
activation=linear


[yolo]
mask = 0,1,2
anchors = 10,13, 16,30, 33,23, 30,61, 62,45, 59,119, 116,90, 156,198, 373,326
classes=80
num=9
jitter=.3
ignore_thresh = .7
truth_thresh = 1
random=1

と書いてあるところを

 

[convolutional]
size=1
stride=1
pad=1
filters=60
activation=linear


[yolo]
mask = 0,1,2
anchors = 10,13, 16,30, 33,23, 30,61, 62,45, 59,119, 116,90, 156,198, 373,326
classes=15
num=9
jitter=.3
ignore_thresh = .7
truth_thresh = 1
random=1

に書き換える。(この60は(15+5)*3=60によって算出されたもの)

 

[yolo]が合計3箇所あるのでそれぞれについて訂正してあげて、

結局計6箇所修正をすれば良い。

 

これで完了。。。

 

④train.txt

 

これは簡単。

 

学習させるときに、

どこに学習用の画像とテキストファイルが入ってるかわからないと、

学習のしようがない。

 

なので、

train.txtに学習させたい画像のパスを全て追加する。

 

例えば学習させたいデータが

 

home/user/darknet/data/soccball_img1.jpg

home/user/darknet/data/soccball_img2.jpg

home/user/darknet/data/soccball_img3.jpg

home/user/darknet/data/soccball_img4.jpg

 

とかだったら、

素直にこのパスを全てtrain.txtに書けば良い。

 

自前の学習を回すときは、

train.txtの中身を全て削除してから

空のテキストファイルに学習させたいデータのパスを入れる。

 

あと気をつけなければならない点は、

学習させたい画像データと同じ名前のtxtファイルを

画像データと同じディレクトリに入れておくことだ。

 

これがないと学習できない。

 

txtファイルはlabelImgなどがアノテーションしやすくていい。

もちろんスクリプト書いて自動生成するのもあり。

 

 わかりやすくさっきの例をそのまま使うと

 

home/user/darknet/data/soccball_img1.jpg

home/user/darknet/data/soccball_img2.jpg

home/user/darknet/data/soccball_img3.jpg

home/user/darknet/data/soccball_img4.jpg

 これらの画像を学習させたければ、

 

home/user/darknet/data/soccball_img1.txt

home/user/darknet/data/soccball_img2.txt

home/user/darknet/data/soccball_img3.txt

home/user/darknet/data/soccball_img4.txt

も用意しましょうということだ。

 

txtファイルの中身は

 

<クラスNo.> <領域の中心のx座標> <領域の中心のy座標> <領域の幅> <領域の高さ>

 

となって入ればオーケーだ。(この中身の作り方もlabelImgを使えば手軽にできる)

 

ここまで全て変更を完了したらもう後は学習を回すだけ!

 

./darknet detector train cfg/voc.data cfg/yolov3.cfg darknet53.conv.74 

 

このコマンドを走らせれば後はもうだーっと学習が進むだけ。

 

学習のアヴェレージが1.5くらいまで下がったら

もう学習はある程度完了しているので最後まで学習させ切らずとも、

 

画像認識はできるようになっている。

 

ここまでの手間を書いていないのだから、

不親切!と思ってしまうだろう。

 

ただし

使えるようになると非常に便利なので、

 

ぜひ粘って使ってあげてください、、

 

Windowsでdarknetのyolov3を使うことに成功した(Ubuntuでは失敗)

画像認識の人工知能の最新版「darknet yolov3」

従来のyolov2よりスピードが落ちたが認識率が高くなった。

f:id:Ryotaro_Kubo:20181225233136p:plain

 

このyolov3で自分の好きな画像を学習させると上の写真のように諸々写真を見せるだけで「dog」など識別してくれるようになる。

 

このyolov3のいいところは非常に楽に使える点であろう。

git clone https://github.com/pjreddie/darknet

cd darknet

ここでもしGPU環境を搭載しているのであればmakefileを開いて

GPU=0をGPU=1

また自分の環境に応じて、CUDNNやOpenCV等の値も変更するといいと思う。

変更を保存した後は

make

コンパイルをする。

次に、

wget https://pjreddie.com/media/files/yolov3.weights

でウェイトを入れればdarknet自体はもう使えるようになっている!何とも楽なもんだ。

./darknet detect cfg/yolov3.cfg yolov3.weights data/dog.jpg

試しにサンプル画像を入れてみると

f:id:Ryotaro_Kubo:20181225233136p:plain

こいつが無事darknet直下のprediction.jpgに出力される。

 

ちょっと今日は時間がないからdarknetでの自前学習データのtrainの注意点等は明日書くことにする。

 

ここからが本題。

Windows10の環境下でVertual box にUbuntu18.04を入れてdarknetをGPU環境で設定しようとしたのだがこれが難しい。試したことと成功失敗を書こうと思う。ちなみにGPUはGeForce980だったかな、、(あまり覚えていない)

 

①Ubuntu18.04上でNviida-driver396を入れて動かそうとした(全然無理だった)

そもそもNvidia-Driver396が入ってくれなかった。詳しい人に聞いてみたりググりま蹴ったりしたけどみんな無理って言ってるからVertual box上のUbuntuでCUDAをうまいことするようにしてやることはバージョン的に無理っぽい。

 

Nvidia Docker2を入れて動かそうとした(無理だった根本から)

なんかこれでできてる人とかネット上にいたので試してみた。だがしかし、、そもそもWindows10ではNvidia Docker2は動かないんだとさ。これでdarknet環境にGPUつけて整備するのは無理なんだってさ!というわけで撤退。

 

Windows直下にdarknetをぶち込む(大成功!!!!!)

これだった、しのごの言わずこれすりゃいけた。

 

github.com

このサイトにyolov3をWindows用にリポジトリしてくれたものがある。

インストールしなければならないものは、

Visual Studio community 2015 もしくは Visual Studio community 2017

・CUDA 9.2

・cuDNN 7.1 

OpenCV 3.4.0(Winpack)

上から順にインストールするのが無難かな。

 

インストールしたら、

Windows mark+pauseで環境設定を開いてpathに

C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v9.2\bin

とcuDNNのbinのpathを追加する。

ただし2つ追加するのもややこしいので、cuDNNのbin,include,libをそれぞれCUDA/v9.2の中のbin,include,libに入れてしまうという(邪道な)裏技もある。

後はOpenCVの中のdllが存在するディレクトリ(例C:\opencv\build\x64\vc14\bin)にもPathを通しておく。

これで下準備は完了。

こっからソースコードをどかっとインストールして、

build/darknet/darknet.sln

を先ほど入れたVisual Studio community(2015か2017)で開く。

 

 まずはプロジェクト名を右クリックして「ビルドの依存関係」→「ビルドのカスタマイズ」→「CUDA9.1のチェックを外してCUDA9.2にチェックを入れる。」

そして右下あたりにある設定ボタンを押して、

構成→Release

プラットフォーム→x64

に変える。ここでポイントなのだが、基本的にデフォルトの設定はこの構成になっていない。

設定の様々な要素ごとにちまちま構成とプラットフォームを選択できるところがあるのだが、これらは全て上記のReleaseとx64に変えなければならない。じゃなきゃ変なもん参照してエラーが起きる。

 

それを終えたら後もう一息。

設定ボタンから

C/C++」→「全般」→「追加のインクルードディレクトリ」を編集して先ほどpathに追加した

C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v9.2\bin

C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v9.2\include

C:\opencv\build\x64\vc14\include

こいつと後はincludeのpathを通す

そして同じく設定ボタンから

「リンカー」→「全般」→「追加のライブラリディレクトリ」を編集して

C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v9.2\lib

C:\opencv\build\x64\vc14\lib

を追加する。

 

まあ要するに、include系のpathは全部追加のインクルードディレクトリに、lib系のpathは追加のライブラリディレクトリに入れましょうということです。

 

ここまでくればもう終わり。

後はビルドすれば

build\darknet\x64

このファイル下にdarknet.exeが出来上がる。コマンドプロントでこいつをひらけば晴れてyolov3はWindows直下で働くようになる。

 

結論引っかかりポイントだったのは

①ちゃんとパソコンの環境変数にpath通したか?

②構成とプラットフォーム全部ちゃんと変えたか?

③includeとlibのpathちゃんとC/C++とリンカーのところに追加したか?

 

この3つにつきたかなあ。いやあ長い戦いだったけど動いた時はなんかちょっと感動した。

 

明日はちょっと戻ってyolov3の環境の整え方(Linux編)でも書こう。

 



「20代の生き方で人生は9割決まる!」(金川顕教著)読書レビュー

現在19歳

の僕にとって「20代の生き方で人生は9割決まる!」というタイトルは購入を決意するには十二分なタイトルだった。

f:id:Ryotaro_Kubo:20181224170406j:plain

 

内容からいうと面白かった。

デザイン的な読みやすさは素晴らしかったが、いっぱい文書けという割にはこの本1章ずつがツイートみたいで短かったような、、、でも嫌いじゃない!笑

 

後々内容を思い出せるように、気になった・気に入ったところをまとめておこうと思う。

 

①「人と真逆の道を進む覚悟を持つ」

この言葉はよく聞く言葉なので、ここに目から鱗というわけではない。このページに書かれていたことで

「副業をして、今よりちょっとだけ収入アップをしたい、というような、どっちつかずの選択肢が一番悪い。」

なるほどこれはすごく納得ができる。普通のサラリーマンの月収の倍は副業で稼げるようになるのが最低ラインと心得るべきかなと感じた。

今はまだやっていないが、今年の年末にはビジネスコンテストに出るための草案を考えようと思っている。これらの学びと実践の後に副業(学生なので副業と言っていいのかはわからない)を始めようと思う。

 

②「長い文章を書く習慣を身につける」

金川さんは毎日2千字程度のメルマガを書いているらしい。

確かに、ツイッターやラインなどの短い文で物事を伝えるツールが増えていることもあり、まとまった文章で考えを伝える機会は減ってきている。1日最低400字は書けとこの本には書いてあるので、これからのブログは1日800字以上をノルマとする。

ただしダラダラ書いてもしょうがないので、1ブログにつき800字とする必要はないかなと考えている。

 

③「”お金の知恵”を身につける」

20代で絶対に身につけておきたいのが”お金の知恵”つまりフィナンシャルリテラシーらしい。

僕は、お金に働かされる人生はいやだ。お金を動かし働かせて、人のためになるサービスを築き上げたい。そのためにもフィナンシャルリテラシー、勉強するぞ。

 

④「現状維持を捨てる。それを死ぬまで繰り返す」

この章の中で目を引いた文章は

「大失敗はかなりの確率で大変革のきっかけになったりする。」

というフレーズだ。僕は、とりあえず年末のビジネスコンテストへのチャレンジを念頭に置いているが、日々のチャレンジ(変革)として毎月何かそう言ったものにチャレンジしても楽しそうだなと思った。

 

⑤「第一印象を磨く」

うん。これも大事だな。

かっこいい顔や声なんて先天性じゃないか!と多くの人は考えるだろうがそんなことはない。自己投資次第でいかようにもなるし、そもそも初対面での明るい挨拶と明るい表情だけで第一印象は洗練される。第一印象を磨くとはそういうことだろう。

 

⑥「お金がすべて、ではないとわきまえる」

この章には驚いた。ここまで散々、やれ睡眠時間削れだの、やれ合コンは4年に1回だの説いて、カネカネ言っていたいた人が「いやでも金がすべてではないんですよねえ」とか言い出すんだからそれはびっくりである。

だが読んでいくと、ちゃんと説明があった(よかった)。

確かにお金がなきゃ何もできん。けど、お金があるから=幸せとは言わない。

お金は所詮紙切れで、お金をどう使い動かすかというところに幸せが人それぞれ存在するということなのだ。すごく納得。

多くの人々とおそらく同じで現状の僕にとっての幸せは高級なベッドで寝たり美味しいご飯を食べるなどのお金を気にせず裕福に暮らすことができる、ということだがそれはお金をそういったことに使うから幸せなのだろう。そしてその幸せのためにはお金を稼げ必要がある、というロジックなのだ。

 

うん、とても面白かった。1年後この記録を見に戻ってきて、自分がその時どう思うのか、それも楽しみになった。。。

「スマホを落としただけなのに」読書レビュー

昨晩ブックオフに行った。

当初の目的は漫画を大人買いすることだったのだが、漫画コーナーを見るよりも小説やAI関連のコーナーをうろつく方が楽しいと最近感じるようになった。

結局下の小説2冊・人工知能に関する本3冊・啓発本1冊の計6冊を購入した。

f:id:Ryotaro_Kubo:20181224132921j:plain

本を買うときに気にすることは、基本的にはデザインとタイトルである。有名な本でも文字の大きさが気に入らなかったらなかなか読む気にはならない。小説はまあ文庫本で読み慣れているので面白ければなんでもいいけど。

 

というわけで今日早速「スマホを落としただけなのに」を読んでみた。

f:id:Ryotaro_Kubo:20181224134614j:plain

この話は現在(もう終わったのかな?)映画化もされており、ぜひみてみたいと思っていた。実際見るつもりだったのだが、映画より本の方が安いということに気がついたので本を買ったのである。

 

率直な評価を述べると面白いの一言に尽きる。

主人公・犯人・警察の3つの側面から物語は描かれている。巻末の解説にも書いてあったが、これだけ1人称を変えながら話を展開しているのによく重複した説明もなく描けるものだ。その文才には脱帽をした。

確かに、捜査する側の描写にリアリティが欠けるという点は否めないが一気に読むことのできたスピード感ある展開は映画化にぴったりだろう。

この小説のもう一つ素晴らしい点は、やはり「日常からサスペンスを生み出した」という点にあろう。スマホを落として個人情報を抜かれる、なんてことは現代であれば誰にでも起こりうる話である。きっと年末ジャンボの宝くじを当てる以上に確率は高いだろう。自分のことのように小説を読み始めると、もうその時点で作者の術中に嵌っているのである。僕もしてやられた。

 

自分ごととして捉えることの影響の大きさは例えば僕の興味の矢先である災害研究などにも当てはまる。この辺の話はまた近い未来に書くとしよう。

 

どうでも良いが、小説自体は確かに面白かったのだが巻末の解説での作者の褒めちぎりっぷりは持ち上げてますよ感が激しくすぎて少々笑ってしまった。もしそのつもりで書いていたわけではないのならばもっと自然な褒め方をしてほしいものである。