オタクof数理の共同ブログ

京大情報学科数理工学コースの学生4人による共同ブログです

YOLOv2を動かしてみた。

以前YOLOv2を動かす機会があったので、そのことについてまとめます。

YOLOv2とは

github.com

YOLOv2はリアルタイム物体検出手法の一つで、非常に精度が高いです。以下の動画には度肝を抜かれました。

youtu.be

これを実際に動かすには訓練済みのモデルがすでに置いてあるので、https://github.com/leetenki/YOLOv2/blob/master/YOLOv2_execute.md に従ってやれば良いのですが、微妙にうまく行かないところがあったので、その修正方法についてまとめました。

git cloneする

git clone https://github.com/leetenki/YOLOv2.git

cd YOLOv2

yolov2学習済みweightsファイルをダウンロードする。

これでwget http://pjreddie.com/media/files/yolo.weightsを実行しても次のパースのところがうまくいきませんでした。次のファイルを代わりにダウンロードすることでうまくいきました。

yolo.weights - Google ドライブ

参考: github.com

以下のコマンドでweightsファイルをchainer用にパースする。

python yolov2_darknet_parser.py yolo.weights

(chainerのバージョンが2以上の人向け)

chainerのバージョンが2以上の人は次のコマンドが動かないと思います。原因はyolov2.pyにあります。具体的にはyolov2.py内の94行目から123行目において、F.leaky_reluの引数にtest=not self.trainを取っていますが、これはバージョンが2以上の人は不要です。消しましょう。

参考:

qiita.com

以下のコマンドで好きな画像ファイルを指定して物体検出を行う。

python yolov2_darknet_predict.py data/people.png

検出結果はyolov2_result.jpgに保存されます。例えば猫の画像で実際に物体検出をしてくれるのかを見てましょう。~/hoge/hoge/フォルダ内のcat.pngを入力すると、、、

python yolov2_darknet_predict.py ~/hoge/hoge/cat.png

f:id:otaku_of_suri:20180619185235j:plain

このように猫であることをきちんと認識してくれました!ちなみにこの猫はたまゆらんにいる欅ちゃんです。

tabelog.com

以下のコマンドで、カメラを起動しリアルタイム物体検出を行う。

python yolov2_darknet_camera.py

以上です。何かあればコメントお願いします。

有界列が収束すること

とある仕事で採点してるときに"収束列が有界であること"の証明の出来が壊滅的に悪く、非常に厳しい気持ちになりました。ここにその証明を書くことでその厳しい気持ちを昇華させておきます。

収束列が上に有界であること

ここでは実数列について考えます。また、上に有界であることのみ証明します。下に有界であることも同様の証明ができます。
点列\left\{a_n\right\}_{n\in\mathbb{N}}がある値aに収束するとき、\varepsilon\delta論法を用いて言い換えると、

\forall\varepsilon>0,\ \exists n_{0}\in\mathbb{N},\ \text{s.t.,}\ \forall n>n_{0},\ \left|a_{n}-a\right|<\varepsilon
と書けます。これを変形すると、n>n_{0}a_n < a+\varepsilonであることが分かります。また、n\leq n_{0}においては、
a_{n}\leq\max\left\{a_{1},a_{2},\cdots,a_{n_{0}}\right\}
となります。この右辺について、\alpha=\max\left\{a_{1},a_{2},\cdots,a_{n_{0}}\right\}とでもおいてみると、n>n_{0}での考察と合わせると、
a_{n}\leq\max\{a+\varepsilon,\alpha\}
となることが分かります。以上から、収束列が上に有界であることが示されました。

おまけ

上の証明では実数列に限定したのには一応理由があります。一般に"上に有界"という概念は順序が定まる順序集合においてのみ定義されるものです。例えば、複素平面\mathbb{C}には順序が定まらないことが知られています。なので、複素数列が収束するときに、"上に有界である"、と言うことはできません。距離空間でより一般に有界という言葉が定義されているのでそれを用いると、距離空間での収束列は有界であることが示されます。

それでは。

久しぶりに書く

久しぶりにブログを書きます、よねすけです。大学院生になって思ったよりも忙しいことがわかったので、いろんなことを要領よくこなしていかないとだめだな〜と痛感する最近です。

さっきこんなことを知って面白かったのでブログにでも書いて見る。

はじめに床関数というものを導入します。床関数は与えられた実数に対してそれ以下の最大の整数を返す関数です。例えば

  • \displaystyle \left\lfloor\pi\right\rfloor=3
  • \displaystyle \left\lfloor\sqrt{2}\right\rfloor=1
  • \displaystyle \left\lfloor -1.4\right\rfloor=-2

