2018年12月2日日曜日

caffe-ssd on Ubuntu 17 with CUDA

さて、caffe-ssd branchをUbuntu 17上でビルドしようとすると、いろいろスタックするが、やっとちゃんとビルドできたので、ご報告。
問題は、CUDA 8を使おうとすると、gcc-5を使わないといけないこと。そうすると、DistributionのBoostではリンカが通らない。これはDistributionで使われているBoostが新しいコンパイラで作られているため、Manglingの違いだかでリンカが関数を見つけられない事による。
そこで、まず、boost-1.65.1をgcc-5系のコンパイラでビルドする。

 ./bootstrap.sh 
 ./b2 install -j2 --prefix=/home/habe/boost_1_65_1 toolset=gcc-5

次に、Caffe-ssdをビルドする。

 export BOOST_ROOT=/home/habe/boost_1_65_1/
 git clone https://github.com/weiliu89/caffe.git
 cd caffe
 git checkout ssd

これでcaffe-ssdのソースが用意された。ここで、cmakeのための作業ディレクトリを作成して、そこでcmakeを使う。その際に、コンパイラをgcc-5を使うことを指定する。

 mkdir BUILD
 cd BUILD
 ccmake ..
 make -j8

ccmakeはUIが呼び出されて自分でいろいろパラメータを指定できる。boostは環境変数BOOST_ROOTで指定されているので勝手にセットしてくれる。

 CMAKE_CXX_COMPILER               /usr/bin/g++-5                                                                                                      
 CMAKE_CXX_COMPILER_AR            /usr/bin/gcc-ar-5                                                                                                   
 CMAKE_CXX_COMPILER_RANLIB        /usr/bin/gcc-ranlib-5                                                                                               
 CMAKE_CXX_FLAGS                                                                                                                                      
 CMAKE_CXX_FLAGS_DEBUG            -g                                                                                                                  
 CMAKE_CXX_FLAGS_MINSIZEREL       -Os -DNDEBUG                                                                                                        
 CMAKE_CXX_FLAGS_RELEASE          -O3 -DNDEBUG                                                                                                        
 CMAKE_CXX_FLAGS_RELWITHDEBINFO   -O2 -g -DNDEBUG                                                                                                     
 CMAKE_C_COMPILER                 /usr/bin/gcc-5                                                                                                      
 CMAKE_C_COMPILER_AR              /usr/bin/gcc-ar-5                                                                                                   
 CMAKE_C_COMPILER_RANLIB          /usr/bin/gcc-ranlib-5                                                                                               

make -j8した後暫くすると、以下の様なログが出て終了。

Scanning dependencies of target convert_cifar_data
[ 98%] Building CXX object examples/CMakeFiles/convert_cifar_data.dir/cifar10/convert_cifar_data.cpp.o
[ 98%] Linking CXX executable cifar10/convert_cifar_data
[ 98%] Built target convert_cifar_data
Scanning dependencies of target convert_mnist_siamese_data
[100%] Building CXX object examples/CMakeFiles/convert_mnist_siamese_data.dir/siamese/convert_mnist_siamese_data.cpp.o
[100%] Linking CXX executable siamese/convert_mnist_siamese_data
[100%] Built target convert_mnist_siamese_data
Scanning dependencies of target pycaffe
[100%] Building CXX object python/CMakeFiles/pycaffe.dir/caffe/_caffe.cpp.o
[100%] Linking CXX shared library ../lib/_caffe.so

これでcaffe-ssd環境が構築された。あとは、$CAFFE_ROOTを指定し、PYTHON_PATHにcaffeのpythonのディレクトリを追加して終了。

2018年11月19日月曜日

AVPlayer from AVFoundation

学生の時はFORTRAN。社会人になってから、C, Pascal。そしてC++をコンパイラもままならないうちから使い出して、四半世紀。もう新しいのは使わないかなと思っていたら、Javaを使ってアプリを作成。そして最近はObjective-Cと格闘中。という程言語そのものでは苦労はしてないかも。
先週末から、ずっと悩んでいたのが、AVPlayerとかAVAssetとかをローカルファイルから作成するところでずっと悩み続けていた。リソースとして使うと問題ないのだが、ローカルファイルから読み出そうとしてもどうしてもダメ。様々なチェックを行うのだが、読み出せない。ファイルの情報を別に要しなければならないのかとか、いろいろ試してみたがダメ。今日はもう悲しくなってしまうくらいだったが、慣れ親しんだXCodeのはずだったが、Constraintなどというタブがあるのに気づいて、中を見たらSandboxにチェックが入っていた。外したら今までの苦労は何だったのかっつーくらい普通に思った通りに動き出した。
どうしてこんな所にチェックが入っていたのやら。俺の貴重な時間を返せぇ。;;

2018年11月13日火曜日

まむし指

私の手の親指は逆側に90度くらいまで反ることが出来る。これができる人は多くは無いが少なくもない。指立て伏せとか、指圧とかの時に凄く力を乗せることが出来るので、多少ラッキーみたいに感じていた。
広辞苑や大辞林などの国語辞典には、まむし指とは「蝮の頭のような形に、第一関節が自由に曲がる」と書かれているので多分そうだと思っている。
ところが、ネットで調べると、短指症のことをいうと書かれている文書の多いこと多いこと。なんでこんなことになってるの。辞書を調べてから書けよ、と言いたい。
しかし、辞書に書いてある、自由に曲がるという記述はどうかと思う。指のメカニズム上、首のようにはぐるぐる回りはしないし、前にはみんな曲がるわけだし。なかには親指以外の指の第一関節だけを普通の方向に曲げているような写真もあったりして、これも勘違いしている。漫画(多分空手バカ一代)でそんな事が書かれていたので、たぶん鍛えれば普通に誰でも出来るはず。私は子供の頃から出来たのではっきりしていないが。
第一関節が以上に反れば、蝮の頭の形になる。逆だと角張っているのでまむし頭には見えない。と理解している。#金田一先生、教えて。

