メニュー

技術ブログ

Denso IT Lab.社員による技術情報の紹介

Denso IT Laboratory researcher's blog sites

数式

RSS

ページトップへ

Go-ICP グローバル最適なICP -Globally optimal ICP(2015 PAMI)-の解説

先日社内の勉強会で,グローバル最適なIterative Closest Point(ICP)アルゴリズム”Go-ICP”について紹介しました.

ICPは有名なところではKinect Fusionなど,3次元点群のレジストレーションに広く用いられています.基本的には,最近傍点の対応付けと姿勢(並進と回転)の推定を順次繰り返していくことで,点群間の2乗誤差を最小にするような姿勢を見つけようとアルゴリズムです.

ICPは原理上,点群間の姿勢がある程度離れると局所解に陥ってしまい正しくレジストレーションできないという課題があります.

そこで,局所性を改善したアルゴリズム(SoftAssign など)や,ローカルな特徴(Spin Imageや4PCSなど)を用いて大域的にレジストレーションする手法など多様なアルゴリズムが提案されていますが,グローバル”最適”な点群のレジストレーションアルゴリズムはあまり提案されていませんでした.

2013 ICCV,2015 PAMIの論文でグローバル最適なICPアルゴリズムGo-ICPが発表されました.詳しくはスライドで解説していますが,Branch and Bound(分枝限定)とVoxel ICPの組み合わせで効率的にSE(3)の6自由度パラメータ空間から最適な解を探します.

著者のページにソースコードが公開されていますので簡単に試すことができます.公開されているソースはテキストファイルから点群データを読み込んで姿勢をテキストファイルで書き出す仕様になっていますが,外部ライブラリの依存がなく簡単にMatlabのmex関数を作成できますので,いろいろ点群を変えて試したい場合はmex化がオススメです.


 

このエントリーをはてなブックマークに追加

激薄レンズレスカメラ FLAT CAM:Replacing Lenses with Masks and Computationの解説

先日社内の発表会で,2015年にRice Universityが発表した激薄カメラの紹介をしました.

いわゆる光学レンズを持たずに,ランダムに穴が空いたマスクを直接センサーの前に配置したハードウェア構成により薄型化を実現しています.

ガジェット系のメディアでも紹介されて少し話題になったので,知っている人も多いかもしれません.Gizmodoの紹介記事

このカメラは,タイトル通り”薄い”という特徴がありますが,もう一つ重要な特徴は”復元が高速”ということです.(デモではビデオレートで復元している様子が見れます).観測モデルや高速な復元の仕組みなど,少し技術的な観点から解説しました.

高速化の一番のポイントは,マスクを2つのランダムな系列のベクトルの外積により製作することこで,観測行列を小さな行列に分解できることです.これにより復元時に観測行列に掛ける擬似逆行列が小さく済むため,ランダムな2次元マスクパターン使う場合と比べて,大幅な高速化を実現しています.

以前私も少しだけ似たような研究をしていました.もし興味があればこちらも御覧ください.(Coded Lens: Using Coded Aperture for Low-cost and Versatile Imaging).このカメラは,マスクとレンズの間が18mm(Sony Eマウント)で製作しましたが,Flat Camは0.5mmということで,全然薄さが違います.


 

このエントリーをはてなブックマークに追加

El capitan でthunderbolt外付けGPUを使う

Mac OS のEl capitanでthunderboltで繋いだ外付けGPUを使う方法を説明します。

[対象]

Macで外付けGPUを認識できて嬉しい人は例えば

  • Matlabなどの数値計算ライブラリで大きな行列の計算をGPUを使って高速化したいひと
    • 私の目的はこれです
  • 動画や画像処理などGPGPUに対応したアプリを利用していて作業効率をアップしたいひと
    • Photoshopなどが高速なりなります.CUDA対応アプリはNVIDIAのサイトにのっています.
  • MacBookなどでディスクリートGPUを搭載していないけど、綺麗な映像でゲームをしたいひと
    • 私は試していませんがあまり効果がないと言っている人もいます.

[注意]

失敗すると最悪OSの再インストールになります.

起動しなくなった場合に復旧する方法も記載しますがそれでもうまくいかない場合は再インストールになります.試す前にTimeMachineなどでバックアップをとることをおすすめすします.

!!!自己責任でおねがいします!!!

[必要なもの]

  • Thunderbolt端子を備えたMac
    • OSは10.11,MacはiMac Late 2012で試したいます
  • Thunderbolt PCIe Expansion ケースとケーブル
    • NA-211TBなど (秋葉館などでうっています 10万ちかくします)
  • それなりに高級なGPU
    • 今回の実験ではNVIDIA Quadro K6000(VRAM が12288 MBもあります)