となります。このとき、次のような面白いこと知られているらしいです。

  • \displaystyle \left\lfloor\sqrt{44}\right\rfloor=6
  • \displaystyle \left\lfloor\sqrt{4444}\right\rfloor=66
  • \displaystyle \left\lfloor\sqrt{444444}\right\rfloor=666
  • \displaystyle \left\lfloor\sqrt{44444444}\right\rfloor=6666
  • ...

こんな感じでどんどん続いていくらしいです。本当にそうなっているのか、証明してみましょう。

証明
一般に示すべきことは、
\displaystyle a_{n}=\underbrace{44\cdots 44}_{2n個},\ b_n=\underbrace{6\cdots 6}_{n個}とした時に

\displaystyle\left\lfloor\sqrt{a_n}\right\rfloor=b_n
です。床関数の定義から、
\displaystyle b_n\leq \sqrt{a_n}{<}b_n+1
が分かれば良いです。しかも各項は正なので2乗すると
\displaystyle b_n^2\leq a_n{<}\left(b_n+1\right)^2
を示せば良いことがわかります。なので各項を計算して上の不等式が本当に正しいかを確かめましょう。a_n,b_nはそれぞれ式変形すると

  • \displaystyle a_n=\underbrace{44\cdots 44}_{2n個}=4\left(10^{2n-1}+\cdots+1\right)=\frac{4}{9}\left(10^{2n}-1\right)
  • \displaystyle b_n=\underbrace{6\cdots 6}_{n個}=6\left(10^{n-1}+\cdots+1\right)=\frac{2}{3}\left(10^{n}-1\right)

となります。このとき、

  • \displaystyle b_n-a_n^2=\frac{4}{9}\left(10^{2n}-1\right)-\frac{4}{9}\left(10^{n}-1\right)^2=\frac{8}{9}\left(10^{n}-1\right){>}0
  • \displaystyle \left(a_{n}+1\right)^2-b_n=\left(\frac{4}{9}10^{2n}+\frac{4}{9}10^{n}+\frac{1}{9}\right)-\frac{4}{9}\left(10^{2n}-1\right)=\frac{4}{9}10^{n}+\frac{5}{9}{>}0

がわかるので、上の不等式は常に成り立つことがわかります。よって証明されました。

まあ、こんな感じで証明はできるけど、できるだけ、という感じが否めないですね。。。この式が成り立つことの背後にはなにかすごい法則があったりするんですかね。。。何か知ってる人がいらっしゃればぜひ教えてください。

それでは。

フーリエ級数の一様収束性

こんにちは、よねすけです。

院試勉強してると色々気づきがあって面白いです。大半は面白くないですが。

周期的な可積分関数のフーリエ級数がどのようなときに元の関数に収束するかについては色々な議論がなされています。例えば周期的連続関数でフーリエ級数が絶対収束する関数についてはフーリエ級数はもとの関数に一様収束することが知られています。一方で連続関数でもそのフーリエ級数が発散する場合もあり、非常に複雑な世界となっています。これだけでは連続関数はフーリエ級数を扱う上ではあまり良い性質を持っていないように思えますが、ここで収束の意味を拡張することによって連続関数を常に一様収束させることができるようになるのです!!!前置きが長くなりましたが今回はこの話について書こうと思います。

はじめにフーリエ級数の部分和を定義します。周期的な可積分関数f(t)についてその複素フーリエ係数を\hat{f}_nと書きます。すなわち、

\displaystyle\begin{eqnarray}
\hat{f}_{n}=\frac{1}{2\pi}\int_{-\pi}^{\pi}f(t)e^{-int}dt
\end{eqnarray}
この時、フーリエ部分和S_N(t)を次で定義します。
\displaystyle\begin{eqnarray}
S_N(t)=\sum_{n=-N}^{N}\hat{f}_{n}e^{int}
\end{eqnarray}
大事なことはこの部分和が畳み込み積分の形でかけることです。畳み込み積分とは可積分な周期関数f,gについて畳み込み積分f*g
\displaystyle\left(f*g\right)(t)\frac{1}{2\pi}\int_{-\pi}^{\pi}f(s)g(t-s)ds
です。これを用いて式変形を行うと、
\displaystyle\begin{eqnarray}
S_N(t)=&\sum_{n=-N}^{N}\hat{f}_{n}e^{int}\\
=&\sum_{n=-N}^{N}\left(\frac{1}{2\pi}\int_{-\pi}^{\pi}f(s)e^{-ins}ds\right)e^{int}\\
=&\frac{1}{2\pi}\int_{-\pi}^{\pi}f(s)\left(\sum_{n=-N}^{N}e^{in(t-s)}\right)ds\\
=&\left(f*D_N\right)(t)
\end{eqnarray}
これによりフーリエ部分和を畳み込み積分で表すことが出来ました。ここで登場したD_Nディリクレ核と呼びます。このとき、一般にN\to\inftyについてS_Nfには一様収束しません。しかしチェザロ総和の意味では一様収束します。すなわち
\displaystyle \sigma_N(t):=\frac{1}{N}\sum_{n=0}^{N-1}S_n(t)=\frac{1}{N}\left(f*D_0(t)+\cdots+f*D_{N-1}(t)\right)=f*\left(\frac{1}{N}\sum_{n=0}^{N-1}D_n\right)(t)
と書いた時に、\sigma_Nfに一様収束するということです。ここで
\displaystyle F_N(t):=\frac{1}{N}\sum_{n=0}^{N-1}D_n(t)
フェイエール核と呼び、これはディリクレ核のチェザロ和になっています。一所懸命計算すると、
\displaystyle F_N(t)=\frac{1}{N}\left(\frac{\sin(Nt/2)}{\sin(t/2)}\right)^2

