takminの書きっぱなし備忘録 @はてなブログ

主にコンピュータビジョンなど技術について、たまに自分自身のことや思いついたことなど

Boost.PythonをAnaconda3の環境でビルド

Anaconda3を入れた状態でBoost.Pythonのビルドに手間取ったのでメモ。
"conda install boost"ではなく、わけあってBoostをソースからビルドしました。


作業環境は以下の通り

  • Ubuntu 16.0.4
  • Anaconda3-5.1.0
  • Boost 1.66.0

ここで、Anaconda3は

/home/takmin/anaconda3

に既にインストールされているものとします。


Boostをダウンロード

$ wget https://dl.bintray.com/boostorg/release/1.66.0/source/boost_1_66_0.tar.gz


以下のサイトに従ってBoostを解凍してコンフィグレーション
http://www.boost.org/doc/libs/1_66_0/more/getting_started/unix-variants.html

$ tar zxvf boost_1_66_0.tar.gz
$ cd boost_1_66_0
$ ./bootstrap.sh --with-python=/home/takmin/anaconda3/bin/python --with-ptyhon-root=/home/takmin/anaconda3


ここまではOK。次にb2コマンドでビルドしようとするとエラーが出ます。

$ ./b2
In file included from ./boost/python/detail/prefix.hpp:13:0,
                 from ./boost/python/list.hpp:8,
                 from libs/python/src/list.cpp:5:
./boost/python/detail/wrap_python.hpp:50:23: fatal error: pyconfig.h: そのようなファイルやディレクトリはありません
compilation terminated.


おそらく

~/anaconda3/include

へのパスは設定されても

~/anaconda3/include/python3.6m

へのパスが設定されていないためと思われます。
(OpenCV Pythonのビルドも同じところでハマった)


そこで、/home/takminの下にuser-config.jamというファイルを作成し、以下のように内容を編集します。


user-config.jam

using python : : /home/takmin/anaconda3/bin/python : /home/takmin/anaconda3/include/python3.6m /home/takmin/anaconda3/include : /home/takmin/anaconda3/lib ;


ここで"~/anaconda3/include/python3.6m"のように書くとビルドに失敗します。

$ ./b2
$ sudo ./b2 install

で無事ビルドとインストールに成功し、

/usr/local/lib/libboost_python3.so

が作成されていることも確認できました。

2018/02/04 CV勉強会「強化学習論文読み会」発表資料まとめ

第44回コンピュータビジョン勉強会@関東は、「強化学習論文読み会」というテーマで、株式会社Preferred Networks様の会場をお借りして行いました。

また、今回は午前中にPFNの前田新一先生による特別講演も行われ、初参加者も多く大盛況の回となりました。


例によって発表資料をまとめます。


コンピュータビジョン勉強会@関東
http://sites.google.com/site/cvsaisentan/


開催プログラム
https://kantocv.connpass.com/event/76984/


Tweetまとめ
https://togetter.com/li/1196249



以下、発表順。


発表者: 前田新一先生

タイトル: 強化学習の光と闇



発表者:@takmin(私)

発表論文:
Curiosity-driven Exploration by Self-supervised Prediction (ICML 2017)

発表資料:



発表者:@jellied_unagiさん