[やりかた]

ステップ1:SIPを無効にする

  • Command-Rを押しながらMac を再起動
  • UtilitiesからTerminalを起動し以下のコマンドを実行
    • csrutil disable
  • ”SIP”を無効にしましたみたいなメッセージが表示されます
  • 再起動

ステップ2: kext開発モードを有効にする

  • コマンドラインから以下のコマンドを実行
    • sudo nvram boot-args=”kext-dev-mode=1″

ステップ3:Kextファイルを書き換える

  • 以下の2つのファイルを書き換えます.
    • /System/Library/Extensions/NVDAStartup.kext
    • /System/Library/Extensions/IONDRVSupport.kext
  • これらのファイルを右クリックして”パッケージの内容を表示”をクリックして中のInfo.plistをかきかえます
  • それぞれのplistファイルから<key>CFBundleIdentifier</key> を探してそのエントリの終わり(</dict>の直前)に<key>IOPCITunnelCompatible</key><true/>を追加します
  • Kextパーミッションの修正
    • Kext Utilityを起動を起動すると自動でパーミッションの修正をしてくれます1分くらいまつと完了します

ステップ4:CUDA driverの(再)インストール

  • NVIDIAよりCUDAのドライバーをダウンロードしてインストールします
  • すでにCUDAラインバーをインストールしてある場合でもインストールしなおしますステップ4:接続
  • シャットダウン
  • 外付けGPUを接続
  • 電源ON

うまくいけばこれで認識します.

スクリーンショット 2015-11-11 午前9.07.09

外付けGPUにはディスプレーを繋いでいないので,12288 MBのほぼ全部を計算用に利用でき,大きな行列の掛け算もCPUでやる場合に比べて大幅に高速化しました.高速化の度合いはやりたい処理や実装に大きく依存しますが,GPUへのデータ転送が少なくなるように工夫することで,私の研究ではCPUで処理する場合に比べて10倍以上の高速化ができました.

今回の機材では,PCIレーン幅が内蔵がx16に対して,外付けはx8です.したがって,データ転送が頻繁にあるようなケースではかえって遅くなる場合があります.

 

[補足]

ステップ1でおこなったSIPの無効化について

El CapitanからSystem Integrity Protection (SIP)という機能が追加されています(“rootless” modeとも呼ばれるようです ).システムファイルをを書き換えるマルウェアからの攻撃に対する頑健性を向上させるために,システムファイルの書き換えをできなくしてしまう機能です.なのでEl Capitanにおいてシステムファイルはsudoでも書き換えられません.今回はシステムファイルを書き換える必要がありますのでステップ1でこれを無効にしています.

 

ステップ3でKextファイルの書き換えについて

この記事では,説明した2つのファイルに加えて,/System/Library/Extensions/AppleHDA.kext/Contents/PlugIns/AppleHDAController.kextを書き換えると説明がありますが,私の環境ではこれらのファイルを書き換えるとOSが起動しなくなりました.

 

OSが起動しなくなった場合の対処方法

ターゲットディスクモードで起動して他のMacから修正したKextファイルを元に戻します.それでもだめな場合はOSの再インストールになります.(私はうまく認識するまで3回OSを再インストールしました)

 

OSのアップデートについて

OSがアップデートすると(マイナーでも),せっかく書き換えたKextファイルが元にもどってしまい,外付けGPUが認識しなくなります.その場合は上記の手順を再度繰り返す必要があります.

 

NVIDIA Maxwell cards

今回使用したGPUはQuadroシリーズですが,GTX 750などのMaxwellシリーズの場合はAPPLEの純正ドライバではなく,NVIDIAのドライバーを使う必要があるようです.その場合はNVIDIA Webドライバーのインストールの必要があります.インストール方法は最後に示す参考サイトに記載があります.またこの場合には/System/Library/Extensions/NVDAStartupWeb.kextも書き換える必要があるようです.私の環境(Quadroの場合)では,Webドライバーを使うとOSが起動しなくなりました.

 

Hotplug

上記の方法で接続した外付けGPUはHot plugには対応しませんので,ケーブルを引っこ抜くとOSが落ちます.また,個体差もあると思いますが私が使ったケースはThunderboltケーブルの差し込みが緩いようでケーブルに触れると再起動してしまう場合もあります.

 

[参考サイト]

本記事はこのブログの情報をもとにかいています.私の環境ではここではで示してある方法そのままではOSが起動しなかったですが,試行錯誤の結果上記の方法で認識しました.

このサイトには様々な環境での成功・失敗談があります.上述した方法でうまくいかない場合は参考にしてください.

このエントリーをはてなブックマークに追加