線形代数ライブラリEigenの遅延評価について

EigenはC++で書かれた線形代数ライブラリである。特徴の一つとして、式の実装にtemplate機能を活用している点があり、これにより 遅延評価 (lazy evaluation) を実現している。遅延評価を適切に使うことで、計算コストを削減できることがある。 Eigen Eigen…

比較データと確率モデル

個のアイテムからなる集合 を考える。本記事では、これらのアイテム間の比較に基づく観測データ(例えば二者間の勝敗など)に対して、適当な確率モデルを導入することで、その事象を説明することについて考える。また、その確率モデルの潜在変数を、観測デー…

共分散行列 (Covariance Matrix) の行列式 (determinant) の対数 (log) を計算する

下記ライブラリのガウス過程回帰 (Gaussian Process Regression) の実装の際に悩んだ点をメモしておく。 github.com いつ行列式の対数 (log-determinant) を計算する必要があるか 例えば、多変量正規分布 (multivariate normal distribution) が関連する統計…

既に実行中のジョブを走らせたまま端末を閉じる際の手順メモ

計算サーバ等で既に実行し始めてしまった時間のかかるプロセスについて、走らせ続けたまま端末を閉じたいことがある。 実行し始める前のプロセスについては、 nohup を使った方法がある。 SSHからログアウトした後もプロセスを起動しておく方法 - Qiita nohu…

対数正規分布 (log-normal distribution) の可視化

0よりも大きい値しかとらない確率変数*1について、その事前分布を設定するときに、対数正規分布 (log-normal distribution) を用いることがある。 Yuki Koyama, Issei Sato, Daisuke Sakamoto, and Takeo Igarashi. 2017. Sequential Line Search for Effici…

CMakeで管理するプロジェクトでEigen 3.Xを使うときのTips

Eigen 3.3以降 Eigen 3.3以降は find_package(Eigen3 REQUIRED) として、 target_link_libraries(mylibrary Eigen3::Eigen) とすれば良い。 Eigen 3.3以降に関する公式ドキュメント: eigen.tuxfamily.org なおmacOSのHomebrewで brew install eigen とする…

CMakeでビルドした実行プログラムのあるディレクトリにリソースファイルをコピーする

やりたいこと CMakeを用いてプロジェクトを管理しているときに、ビルドした実行ファイルと同じディレクトリ(またはそこから相対的に定義されるディレクトリ)に画像データ等のリソースデータをコピーしたいという状況を考える。 リソースファイルは、例えば…

オイラー角による回転行列の表現まとめ

免責・注意:本記事は、その正しさを一切保証しない。できるだけ出典を記すようにするが、特に、要出典・要確認等と書かれただけの箇所は注意が必要である。また、現時点では未完成で、随時追記・更新していくつもりである。 右手系・左手系について 座標系…

ベクトルによる微分のレイアウト(分子レイアウト記法と分母レイアウト記法)

2つの異なる記法と混乱 ベクトル(や行列)による微分には2つの異なるレイアウトが用いられる。 分母レイアウト記法 (Denominator Layout) 分子レイアウト記法 (Numerator Layout) これらは演算結果が異なるため、意識して用いないとしばしば混乱の元となる…

知覚を考慮した色差 CIEDE2000 とその実装

色差の指標 CIEDE2000 色差、つまり2つの色の距離を計算する方法はいくつかあるが、人間の知覚を考慮した指標である CIEDE2000 を用いるのが良いことが多い。 Color difference - Wikipedia 新しい色差式(CIE DE2000)について。-楽しく学べる知恵袋 | コニ…

macOSでCMakeを使ってビルドする際にQt 5へのパスを渡す

Qt 5をライブラリとして用いるプログラムをCMakeを使ってビルドする際、例えばQt 5 Widgetsを使う場合はCMakeLists.txtに find_package(Qt5Widgets REQUIRED) または find_package(Qt5 COMPONENTS Widgets REQUIRED) などと記述することになります*1。しかし…

等式制約あり最適化問題と拡張ラグランジュ乗数法