発表論文:
Visual Forecasting by Imitating Dynamics in Natural Sequences (ICCV'17)

Generative Adversarial Imitation Learning (NIPS'16)

発表資料:
https://speakerdeck.com/jellied_unagi/visual-forecasting-by-imitating-dynamics-in-natural-sequences-iccv-17-lun-wen-shao-jie



発表者:@alfredplplさん

発表論文:
Reinforcement Learning in Robotics: A SurveyのさわりとImitation from Observation: Learning to Imitate Behaviors from Raw Video via Context Translation

発表資料:
https://www.slideshare.net/yasunoriozaki12/ss-87188017



発表者:@peisukeさん

発表論文:
Cold-Start Reinforcement Learning with Softmax Policy Gradient

発表資料:
https://www.slideshare.net/FujimotoKeisuke/coldstart-reinforcement-learning-with-softmax-policy-gradient



発表者:side_yuさん

発表論文:
Learning to learn from noisy web videos (CVPR 2017)

発表資料:
https://www.slideshare.net/secret/viWVOisRb70bOf



発表者:@conta_さん

発表論文:
Attention-aware Deep Reinforcement Learning for Video Face Recognition (ICCV17)

発表資料:
https://www.slideshare.net/takanoriogata1121/180203-attentionaware-deep-reinforcement-learning-for-video-face-recognition



発表者:@losnuevetorosさん

発表論文:
Sequence Level Training with Recurrent Neural Networks (ICLR'16)

発表資料:
https://www.slideshare.net/YoshitakaUshiku/sequence-level-training-with-recurrent-neural-networks-cv/



次回は4月頃開催予定です。取り扱って欲しいテーマがあれば随時募集中です。

OpenCVのVizモジュールを使ってカメラの位置と点群を表示

三次元再構成なんかの論文では、よくカメラの位置を四角錘で可視化した図が乗ってたりしますが、その図もOpenCVのVizモジュールを使えば簡単に実現できます。


ここチュートリアルもありますが、一応解説を日本語で書いておきます。


尚、Vizモジュールを使うためにはVTKをあらかじめインストールした上で、CMake上でVTKのパスを指定してOpenCVをビルドする必要があります。

#include 

using namespace std;
using namespace cv;

void main(){
	// 3Dを表示するWindow生成
	string winname = "Viz Camera Pose";
	viz::Viz3d myWindow(winname);

	// 画面に座標軸を表示
	myWindow.showWidget("Coordinate Widget", viz::WCoordinateSystem());

	// カメラパラメータ(3x3の3次元座標を2次元画像平面へ投影するための行列)
	double k_elms[] = { 9.803769e+02, 0.000000e+00, 6.900000e+02, 0.000000e+00, 9.757217e+02, 2.441228e+02, 0.000000e+00, 0.000000e+00, 1.000000e+00 };
	Matx33d K(k_elms);

	// カメラウィジェット作成(青)
	viz::WCameraPosition wcamera(K, 1.0, viz::Color::blue());

	// 画面にカメラ追加
	myWindow.showWidget("Camera", wcamera);

	// カメラの姿勢を設定
	Mat T = Mat::eye(4, 4, CV_32FC1);
	T.at(2, 3) = -2.0;  // Z座標の設定
	myWindow.setWidgetPose("Camera", cv::Affine3f(T));

	// 円柱状の点群を作成
	int N = 10000;
	float r = 1.0;
	Mat cloud_mat(N, 1, CV_32FC3);
	Vec3f pt;
	for (int i = 0;i < N;i++) {
		float deg = CV_PI / 90 * (i % 180);
		pt(0) = r * std::cos(deg);
		pt(1) = r * std::sin(deg);
		pt(2) = r * CV_PI / 90 * (i / 180) + 0.5;
		cloud_mat.at(i, 0) = pt;
	}

	// 点群ウィジェット(白)を作成
	viz::WCloud wcloud(cloud_mat, viz::Color::white());

	// 点群ウィジェットを画面へ追加
	myWindow.showWidget("Cloud", wcloud);

	// 表示
	myWindow.spin();
}


3Dを表示するためのウィンドウはcv::viz::Viz3dクラスから生成します。

	// 3Dを表示するWindow生成
	string winname = "Viz Camera Pose";
	viz::Viz3d myWindow(winname);


ここではViz3dクラスから生成したmyWindowに対し、メンバ変数showWidget()を使用してカメラウィジェットや点群ウィジェットを追加しています。

	// 画面にカメラ追加
	myWindow.showWidget("Camera", wcamera);


ウィジェットの姿勢はデフォルトでは単位行列(つまり原点)ですが、Viz3dのメンバ変数setWidgetPose()によって変更できます。

カメラの位置を指定する場合、カメラ座標系から世界座標系への4x4変換行列を指定します。

	// カメラの姿勢を設定
	Mat T = Mat::eye(4, 4, CV_32FC1);
	T.at(2, 3) = -2.0;  // Z座標の設定
	myWindow.setWidgetPose("Camera", cv::Affine3f(T));


点群を表示するためにはviz::WCloudクラスから点群ウィジェットを作成します。まず、CV_32FC3, CV_32FC4, CV_64FC3, CV_64FC4,
いずれかの型のcv::Matを作成し、その行列の各要素に点群の点の座標を格納します。ここではCV_32FC3型(32bit3チャネルの浮動小数点型)のcv::Matを作成し、それぞれのチャネルがX、Y、Z座標を表します。

	Mat cloud_mat(N, 1, CV_32FC3);


点群に対しても同様にsetWidgetPose()を使って姿勢を変更できますが、ここでは指定してません。

最後にshowWidget()で点群を追加した後、spin()で作成した画面を表示させます。

	// 点群ウィジェット(白)を作成
	viz::WCloud wcloud(cloud_mat, viz::Color::white());

	// 点群ウィジェットを画面へ追加
	myWindow.showWidget("Cloud", wcloud);

	// 表示
	myWindow.spin();


2017/12/16 ICCV2017読み会(PRMU共催)発表資料まとめ

第43回コンピュータビジョン勉強会@関東は、パターン認識・メディア理解(PRMU)研究会との共催で「ICCV2017読み会」を行いました。


例によって発表資料をまとめます。



コンピュータビジョン勉強会@関東

http://sites.google.com/site/cvsaisentan/



PRMU研究会

http://www.ieice.org/ken/program/index.php?tgs_regid=dcb3f5da17b46802a7ac54d2b097a59876c6cb3ce4786e95505fbc3a90fe24d9



開催プログラム

https://kantocv.connpass.com/event/66397/



Tweetまとめ

https://togetter.com/li/1181847




今回、発表枠が埋まってしまったため、私はオープニングで主にPRMU研究会の皆様に向けてCV勉強会の紹介を行いました。

以下、発表順。


発表者:@takmin(私)

発表資料:



発表者:@hirotomusikerさん

ICCV2017レポート

https://www.slideshare.net/HHiroto/iccv2017-84269353



発表者:@hirotomusikerさん

発表論文:
Arbitrary Style Transfer in Real-Time With Adaptive Instance Normalization

発表資料:
https://www.slideshare.net/secret/7S9AKRecnuobnv



発表者:@losnuevetorosさん

発表論文:
Learning Cooperative Visual Dialog Agents with Deep Reinforcement Learning

発表資料:
https://www.slideshare.net/YoshitakaUshiku/learning-cooperative-visual-dialog-with-deep-reinforcement-learningcv-iccv-2017


発表者;ToshikiSakaiさん

発表論文:
Towards Diverse and Natural Image Descriptions via a Conditional GAN

発表資料:
https://www.slideshare.net/toshikisakai982/cviccv2017towards-diverse-and-natural-image-descriptions-via-a-conditional-gan



発表者:@conta_さん

発表論文:
Unsupervised learning of object landmarks by factorized spatial embeddings

発表資料;
https://www.slideshare.net/takanoriogata1121/unsupervised-learning-of-object-landmarks-by-factorized-spatial-embeddings-84198954



発表者:@tereka114さん

発表論文:
Be Your Own Prada: Fashion Synthesis with Structural Coherence

発表資料:
https://www.slideshare.net/ssuser21af5b/be-your-own-prada-fashion-synthesis-with-structural-coherence-84200506



発表者:@peisukeさん

発表論文:
Representation Learning by Learning to Count

発表資料:
https://www.slideshare.net/FujimotoKeisuke/representation-learning-by-learning-to-count



発表者:sasakitsさん

発表論文:
Beyond Face Rotation: Global and Local Perception GAN for Photorealistic and Identity Preserving Frontal View Synthesis

発表資料:
https://www.slideshare.net/secret/k2cTWNUSxkfNrQ



発表者:@tomoaki_teshimaさん

発表論文:
Rolling Shutter Correction in Manhattan World

発表資料:
https://www.slideshare.net/tomoaki0705/prmu-iccv2017rollingshutterpublish


翌日PRMU研究会もありますが、CV勉強会としては本日が今年最後となります。

ではまた来年。