2018年10月26日金曜日

CAFFE: Using Apple BLAS

Caffeをソースコードからビルドするときには、一般的にはMakefile.configを編集して自分の環境に合わせるのがまっとうなやり方。LINUX上では、CMakeが使えたけど、macOSではうまくいかなかった。
CAFFEをなるべくmacOSで用意されているライブラリを極力使おうと思えば、BLASをAccelerate Frameworkのものを使いたい。そのための設定としては、Makefile.config内のBLASの設定の部分を、適当にblasとでもいれておけばAccelerate FrameworkのBLASを使ってくれる。問題は、このCAFFEのライブラリを使った自前のプログラムを動かすときに、

d.cpp:2:10: fatal error: 'cblas.h' file not found

というメッセージが出てしまう。これはBLASのCバインディング用のヘッダが見つからないというエラーだ。この手のヘッダは、/usr/includeあたりにリンクが張られていると思っていたが、macOS 10.12 (Sierra)のXcode9.2ではそうではないようだ。仕方が無いので、直接Frameworkのヘッダを指定する。つまり、
-I/System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks/vecLib.framework/Versions/A/Headers/


と指定してやらなければならない、みたいだ。面倒だな。/usr/includeにシンボリックリンクを張ってしまっても良いんじゃ無いか。

2018年10月18日木曜日

Access Denied. You don't have permission to access "SITE" on this server.

掲題のエラーが少し前にSafariでSMBCのサイトにアクセスした時に出現した。びびった。とりあえず、SMBCに電話。ちゃんとサーバは動いているとのお返事。次にプロバイダ(ISP)に電話。これも通常運転。
そこで、次にDNSでSMBCを引いてみた。そして別のISPのサーバからDNSを引いてみた。全然違う。これは、DNS Changerなのか。ウィルスか。とりあえずCISCOのCLANSCANでチェック。なんもでない。アンチウィルスソフトを片っ端からダウンロードしてスキャン。出てこない。。。。
いろいろすったもんだしたあげく、ルータが原因だと言うことが分かった。調べてみると、いろいろ困っている人が世界中にいらっしゃる。アクセスできないサイトは特定のサイト。www.smbc.co.jp, www.ebay.com, www.usps.com, www.costco.com などが上げられていた。逆引きすると、これは全部akamaiedge.netのサーバ。なにか有るのか。多くの人はルータのリセットで元に戻ったのこと。わたしんとこでは、ひとつはこけて、もう使えなくなったが、もう一つはリセットで元に戻る。
解決方法が分かったけど、リセットばっかしてらんないしな。どうにかならんかな。

2018年9月15日土曜日

Caffe-ing GoogleNet Training with ImageNetDogs

There are several networks examples in Caffe distribution. So I suppose I would run caffe with these networks. To do so, a bunch of labeled images are necessary. After googling the net,  I found ImageNet Dogs from Stanford University would be nice.
First of all, I have to restore the images in the lmdb database. Fortunately, there is a script into it. My GPU memory only have 2GB, so I change the image size from 256 to 128.

I take GoogleNet for the first try. The ProtoBuf text should be changed because the number of classification is changed from 1000 to 120. There are three to be changed.
The other lines to be changed are crop_size. The default crop_size is 224 but this is smaller than the prepared image size 128. So I replace the 224 to 112. There are 2 places to be changed.

These are the all to be changed. So we are ready to LEARN now.

But Caffe be down at loop5.
I0915 21:26:05.566467 2647491520 net.cpp:157] Top shape: 32 1024 3 3 (294912)
I0915 21:26:05.566473 2647491520 net.cpp:165] Memory required for data: 442749448
I0915 21:26:05.566479 2647491520 layer_factory.hpp:77] Creating layer pool5/7x7_s1
I0915 21:26:05.566488 2647491520 net.cpp:100] Creating Layer pool5/7x7_s1
I0915 21:26:05.566493 2647491520 net.cpp:434] pool5/7x7_s1 <- inception_5b="" output="" span="">
I0915 21:26:05.566540 2647491520 net.cpp:408] pool5/7x7_s1 -> pool5/7x7_s1

F0915 21:26:05.566615 2647491520 blob.cpp:32] Check failed: shape[i] >= 0 (-1 vs. 0) 

Top shape: 32 1024 3 3 indicates the kernel size should be smaller than 3. Current value is 7 at pool5 layer. So the error indicates kernel size 7 should be changed to 3. Now the network seems to work fine with new specifications. Let me see...

2018年9月10日月曜日

Congrats! 大阪さん

WOW WOWにはいろかな、やめよかな。でやめてたので失敗か。NHKが放送してくれなかったので残念ながら、試合は断片的しか見てないし、とんでもない試合だったようなので、はいっとけば良かった。
でも、そんなひどい状況の中でも崩れなかった彼女はすごい。こういう大舞台で勝てる勝てないは、その後、こじらせるかこじらせないか大きく関係すると思う。錦織選手はチャンスを手にできなかったせいで、今もまだこじらせて大舞台で勝てない。マスターズにも勝ててないし。この最大の大会で勝ちきったのはすばらしい。
せっかくの初優勝が少し残念な感じになってるのがかわいそうだけど、満足できない状態になったのは逆に追い風になるかも。
スピーチで I'm sorryはないよな。かわいそすぎる。でも、良い子だよね。