しえログ

qiita との使い分けに悩んでる

大規模画像データセット オレオレまとめ

公開されている静止画像データセットなるものをちょっと調べたのでメモ。 今のところはこんなのがあるよ的な自分用メモ程度にまとめておくけど、このままだと全然使えるはず無いので後から徐々に編集・追記はしていくつもり・・・。

お酒の量は程々に

土曜日は前のチームの先輩のお家に皆でお邪魔して飲み会。 所属は皆見事に散り散りになったけど、こういう繋がりを持てるチームであったことには素直に感謝したい。 色々あって昨年末に自分から抜けるという選択をとったけど、メンバーには恵まれたチームだったとホントに思う。 帰宅が朝3時半ぐらいだった気がするけど、疲労感をあまり感じなかったのも良い会合だったからなんだろうな。

そういえば結構な量の酒を飲んだ割には記憶も飛んでないし2日酔いにもならなかった。 日によって体調も変わるわけだしそりゃまぁ酔い過ぎる日もあれば全然酔わない日もあるよね、って話ではあるんだろうけど酒飲み続けて10年経った今でもその分水嶺がわからない。 飲んだ量とその後の体調を細かくメモする習慣があれば最高のデータ分析テーマとなるんだろうけど、ザンネンながら飲み過ぎた日のデータ欠損が容易に想像できるので実行しても意味があまりなさそうな気がする。 でもまぁそう思っておくだけである程度は2日酔いを防げるかもしれないし、3日坊主にならない程度に飲んだ酒をツイートしておくのも悪くないかもと思っている。 とりあえず今まさに飲んでる日本酒はノーカンである。

今期のアニメも終盤に差し掛かっているのがチラホラ見受けられるようになった。いつもこの時期は終わるアニメを想うととても物悲しくなるのだけれど、とりあえずオルフェンズの最後が気になりすぎるのではよ最終週来いと思うし、4月も面白そうなのが結構あるので楽しみにしている。

グラフカット以前のエネルギー最小化

今更ながらグラフカットについて学ぼうとしている。まずは基礎からということで、コンピュータビジョン最先端ガイドの2章を読み進めることに。
学んだことについてメモを記していくけど、まずはエネルギー最小化について。

2値画像のノイズ除去

エネルギー最小化によって2値画像のノイズを除去する場合、まず場所を表すサイトの集合 { V } を定義する。画像 { Y } が与えられたとして、その画素の1つ1つがサイトと考えられる。

{ V=\{\left(i,j\right) \mid i=1,\dots,n; j=1,\dots,m\} }

2値画像なので各画素の取りうる値(ラベル)は以下のようになる。

{ L=\{0,1\} }

ノイズを除去した2値画像は各画素に0か1を割り振りなおす形で得られる。各サイトにラベルを割り振ることを配置といい、 { V } から { L } への写像と言える。これを{ (V,L) } の配置と呼ぶ。配置 { X } といったとき、 { X } はサイト { u \in V } にラベル { X_u \in L } を割り振るものとする。
ノイズ画像において隣接画素間の変化が少なくなるような { X } を探して、それを除去画像とするわけだけど、やりすぎると完全に一色の画像となってしまう。これらのトレードオフをエネルギーという関数で定義することでエネルギー最小化の問題を解くことができる。
以下の式における { X } を動かして { E(X) } が最小となる { X } を見つける。

{ E(X) = \displaystyle \sum_{v \in V} \lambda | Y_v - X_v | + \displaystyle \sum_{(u,v) \in E} \frac{\kappa}{2} | X_u - X_v | }

  • { u, v }: { V } の元
  • { E }: { (u, v) } 全体からなる集合 ( { E \subset V \times V } )
  • { \lambda, \kappa }: 正の定数
  • { Y }: ノイズ入り画像を表す配置

一般の場合

↑の式を少し抽象的にすると以下の式の形になる。

{ E(X) = \displaystyle \sum_{v \in V} g_v(X_v) + \displaystyle \sum_{(u,v) \in E} h_{uv}(X_u, X_v) }

  • { V }: 画素など「場所」を表すサイトの集合
  • { E \subset V \times V }: サイト間の隣接関係を表す集合
    • { (u, v) \in E } のときサイト { u }{ v } は隣接している
    • { (u,v) \in E \Leftrightarrow (v, u) \in E }

解くべき問題は { V } の各サイトにラベルを割り振ること。ラベルの有限集合を { L } として、 { (V, L) } を配置と呼ぶ。
{ (V, L) } の配置 { X } とは、 { V } の各サイト { v } にラベル { X_v \in L } を与える写像

{ 
\begin{eqnarray}
X \colon V &\mapsto& L\\
v &\mapsto& X_v
\end{eqnarray}
 }

{ V } を画素の全体、 { L } として全体の色を取れば、 { n \times m } 画素の RGB ビットマップ画像は、各画素に色をひとつずつ与える配置 { X } と考えることが出来る。

