cvl-robot's diary

研究ノート メモメモ https://github.com/dotchang/

メモ:Windowsで使うKerasのバックエンドのtensorflow-gpuを好きなCUDAとPythonのバージョンで使う方法

pip install tensorflow-gpuでは、古いバージョンのCUDAやcuDNNしか対応してくれないので使えません。pythonのバージョンも限定されます。

tensorflowとkerasのインストール

新しいバージョンのCUDAやPythonを使いたい場合は、下記のサイトを参考に、
qiita.com
おそらく非公式のここから、欲しいバージョンに対応したwhlをダウンロードしてきます。
github.com
インストールは、例えばtensorflow_gpu-1.10.0-cp36-cp36m-win_amd64.whlなら

pip install tensorflow_gpu-1.10.0-cp36-cp36m-win_amd64.whl

GPU対応の確認

このtensorflow_self_check.pyをGoogle Chromeで開いてテキストファイルにコピペして、拡張子を.pyに変更して実行します。
TensorFlow on Windows self-check · GitHub

MSVCで使うofxZmqのライブラリを更新

openFrameworksでzeroMQを使うとき、このアドオンがとても便利です。
github.com
ただ、添付されているライブラリが古くなってしまっているので、最新版で使えるようにしたいと思います。
zeroMQをMSVCで自前ビルドしようとすると、なんだかトラブルが多く発生して面倒くさそうなので、解決策はvcpkgを使うことです。

zeroMQのインストール

vcpkg install zeromq:x64-windows

includeパスとlibraryパスの指定

zmq.hppをソースの見える場所にコピーする。行儀が悪くてもいいなら、vcpkgのincludeディレクトリE:\vcpkg\installed\x64-windows\includeなど。

\\addons\\ofxZmq\\libs\\zmq\\include\\zmq.hpp --> E:\vcpkg\installed\x64-windows\include

includeパスにE:\vcpkg\installed\x64-windows\includeを加えます。
コピーが済んだらofxZmqのlibsフォルダを全て削除します。
ソースのどこかにライブラリの指定を追加。代わりにプロジェクトのプロパティで指定しても良い。

#pragma comment(lib, "E:\\vcpkg\\installed\\x64-windows\\lib\\libzmq-mt-4_3_1.lib")

zmqのdllファイルを.exeの場所にコピーする。もしくは、パスを通す。

E:\vcpkg\installed\x64-windows\bin\libzmq-mt-4_3_1.dll

vcpkgでEnglish Language Packが無いとか言われてインストールできない場合

Visual Studio Installerを立ち上げて、[変更]ボタンを押して言語パックの英語をインストールする。

新品Let'snoteを購入したときにパワーポイントで動画が再生できなかったときの対処法メモ

素のWindows10の動画Codecの対応はなんだかイマイチで、昔作ったパワーポイントファイルを使おうとしたときに動画が再生されない(静止画が表示されているだけ、動画が読み込まれない、動画を読み込むけれど動かない、など。)の困った問題が発生します。これを対処するには、各種の動画Codecを、WindowsMediaPlayerの64ビット版で読み込めるように追加してやる必要があります。PowerPoint自体が32ビット版でも(64ビット版のWindows10OSなら)WindowsMediaPlayerは64ビット版です。

具体的な対処例

K-Lite Codec Pack(のFull版)をインストールします。
www.codecguide.com
インストールを進めていくと、最後の方のダイアログでWindowsMediaPlayerの32bitか64bitかを選べと聞かれますので、64bitを選択します。他のダイアログの選択肢は、デフォルト設定で大丈夫です。

以上です。

octomapのoctovisのMSVCインストールメモ

以前、octomapをopenFrameworksで使うためにインストールしたことがありましたが、その際、可視化プログラムoctovisはQtを使うことが億劫でインストールしませんでした。
必要が出てインストールしてみたのですが、案の定ちょっと面倒くさかったのでメモを残します。
基本的には/octomap/octovis/README,mdに書いてあります。

QGLViewerのビルド

octomapのoctovisのソース中にQGLViewerというフォルダがあり、これを先にビルドする必要があります。

/octomap/octovis/src/extern/QGLViewer