実はこのフェイエール核は良い核(good kernel)となっています。周期的な関数の列\{K_n\}_{n=1}^{\infty}が良い核というのは、

  • \displaystyle {}^{\forall}n\in\mathbb{N},\ \frac{1}{2\pi}\int_{-\pi}^{\pi}K_n(t)dt=1
  • \displaystyle {}^{\exists}M>0,\ 、s.t.,{}^{\forall}n\in\mathbb{N},\ \int_{-\pi}^{\pi}|K_n(t)|dt{<}M
  • \displaystyle {}^{\forall}\delta >0,\lim_{n\to\infty}\int_{\delta\leq|t|\leq\pi}|K_n(t)|dt=0

を満たすものようなことを言います。フェイエール核が良い核であることは実際に確かめられます。良い核については次の定理が知られています。この意味において「良い」という名前がついています。

{K_n}を良い核の列とし、fを周期的可積分関数とします。ft_0で連続ならば、
\displaystyle\lim_{n\to\infty}(f*K_n)(t_0)=f(t_0)
である。特にfが連続ならこれは一様収束である。
この定理より、連続関数fについては\sigma_N=f*F_N\rightrightarrows fがわかるのです。よって連続関数はチェザロ総和の意味では常に一様収束するのです。

それでは。

Ker(f)

こんにちは,よねすけです.

院試勉強まじでだるいです.落ちたくないので頑張ります.