{ L = \{\left(r,g,b\right) \mid r =0,\dots,255; g=0,\dots,255; b = 0, \dots, 255 \} }

{
\begin{eqnarray}
X \colon V &\mapsto& L\\
(i,j) &\mapsto& X_{(i,j)} = (r_{i,j}, g_{i,j}, b_{i,j})
\end{eqnarray}
}

このような { X } にエネルギー { E(X) } を与えるのが↑の式になる。
2値画像での例を持ち出すと、

{ g_v(X_v) = \lambda | Y_v - X_v | }

{ \displaystyle h_{uv}(X_u, X_v) = \frac{\kappa}{2} | X_u - X_v | }

になる。 { g_v(X_v) } はサイトとそのサイトに付与されたラベルのみによる値なのでデータ項、 { h_{uv}(X_u, X_v) } は隣接するサイト間で { X } に与えられるラベルがどのような関係にあるべきかを示す(普通は隣接ラベル間の変換を平滑化する)ため平滑化項と呼ばれる。

{ E(X) } のようなエネルギー式はマルコフ確率場( MRF )の最大事後確率( MAP )推定のときによく使われる。

{ \displaystyle P(X | D) = \frac{P(D | X)P(X)}{P(D)} }

において、データ { D } が与えられたとき、 { D } は固定済みなので { P(D) } は定数となり、 { P(D | X)P(X) } を最大化することで { P(X | D) } が最大となり、MAP 推定としては最大化する { X } を求めれば良いことになる。このとき、 { D } の尤度 { P(D | X) } がデータ項に、 { P(X) } が平滑化項に、それぞれ対数値の -1 倍となって表現される。

所感

メモとしては一般の方だけで良かったな・・・。せっかく書いたし両方乗っける。
次はグラフカットの本流についても勉強してコードまで落としこめてまたエントリ書きたい。

コンピュータビジョン最先端ガイド1[CVIMチュートリアルシリーズ]

コンピュータビジョン最先端ガイド1[CVIMチュートリアルシリーズ]

  • 作者: 倉爪亮,石川博,加藤丈和,佐藤淳,三田雄志,八木康史,斎藤英雄
  • 出版社/メーカー: アドコム・メディア
  • 発売日: 2008/12/03
  • メディア: 単行本
  • 購入: 9人 クリック: 71回
  • この商品を含むブログ (11件) を見る

最近の個人メモツール環境

SAO の映画が評判高いみたいですね。見たいのだけれど、2期をまるまる見逃していたことに気づいて昔の録画で追っかけてます。まだ3話目で全話見終える頃に上映続いているのかちと心配になってきてる。キリトくんは全然変わらないなーって思うんだけど、アスナさんの髪がオレンジから青になってて分かりづらいというか、もうそれほぼ補色じゃんって感じですよね。所属する種族がウンディーネだから仕方ないんだろうけど。

最近 kibela が正式リリースされたってんで、触ってみたというかアカウント作ってちまちま使ってみました。当たり前なんだけどチーム開発向けのウェブサービスなので、1人で使っててもオンライン同期できるメモツールとそんな変わらないっすな・・・。ただ、機能自体も esa.io とか qiita team などとの差別化要素があまり見当たらない気がする・・・。立ち上げたばかりのベンチャーとかだとフリープランで行けそうだし料金面ではオトクなのかな。

自分個人で使ってるオンライン同期系メモツールといえば、ここ1年ほどは PileMd ってのを利用している。とにかくシンプルなのと同期システムは自前で準備していいのが分かりやすい。クライアントも Win/Mac/Linux 揃ってるし。欲を言えば数式が書けるようになってほしかったりする。似たようなので Boostnote ってのも出てきてて、こっちは数式は書けるんだけど編集モードと閲覧モードの切り替えがホットキーで出来ない気がする( PileMd は Alt + P で出来る)ため今のところ利用を見送っている。

偉そうに書いたけど、せっかくどっちもオープンソースなんだし要望ばっか言ってないで自分でプルリクするなりしろっつー話ではあるのでここまでにしておく。いつも素敵なプロダクトをありがとうございます。

識別モデルの評価指標

久々に初学者丸出しの記事を書く。

論文で検出器について書いた際に、ちゃんと識別モデルの評価指標とそれが実際どのぐらいであったかは記述しようぜ、とのコメントを頂いたので今更ながら勉強してみた。 書き上げる前にやっとけよ、っつー話すぎるけど、せっかくなので簡潔だけどまとめておく。

評価指標

正解データ、不正解データ、そして識別結果データのセットが与えられた時に、下記を計算することができる。 ちなみに以下の表は混同行列( Confusion Matrix )というらしい。

識別結果・陽性 識別結果・陰性
正解 TP => 真陽性 FN => 偽陰性
不正解 FP => 偽陽性 TN => 真陰性