1.Qt5をインストール
QtのダウンロードサイトDownload Qt: Choose commercial or open sourceから、インストーラをダウンロードして実行します。ライセンス要項が適合するならOpenSource版で構いません。
実行すると、アカウント登録を求められますので登録して進みます。次にインストールするバージョンを選択できますので、安定版Qt 5.11.2のMSVC 2017 64-bitなど好きなものを選んでインストールします。
2.環境変数Pathにqmake.exeの場所を追加
例として

E:\Qt\5.11.2\msvc2017_64\bin

3.VS2017の開発者用コマンドプロンプトを開く

cd octomap/octovis/src/extern/QGLViewer
qmake -t vclib QGLViewer.pro -spec win32-msvc

4.Visual StudioでQGLViewer.vcxprojを開く
x64プラットフォームの場合は、x86を基に構成マネージャーで追加する。あとは普通にビルド。

octomapのビルド

5. CMakeを通す
OCTOMAP_OMP, OCTOVIS_QT5, QT_QMAKE_EXECUTABLE, QGLViewer_LIBRARY_DIR_WINDOWSを設定して一度configureすると、上手く見つからなかった場合、Qt関係のDIRを指定するように指示されますのでこれを指定していきます。例. Qt5Core_DIR \Qt\5.11.2\msvc2017_64\lib\cmake\Qt5Coreなど。都合5個聞かれます。
自分の場合の例はこんな感じ。
f:id:cvl-robot:20181120135609p:plain

6.ビルド
cmakeで生成されたslnファイルをVisual Studioで開いてビルドします。octovis-sharedでエラーが出ます。
まず、octovisのプロジェクトのプロパティを開いて、リンカー→入力→追加の依存ファイルをすべてコピーします。
次に、octovis-sharedのプロジェクトのプロパティを開いて、リンカー→入力→追加の依存ファイルにすべて追加します。先行入力されていたものとダブリがあっても名寄せされますので、気にせずとも大丈夫です。
これでビルドが通るようになっているかと思います。

自分用読むべき論文メモ 2018年11月版

An Open-Source C++ Library for Robotics and Optimal Control
https://bitbucket.org/adrlab/ct
https://adrlab.bitbucket.io/ct/v2.3/ct_doc/doc/html/index.html
ROSが邪魔ー
adrl:software [LAB]
このLabのライブラリが面白い。

qiita.com
読まない理由がない。

タコの心身問題――頭足類から考える意識の起源

タコの心身問題――頭足類から考える意識の起源

上記のブルックスのエッセイでも紹介されているタコのkindle版はまだないみたい。

docs.google.com
勉強になります。

自分用読むべき論文メモ 2018年10月版

Randomly distributed embedding making short-term high-dimensional data predictable | PNAS
www.iis.u-tokyo.ac.jp
www.atmarkit.co.jp
今月、いろいろすごいニュースがあったけれど、これが一番凄そう

www.preferred-networks.jp
robotstart.info
eetimes.jp
news.mynavi.jp
それぞれの要素技術は分かる。でもそれがもう実時間で普通に動くアプリケーションが実装されているのが驚異的。

Shape Completion Enabled Grasping
2.5次元から3次元の復元と、DEX-NET的なグラスピング戦略。

[1810.04891] Dense Object Reconstruction from RGBD Images with Embedded Deep Shape Representations
密な3次元モデルの再構成。マージング

shiropen.com
息を吸いながら囁いて入力できる音声入力。さすが福本さん的な独創性の高い音声インターフェース。近い将来、すべてのスマホに標準採用されそうですね。

Luminar
トヨタが自動運転に採用、22歳が開発した「高性能センサー」の実力|WIRED.jp
自動運転の大激戦を制する? トヨタ注目のスタートアップが開発した「新しいセンサー」の正体|WIRED.jp
他のワンショット3D Lidarとかとの違いはどうなんだろう?

www.cepton.com
quanergy.com
TetraVue | Home
ムービー見ると、TetraVueすごいけど自動走行向けスペックとはちょっと違うような。

www.symphotony.com

wired.jp
wired.jp

pathak22.github.io

www.slideshare.net
speakerdeck.com

blogs.unity3d.com

mabonki0725.hatenablog.com
mabonki0725.hatenablog.com

Curiosity-driven Exploration by Self-supervised Prediction · Issue #308 · arXivTimes/arXivTimes · GitHub
「AIに好奇心を与えるとスーパーマリオやDoomが上達」、カリフォルニア大学バークレー校のチームが研究成果を発表 - Engadget 日本版
好奇心 深層強化学習