拡張ラグランジュ乗数法 等式制約あり最適化問題 *1を解くためのアルゴリズムとして、拡張ラグランジュ乗数法 (augmented Lagrangian algorithm) という手法があります。これは、同じく制約あり最適化問題を扱うための手法であるラグランジュの未定乗数法 (t…

Directional Field (方向場) の種類を整理する

Directional field (方向場)*1 や vector field (ベクトル場) についてのメモです。次の論文を参考にしています。 Directional Field Synthesis, Design, and Processing Amir Vaxman, Marcel Campen, Olga Diamanti, Daniele Panozzo, David Bommes, Klaus …

論文読み: Differential Coordinates for Interactive Mesh Editing (SMI 2004)

以下の論文に関するメモです。 Differential Coordinates for Interactive Mesh Editing Yaron Lipman, Olga Sorkine, Daniel Cohen-Or, David Levin, Christian Roessl, Hans-Peter Seidel International Conference on Shape Modeling and Applications (S…

追実装: Projective Dynamics (SIGGRAPH 2014)

この記事の概要 現在用いられる物理エンジンの多くは position-based dynamics (PBD) [Muller et al. 2007] を基礎としている *1 近年提案された projective dynamics [Bouaziz et al. 2014] は PBD より優れた性質を持っているらしい そこで projective dyn…

最適化計算アルゴリズムCMA-ESのライブラリlibcmaesを使ってみる

CMA-ESについて CMA-ES (Covariance Matrix Adaptation Evolution Strategy) は連続最適化アルゴリズムの一種です。日本語では共分散行列適応進化戦略と呼ばれます。進化戦略に基づいて、目的関数 を最小化する点 を計算するために使用されます。特徴として…

ベクトルや行列による微分の公式

ベクトルや行列に関する微分演算でよく使う式です。小文字ボールド体はベクトル、大文字ボールド体は行列を表しています。 基本 応用(基本の式から導出可能) その他 参考URL Matrix calculus - Wikipedia http://www.colorado.edu/engineering/CAS/courses…

論文読み: From Inspired Modeling to Creative Modeling (The Visual Computer 2016)

はじめに 今回紹介するのは、最近 Springer 社のジャーナル The Visual Computer に掲載された論文です。全体を大雑把に触れつつ、印象に残ったフレーズなどを引用しながらまとめたいと思います。Daniel Cohen-Or and Hao Zhang. From inspired modeling to …

UnityのNative Pluginを作ってC++のコードやライブラリを使う

概要 UnityといえばC#で開発するのが基本ですが、Native Pluginという機能を使えば、他の言語 (C++など) で書かれたコードを呼び出すことができます。今回はじめてNative Pluginを作ってみたので、調べたことなどをメモしておきたいと思います。 C++のライブ…

論文読み: Position Based Fluids (SIGGRAPH '13) その2

実装してみた この記事は過去に書いた記事の続きです: yuki-koyama.hatenablog.comこれまで流体シミュレーションを実装したことが一度もなかったため、一度ぐらいやってみようということで、最近流行りの Position-Based Fluids(のようなもの)の実装に挑…

対話型機械学習 (Interactive Machine Learning, IML) について

普段は Computer Graphics や Human-Computer Interaction を勉強しているのですが、最近は機械学習も少し勉強しています。今回は Human-Computer Interaction とも関わりの深いトピックである「対話型機械学習 (Interactive Machine Learning, IML)」につい…

共分散行列を含む多次元のガウス関数の微分

目的:ガウス関数の微分 共分散行列 (バンド幅行列) を用いて表された多次元 (多変量) で異方性のガウス関数 (多変量正規分布) の微分 (勾配) を考えます。微分したいガウス関数の形は だとします。ただし は正値対称な共分散行列 (バンド幅行列) で、 です…

Multidimensional Scaling (多次元尺度構成法, MDS) の計算方法と実装

Multidimensional Scaling (MDS) について少し勉強したのでメモしておきます。 Multidimensional Scaling とは はじめに 日本語では「多次元尺度構成法」と呼ばれる統計テクニックの一つです。英語版ウィキペディアの記事が詳細です。多次元尺度構成法 - Wik…

日本人研究者によるSIGGRAPH論文

概要 日本人研究者によるSIGGRAPH論文 (2014--2015年分) の情報を以下のページにまとめました。せっかくなので公開します:SIGGRAPH Papers by Japanese ResearchersYouTube動画の埋め込みや著者の個人ページへのリンクも含んでおり、日本人研究者の活躍ぶり…

論文読み: Solid Simulation with Oriented Particles (SIGGRAPH 2011)

今回は古い論文の紹介です。2年前にこの手法を実装したことがあるのですが、そのときにキャプチャした動画もいくつか紹介します。 Matthias Müller and Nuttapong Chentanez Solid Simulation with Oriented Particles SIGGRAPH 2011 研究概要 Position-Bas…

情報検索のための Learning to Rank の概要

この記事では以下の文献の第一章の最初の方をざっと読んで得た知識を簡単にメモしています。事前に断っておくと、私は情報検索 (Information Retrieval, IR) の専門家でもありませんし、機械学習の専門家でもありません。誤り等ありましたらコメント欄にてご…

"Character Animation" セッション論文紹介 (SIGGRAPH Asia 2014)

来週月曜日(2014年12月15日)、私が所属する五十嵐研究室にて SIGGRAPH セミナーが行われます。 SIGGRAPH Asia 2014 - SIGGRAPH Seminarこれは、SIGGRAPH Asia 2014 で発表された全ての論文について、1セッションあたり15分以内にまとめて参加者同士で紹…

空の Subversion レポジトリを git-svn しようとすると失敗する

まだコミットが存在しない空の Subversion レポジトリに対して $ git svn clone [レポジトリの場所]を実行すると、clone 自体やその後の commit は成功するものの、push しようとすると Unable to determine upstream SVN information from working tree his…

論文読み: Computational Design of Linkage-Based Characters (SIGGRAPH 2014)

4次元プリンタ 私が勝手に提唱している「4次元プリンタ」という概念があります。(ありふれたアイデアなので別の人が全く同じアイデアを全く同じ言葉で既に発表しているかもしれません。またもっと的確な言葉もあるでしょうが、分かりやすいのでこの言葉を…

論文読み: Projective Dynamics: Fusing Constraint Projections for Fast Simulation (SIGGRAPH 2014)

Sofien Bouaziz, Sebastian Martin, Tiantian Liu, Ladislav Kavan, Mark Pauly Projective Dynamics: Fusing Constraint Projections for Fast Simulation SIGGRAPH 2014 全体の概略 物理シミュレーションのための time integration の手法として、projecti…