以上を用いてまとめると主な評価指標は以下の通りとなる。

  • 正解率(Accuracy)
    • {\frac{TP+TN}{TP+FN+FP+TN}}
  • 再現率(Recall)
    • {\frac{TP}{TP+FN}}
  • 適合率(Precision)
    • {\frac{TP}{TP+FP}}
  • F値
    • {\frac{2 * Recall * Precision}{Recall + Precision}}

それぞれどんな場合に指標としていいかはちゃんと判断して利用するべき。

ROC 曲線

Receiver Operating Characteristic curve の略。 真陽性率(TP)と偽陽性率(FP)の関係を示す、識別モデルがどの程度の性能を持つのかを表す曲線のこと。 こんな図になる。

f:id:cielan:20170228014254p:plain

  • AUC( Area Under the Curve )
    • ROC 曲線の下の面積値。大きければ性能が良い。
  • 左上から曲線までの距離
    • そのまま。短ければ性能が良い。

複数の分類結果があるときにこの曲線にまつわる指標を比べたりする。

上野で春日大社

仕事関係で懸念してたことが何とかなりそうな予感のする一週間だった。 まだいろいろめんどいこと残ってるけど、一旦は毎晩の酒が少しばかりおいしくなりそうな気はしている。

同時に根を詰めて書いてきた社内論文もほぼほぼ仕上がって(内容はお察しだけど・・・)、皆様からの貴重なコメントを反映する作業をしている。 最終の〆が次の火曜日なので新しい図とかにも手を入れる余裕はあるけど、頂いたコメントすべてを反映することは無理そうだなー・・・。もちろん取捨選択するんだけれどそれもなかなか難しいですね。 こういう査読っつーかレビュー会みたいなのでダメ出し食らって反映することはもちろん学生時代もやってたけど、あの時は時間をそれだけに使って良かったりしたので頂いたコメントのみならず自分でもう少し修正できそうなところに対してガンガン修正とかできてた気がする。今はもう基本的に仕事が1日の大半を占めてるわけだしこういうのちゃんとこなせる社会人研究者とかホントすげぇな、と。結局この2週間はほぼ論文とか読めてないし、機械学習のお勉強も進められてないので、ただでさえ開いているチームメンバとの差がさらに広がってまう。水曜からはまたいつものペースに戻していかないとなぁ。

そういえばプレミアムフライデーなんてどこ吹く風か的な感じでフツーに定時あがりだった。街もいたって普通の金曜の盛り上がりな感じしたし、浸透する日とか来るんですかね。早く帰れるのはありがたいけど、その分仕事量もちゃんと少なめになるのが理想だな。

今日はずっと行こう行こうと思っていた春日大社の特別展をみに上野に。 社自体はもうかれこれ60回ほど改修工事しているらしく、お古になって神殿から下ろされた狛犬と獅子を観てこれた。頭に角があるのが狛犬で、ないのが獅子らしい。 下は記念撮影OKだった灯籠。

f:id:cielan:20170227010150j:plain

いつか現地に行って実際に見てみたいもんだ。

gurutabi.gnavi.co.jp

論文がなんとか出来てきた

最近週末がいい感じに晴れてくれるおかげでジョギングが捗る。まだまだ寒いのでウィンドブレーカは欠かせないし走り初めの凍え方が尋常じゃないけど。

先日のスノボの前日に、「社内論文書きませんか?」とのお誘いを受けてから早2週間。前のエントリでも触れた論文だけど、なんとか文字数を埋めるだけの初稿は完成。あとは今週いっぱいで推敲を重ねられるだけ重ねる感じに落ち着けることができたので一旦ビール飲んでる。何もなくてもほぼ毎日飲んでる気がしなくもないけど。 これも前に書いたけど社内限なので、論文自体のネタはもちろん、利用したデータセットや結果の画像まですべてがオフレコものであり、ここに詳細書けるようなことはないのがザンネン。 日本語でのショートペーパーということで軽い気持ちで臨んだわけだけど、いざ執筆してみるとどこをどのぐらい手を緩めればいいのか逆に厳密に書いたほうがいいのか悩むことが多くて意外と時間がかかってしまった。結局文体や数式含めまだまだ納得いかないままだしやっぱうまくは行かないもんですね。とりあえず書きたいこと書いちゃったけど、出さずにもらえるはずだった批評がもらえないよりは出して批評もらえたほうが儲けモンだろ、ぐらいの気持ちでいる。TeXコンパイルエラーもすぐ取れて昔の仲を取り戻せた気がする。

本仕事のほうがおざなりになりがちだったので今週からは調子を戻していかないといけない。少し気難しい協力会社の担当者に加えて自分の確認待ちのタスクもあったはずなので約9時間後の出社がかなり憂鬱になってきているのをビールで必死に紛らわしている午前1時。少しだけ車載動画を見てから寝ることにする。