magiclantern.fm
有志のユーザ製のキヤノンの一眼レフデジカメ用ファームウェア。標準化してほしいぐらいの高機能。

topology-tool-kit.github.io
Topology Tool Kit。Qtが邪魔だなぁ

igl | Interactive Geometry Lab | ETH Zurich | Code

NDTのD2D Registrationを試してみる

NDTについて

NDT(Normal Distribution Transform)は、大規模な点群データをざっくりと扱いたいときに使う特徴量で、空間を適当なGridで分割してGrid内の点群分布を正規分布に表したものです。点群が多くなっても高速に計算できる、応用範囲が広く、多くのアルゴリズムで精度が思いのほか高いなどのメリットがあります。
NDTを使って位置合わせを計算するアルゴリズムもいくつか提案されていて、NDTと点群(P2D: Point to Distribution)、NDT-MCL(パーティクルフィルタ)、NDTとNDT(D2D: Distribution to Distribution)などが知られています。ROSのSLAMの位置合わせアルゴリズムとしてよく使われていたり、国内では、名古屋大学のAutoware[1], 豊田中央研究所[2], 九州大学の倉爪研究室[3]などが力を入れているようです。

NDT-D2D Registration

NDT-P2D, NDT-MCLはなんだか無駄が多い気がして使う気にならなかったのですが、NDT-D2DはNDT同士を対応付けて位置姿勢をニュートン法で求めるというシンプルな方法をとるので良さそうに見えます。
元の論文は[4]で、実装例はスウェーデンのエーレブルー大学にあります。
github.com
Linux環境でROSが使える人は、ROSパッケージが出ていますので素直にこちらを参照してください。
ndt_registration - ROS Wiki

NDT-D2DをWindowsで試したい

Orebro大のソースコードは一見大きなライブラリに見えますが、NDT-D2Dの部分だけを部分的に取り出しても動かすことができるようです。
意味づけラベルとNDTを一緒に使うというzaganidisさんの提案のse_ndtのコードの内、oru_minimalが参考になります、が、OcTreeなども省いてしまっているようなので、これを参考にオリジナルからソースコードを切り出してみます。
Semantic-assisted 3D normal distributions transform for scan registration in environments with limited structure - IEEE Conference Publication
github.com

NDT-D2DをWindowsのopenFrameworksで試す

github.com
に切り出したソースコードを置きます。gettimeofdayなどLinux用関数を強制的に置き換えていますので、Windowsでしか動かない部分があると思います。変更を加えたソースコードの周りには//////(スラッシュ五個)を置いていますので、修正時の参考にしてください。
依存ライブラリとして、PCLとopenCVが必要です。
cvl-robot.hateblo.jp
を参考に

vcpkg install pcl:x64-windows
vcpkg install opencv:x64-windows

を通してください。vcpkg integrate installをしてしまうと、openFrameworksが面倒くさくなるのでしない方が良いです。インストールフォルダに手動でインクルードパスとライブラリパスを通してください。

include path: C:\vcpkg\installed\x64-windows\include
library path: C:\vcpkg\installed\x64-windows\lib

ライブラリ名を手動で列挙するのは苦行なので、こちらの便利なアプリを使うと良いでしょう。
neno-garden.com

実行結果

(多分ライブラリの実装上の制限で)スケールを合わせる必要がありますが、ちゃんと位置合わせ出来ています。
初期位置
f:id:cvl-robot:20181005223953p:plain
赤い点が位置合わせ結果
f:id:cvl-robot:20181005223959p:plain
ICPじゃ初期位置合わせを厳密にやらないと収束しそうもないデータでも(ぴったりじゃないけど)収束している。

赤い丸が位置合わせ結果
f:id:cvl-robot:20181005224012p:plain

[1] autoware.ai
[2] https://ipsj.ixsq.nii.ac.jp/ej/index.php?action=pages_view_main&active_action=repository_action_common_download&item_id=107049&item_no=1&attribute_id=1&file_no=1&page_id=13&block_id=8
[3] https://www.jstage.jst.go.jp/article/jrsj/31/9/31_31_896/_pdf
[4] http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.818.9757&rep=rep1&type=pdf