サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
中東情勢
kamino.hatenablog.com
今回の記事では、リアルタイムなデータ処理を高いフレームレートで実行するため、マルチスレッドなパイプラインをC++で実装してみます。 シンプルな実装例から、ダブルバッファリングを用いた実装例やスレッドプールを用いた実装例もご紹介します。 実装したコードは、こちらのGitHubリポジトリにまとまっています。 github.com もくじ 1. 今回の目的 2. マルチスレッド実装の泣きどころ 3. 問題設定 4. ナイーブな実装例 4.1. ソースコード 4.2. 実験1: 上流の処理(A+B)が重いケース 4.3. 実験2: 排他的処理(B,C)が重いケース 4.4. 実験3: 下流の処理(C+D)が重いケース 5. ダブルバッファリングを用いた実装例 5.1. ソースコード 5.2. 実験: ダブルバッファリングの効果 6. スレッドプールを用いた実装例 6.1. ソースコード 6.2.
就活とか論文とか色々あり、実に半年ぶりの投稿です! このブログでは以前、自分が使っているターミナル環境とエディタ環境を紹介しました。 kamino.hatenablog.com 今回の記事では、以前の記事で紹介したNeoVim環境に使用感の近いVisual Studio Code環境を構築した話を書いてみます。 表示系やコマンドモードなど細かい部分は詰め切れていないので、主にサイドバー(NERDTreeっぽく)、タブ移動、ターミナル周りを違和感なく使うためのショートカットの話を書いていきます。 見た目はほぼデフォルトのまま ※ 2021/02/04: vim.use<C-v>で個別にctrlキーを有効化するオプションが削除されたようなので修正しました。またインサートモード中にctrl+h, ctrl+lを使いたいときのためにkeybindingのwhen条件を修正しました。 もくじ 1.
最近ようやくNeoVim環境がいいかんじにまとまってきたので、振り返りついでに記事を書いてみます。 ターミナル開発環境を整えるためのTips集として読んで頂けると幸いです。 GitHubリポジトリでdotfilesも公開しているので、記事の中で「この設定どうやってやるの?」という部分があれば参照してみてください。 github.com あと「もっといいツールとかおすすめ設定あるよ!」というのがあればぜひ教えて下さい!! 開発環境の概要 この記事では、Macを使うことを前提としています。 紹介する環境の概要は以下のとおりです。 よく書くコード : コンピュータビジョン系, 画像処理系, 数値計算系 メインの開発言語 : C++ (CMake), CUDA, Python マシン : MacBookPro (US配列) + GPU搭載のUbuntuサーバー ターミナル : iTerm2 She
数理最適化の勉強メモその2です。 前回の記事では、数理最適化の基本的な事項として解析的な解法、最適性条件、最適化がうまくいかない条件などについてまとめました。 今回の記事では、具体的な数値最適化のアルゴリズムとして、直線探索法の一種である最急降下法とニュートン法についてまとめてみたいと思います。 ※ 2019/09/22 : 前回の記事が長くなりすぎたので後半部分をこの記事に分割しました。 スポンサーリンク もくじ 0. 解きたい問題 1. 直線探索法とは 2. 更新幅の決め方(Wolfe条件) 2.1. Armijo条件 2.2. 曲率条件 2.3. 更新幅を決めるアルゴリズム 3. 最急降下法 4. ニュートン法 5. 実装上の留意点 5.1. 最適性条件 5.2. 数値微分 5.3. 実用的な実装 0. 解きたい問題 今回の記事では前回に引き続き、数理最適化の分野の中でも微分可能な制
しばらく更新していない間にいいね/ブックマークがじわじわ増えててとても励みになります(*´ω`*)。 最近は研究関連の勉強をしているので、ブログに書けないネタばかりで…。 月1くらいで投稿できるようにしたいですね。 さて。このブログでは以前、数理最適化の勉強メモとして最適性条件, 最急降下法, ニュートン法についてまとめました。 数理最適化の勉強メモ − 解析的な解法 / 最適性条件 / 勾配法がうまくいかない条件 - かみのメモ 数理最適化の勉強メモ − 最急降下法 / ニュートン法の原理と特徴 - かみのメモ 今回の記事では問題設定を少し変えて、微分可能な制約なし非線形最小二乗問題の解法であるLevenberg-Marquardt法についてまとめてみます。 いつもの注意書きですが、筆者はコンピュータビジョンが専門で、数学や数値計算の専門家ではありません。 間違いがある可能性も割と高いの
今回は、リモートUbuntuサーバーのDockerコンテナ上で起動しているGUIアプリの画面を、ホスト自身やローカルのMac/Windowsのディスプレイに表示させる方法についてまとめてみます。 筆者は環境構築を楽に済ませるためにDockerを利用することが多いのですが、デフォルトのDockerコンテナではGUIを表示させることができないので、画像の確認やGUIアプリが付属しているOSSの動作確認をするときに不便です。 そこでコンテナ内でX11対応のアプリを起動し、それをローカル側にforwardすることでGUIを表示させてみます。 ※ 2020/06/02 : 申し訳ないことにX11の仕様を誤解していました。解説の中でクライアント/サーバーが逆になっていた部分を修正しました。 【2021/02/07 追記】 今回紹介するX11 Forwardingは、手軽に使える反面、複数のウィンドウが
最近、SLAMの勉強をしてみたいなぁと思いceres-solverのコードを読んでいたのですが、ヤコビアンの導出のところで見慣れない操作をしていることに気付きました。 調べてみると双対数というものを利用して自動微分なる計算をしているらしいです。 ということで、この記事では双対数(二重数, dual number)とそれを利用した自動微分についてまとめてみます。 平たく言えば、プログラムで微分を計算する方法を紹介します。 ざっくり理解で書いている部分もあるので、間違いを見つけたらマサカリ投げてください。 スポンサーリンク もくじ 1. 前置き 2. 導関数の演算則 3. 双対数 3.1. 双対数の定義 3.2. 双対数の演算則 3.3. 双対数と導関数の演算則の共通性 4. 双対数を利用した自動微分 4.1. 自動微分の原理 4.2. 計算例 4.3. 実装 5. 双対数による自動微分と数値
最近注目を集めているグラフツールPlotly。 久しぶりに調べてみれば、なんとベクター画像出力が追加されているじゃないですか! これは論文用の作図もmatplotlibからPlotlyに移行できるぞ! ということで、Plotlyの基本的な使い方を復習ついでにまとめてみました。 この記事では、Pythonからグラフを画像として保存する方法と、自分が資料用のグラフを作るときによく使うレイアウト調整の方法を紹介していきます。 スポンサーリンク ちなみに、以下の記事で紹介している小技を組み合わせればPlotlyの活用範囲がより広がるかなと思います。 興味があればこちらも読んでみてください。 kamino.hatenablog.com 執筆時のバージョン情報 Python : 3.7.2 plotly : 3.7.0 orca : 1.2.1 psutil : 5.5.0 もくじ 1. ツールのイン
風呂敷を広げすぎてぐちゃぐちゃになったのでお蔵入りしていた記事なんですが、なんとなく納得できる形にまとまってきたので公開してみます! 文字数が50000字弱になったので4記事の連載という形になっています。 この連載は、ここ1年くらいでCMakeに入門した筆者が勉強した内容をまとめたものです。 初回のこの記事では、CMakeとは何なのかと、CMakeの基本的な使い方について書いていきます。 全体の目次 基本的な使い方【今ここ】 プロジェクトの階層化 プロジェクトの設定 外部ライブラリを利用する この記事の目次 1. はじめに 1.1. この記事で書くこと 1.2. 必要な事前知識 2. CMakeについて 2.1. CMakeとは? 2.2. CMakeのインストール 3. はじめてのCMakeプロジェクト 3.1. main.cppとCMakeLists.txtを書く 3.2. Confi
はじめに 最近、とある事情でOpenGL+GLSLの勉強をしていました。 目標はシェーダーを自分で書いて簡単な光路追跡法(レイトレーシング)っぽい処理を実装することだったので、とりあえずネットの情報と↓の本を使って勉強してみました。 OpenGL 4.0 シェーディング言語 -実例で覚えるGLSLプログラミング- 作者:David Wolff発売日: 2012/11/01メディア: 大型本 が、OpenGL難しい!! 自分の環境に入っているOpenGLのバージョンを調べるとこから始めて、目標の処理を実装するまで2週間以上かかってしまいました。。。 ということで、この記事では自分がOpenGLに取り組んでみて「勉強前に知っていたら捗ったのになあ」と思ったことについてまとめたいと思います。 新しくOpenGLを勉強するときの取っ掛かりになれば幸いです。 ※ 2018/09/13:項目1のタイト
競プロとかアルゴリズム系のコードを書いてるとたまに順列・組み合わせを列挙したいことがありますよね。 ということで、この記事では自分なりに書いたC++のコードを紹介してみます。 順列(permutation)その1 まずは、 個の要素を並べるときの並べ方のパターンを列挙するコードです。 パターンは全部で 通りあります。 これには<algorithm>にあるnext_permutation()、prev_permutation()が使えます。 #include <algorithm> #include <functional> #include <iostream> // nPnの順列に対して処理を実行する void foreach_permutation(int n, std::function<void(int *)> f) { int indexes[n]; for (int i = 0
珍しく光学の話題です。 コンピュータビジョンの分野では、いくつかの文脈で焦点距離(focal length)という単語が登場します。 この単語は元を辿れば全て同じ定義に行き着くのですが、使われる文脈によって前提とする考え方が少し違うので混乱しやすいです。 この記事では、そんな焦点距離という単語の定義と用法についてまとめてみます。 例によって間違い等あればコメントお願いします。 スポンサーリンク もくじ 1. 単レンズの焦点距離 2. カメラレンズの焦点距離 3. ピンホールカメラの焦点距離 4. カメラの内部パラメータとしての焦点距離 1. 単レンズの焦点距離 まずは1枚のレンズだけに注目したときを考えてみます。 学校の理科で習うとおりですが、凸レンズや凹レンズは入ってきた光を収束または発散させる効果を持つ光学素子です。 レンズの光を収束・発散させる強さがどのくらいなのかを考えるときは、レ
誇大タイトルです笑。 2019年最初の記事ということで気合い入れたら、結構長くなってしまいました。 この記事では、カメラのキャリブレーションでよく使われるOpenCVのcalibrateCamera関数の原理や実用上のコツを解説します。 「とりあえず関数は呼べたけど、結果が合っているのかイマイチわからない」「全く見当違いな値が出てきた」というときの参考になればと思います。 ※ 2020/08/26:3.2.項の初期解の求め方の部分で「内部パラメータ」と「外部パラメータ」を誤植していたのを修正しました スポンサーリンク もくじ 0. キャリブレーションアプリの例 1. cv::calibrateCamera関数とは 2. OpenCVのカメラモデル 2.1. 定義 2.2. 解説 3. calibrateCamera関数の内部実装 3.1. 問題の定式化 3.2. 問題の解法 4. cali
以前の記事(OpenCVで取得したカメラパラメータをUnityで使う - かみのメモ)を書いたのをきっかけに、三次元座標系での回転の表現方法について色々調べたので、まとめておきたいと思います。 はじめに 三次元座標系で回転を表現するための方法として、回転ベクトル, 回転行列, オイラー角, クォータニオン(四元数)がよく知られています。 この記事では、これら4つの表現方法について 原理とその特徴 右手系・左手系の変換 各表現の相互変換(代表的なもののみ) の3つを紹介していきます。 実際にPythonで回転後の座標を計算したり各表現を相互変換したりするプログラムは、以下の記事で紹介しています↓。 なお、この記事はコンピュータビジョンと航空力学をかじっただけの人が書いたものです。 できるだけ誤りのないように書いているつもりですが、もし間違いを見つけた場合は報告していただけるとありがたいです。
研究でVisual C++を書くうちに、そういえばリンカとかライブラリの仕組みを理解していなかったな、と思ったので色々調べてみました。 書きやすいからという理由で説明口調の文章にしていますが、多分に間違いを含む可能性があります!(オイ) 気付いた部分があればコメントしていただけるとありがたいです。 ※ 2018/12/01 : #pragma once周りを追記しました ※ 2018/12/23 : ライブラリを使うためのビルド設定の話を追記しました スポンサーリンク もくじ 1. ビルドとは 2. C/C++のビルドの仕組み 2.1. プリプロセッサ 2.2. コンパイラ 2.3. アセンブラ 2.4. リンカ 3. ライブラリの種類と仕組み 3.1. ソースコードを配布 3.2. 静的リンク(static linking) 3.3. 動的リンク(dynamic linking) 3.4
このページを最初にブックマークしてみませんか?
『kamino.hatenablog.com』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く