線形代数の復習をしてて何となく群論に似ているところがあるなあと思ったので書いときます.証明は書きません.

  • K上のベクトル空間V,V'について線形写像f:V\to V'を考えます.このとき,\ker f=\{x\in V|f(x)=0_{V'}\}Vの線形部分空間になります.
  • G,G'とその準同型写像f:G\to G'を考えます.このとき,\ker f=\{x\in G|f(x)=e_{G'}\}Gの(正規)部分群になります.

核に関するこのような綺麗な関係性は何か一般的に言われていることがあるんですかね.圏論とか勉強すればこういうことについてなにか言えるのかも知れないです.今回は短いですがここまでです.

それでは.

「あなたの一票で変わる」ような国は終わっているという話

こんにちは。ざるご(@zalgo3)です。

選挙シーズンでも何でもないですが、選挙について書きたくなったので書きます。

突然ですが、システム制御には、「安定性」という概念があります。

ざっくりと説明すると、安定性とは「入力の変数に微小な変化を与えたとき、出力の変化もまた微小である」という性質のことです。

入力に誤差が生じることなんてよくあることなので、一般的にシステムは安定である方が望ましいです。

これを選挙について当てはめて考えてみましょう。

入力は「国民の票の分布」であるとしましょう。

出力は「選挙が終わった後の政治動向」とでもしましょうか。

日本の場合、国政選挙の有効投票数は、ざっと5000万票くらいありますので、国民一人の一票が変わったというのは、「入力の微小な変化」であると言えるでしょう。

もうお分かりいただけたと思いますが、「あなたの一票で政治が変わる」ような選挙システムは、非常に「不安定」です。

「あなたの一票で政治が変わる」というのは、酒に酔った勢いで誰かが誤った投票をしただけで、とんでもない方向に国が動いてしまう可能性があるということです。

そんなシステムは使い物になりません。

「誰がねえ!誰に投票しても!おんなじやおんなじ」であるということは、システムとして非常に望ましかったということですね。

それでは、また。

メルカトル級数とライプニッツ級数

こんにちは、よねすけです。

TOEICの点数が返ってきました。なななんと!!!945点!!!とても嬉しい点数でした!!!ちなみに『なななんと』は『ララランド』を意識しました。

メルカトル級数ライプニッツ級数を導出する方法はいろいろと知られていますが、今回は高木貞治の『解析概論』に載っていたある公式から導出することが出来たので紹介したいと思います。

定本 解析概論

定本 解析概論

a{>}0,b{>}0とすれば、

\displaystyle\int_0^1\frac{x^{a-1}}{1+x^b}dx=\frac{1}{a}-\frac{1}{a+b}+\frac{1}{a+2b}-\frac{1}{a+3b}+\cdots

はじめにこの証明に取り掛かろう(章末問題に載っていて証明が載っていない!!)としたんですが若干厄介でした。上式の左辺を次のように変形します。

\displaystyle\int_0^1\frac{x^{a-1}}{1+x^b}dx=\lim_{c\to 1}\int_0^c\frac{x^{a-1}}{1+x^b}dx
ここでc{<1}とします。
このように書くのには訳があって、被積分関数の分母部分をべき展開する際に収束半径が問題になってくるからです。いま0\le x\le c{<}1区間では
\displaystyle\frac{1}{1+x^b}=1-x^b+x^{2b}-x^{3b}+\cdots
とでき、これはこの区間で一様収束です。これを用いると、
\displaystyle\begin{align}
\int_0^c\frac{x^{a-1}}{1+x^b}=&\int_0^c\left(x^{a-1}-x^{a+b-1}+x^{a+2b-1}-x^{a+3b-1}+\cdots\right)dx\\
=&\left[\frac{x^a}{a}-\frac{x^{a+b}}{a+b}+\frac{x^{a+2b}}{a+2b}-\frac{x^{a+3b}}{a+3b}+\cdots\right]_0^c\\
=&\lim_{n\to\infty}\sum_{k=0}^{n}\frac{(-1)^k}{a+kb}c^{a+kb}
\end{align}
がわかります。一様収束性から項別積分できることを利用しました。これより
\displaystyle\begin{align}
\int_0^1\frac{x^{a-1}}{1+x^b}dx=&\lim_{c\to 1}\int_0^c\frac{x^{a-1}}{1+x^b}dx\\
=&\lim_{c\to 1}\left(\lim_{n\to\infty}\sum_{k=0}^{n}\frac{(-1)^k}{a+kb}c^{a+kb}\right)\\
\underbrace{=}_{極限の交換}&\lim_{n\to\infty}\left(\lim_{c\to 1}\sum_{k=0}^{n}\frac{(-1)^k}{a+kb}c^{a+kb}\right)\\
=&\lim_{n\to\infty}\sum_{k=0}^{n}\frac{(-1)^{k}}{a+kb}\\
=&\frac{1}{a}-\frac{1}{a+b}+\frac{1}{a+2b}-\frac{1}{a+3b}+\cdots
\end{align}
となり、示されました!!!
としたいところなんですが、途中で出てきた極限の交換については言及しておかなければなりません。ここの極限操作を交換できることはAbelの定理と同様の証明を行うことで示されます。なのでこれは収束が確かめられるので極限の交換は正当化されます。これよりはじめの式が示されました。
\displaystyle\int_0^1\frac{x^{a-1}}{1+x^b}dx=\frac{1}{a}-\frac{1}{a+b}+\frac{1}{a+2b}-\frac{1}{a+3b}+\cdots
この式を用いてメルカトル級数ライプニッツ級数を証明しましょう。

a=1,b=1の場合、左辺は

\displaystyle\int_0^1\frac{1}{1+x}dx=\log 2
であり、右辺は
\displaystyle 1-\frac{1}{2}+\frac{1}{3}-\frac{1}{4}+\cdots
なのでこれよりメルカトル級数
\displaystyle\log 2=1-\frac{1}{2}+\frac{1}{3}-\frac{1}{4}+\cdots
が得られます。

a=1,b=2の場合、左辺は

\displaystyle\int_0^1\frac{1}{1+x^2}dx=\frac{\pi}{4}
であり、右辺は
\displaystyle 1-\frac{1}{3}+\frac{1}{5}-\frac{1}{7}+\cdots
なのでこれよりライプニッツ級数
\displaystyle\frac{\pi}{4}=1-\frac{1}{3}+\frac{1}{5}-\frac{1}{7}+\cdots
が得られます。

このようにしてメルカトル級数ライプニッツ級数が得られました。今回はAbelの定理を用いたのでAbelの定理の紹介もいつかしたいと思います。また、メルカトル級数ライプニッツ級数の別の証明も紹介したいと思います。

それでは。