MATLAB Answers

Faster R-CNNのアンカーボックスについて

27 views (last 30 days)
Kazuma Otake
Kazuma Otake on 16 Jan 2020
Answered: Kenta on 20 Jan 2020 at 11:33
Faster R-CNNではRPNでアンカーボックスを使用しますが、様々なサイトでアンカーボックスを調べているとボックスサイズとアスペクト比を定義するといったような記述を見かけます。しかし、MATLABでは縦横のサイズがあらかじめ定義されたボックスという記述があり、実際に縦と横のサイズの2列の行列を定義することによってtrainFasterRCNNObjectDetector関数は実行でき、検出もできるのですが、サイズとアスペクト比というのが気になります。
Faster R-CNNの検出プロセスも含めて回答いただきたいです。
ちなみにアンカーボックスはデータセットからkmedoids関数を使って15個の縦横サイズにクラスタリングしています。

  2 Comments

Kenta
Kenta on 16 Jan 2020
こんにちは、すいません、1点質問させてください。「アンカーボックスはデータセットからkmedoids関数を使って15個の縦横サイズにクラスタリングしています」とありますが、faster r-cnnでは、そのクラスタリング結果を学習オプションとしてどのように反映させていますか?たとえば、変数optionのところで、クラスタリング結果を何らかの制約条件として付加できるということでしょうか。YOLOv2では、kmedoidsやk-meansでクラスタリングして、アンカーボックスの数やアスペクト比、サイズを定義しますが、faster r-cnnの場合はそのようにするか知らず、教えていただきたいです。
私の理解では、faster r-cnnでは、特徴マップが、a × bだとすると、その各セルでアンカーボックスを出力するので、a*b*k個のアンカーボックスが作成される。そして、相対的な位置とアスペクト比に関する情報を回帰で求める、と思ってます。ただ、YOLOv2もあらかじめ決めておいたアンカーボックスとのoffsetを計算するのですが、kmedoidなどによるアンカーボックスのクラスタリング結果を直接的に利用するのはYOLOv2のほうかと思っていました。
例えば、こちらには「YOLOと同様、RPNもアンカーボックスを利用します。ただし、YOLOの場合とは異なり、RPNのアンカーボックスは、データから生成されることはなく、固定サイズおよび固定形状です」とあります。
さらに、matlabのドキュメントには「アンカー ボックスが MinBoxSizes に基づいて計算される場合、i 番目のアンカー ボックスのサイズは以下です。
round(MinBoxSizes(i,:) .* BoxPyramidScale ,^ (0:NumBoxPyramidLevels-1)')」
とあります。以上から、クラスタリング結果は参考にはなるものの、直接的には、ちょうど上の式のパラメータで制御していると思います。ただ、MinBoxSizesは、自分で定義可能で、
「領域提案ネットワーク (RPN) のアンカー ボックス ピラミッドを作成するのに使用される最小アンカー ボックス サイズ。'MinBoxSizes' と m 行 2 列の行列で構成されるコンマ区切りのペアとして指定します。各行はアンカー ボックスの [height width] を定義します。」とあります。
以上から、Kazuma Otakeさまは、MinboxSizesに、kmedoidの結果を反映させ、また、それにできるだけ沿うようにBoxPyramidScaleなども調整したのかと類推したのですがそれで正しいでしょうか?その場合、質問にある、サイズとアスペクト比とは、MinBoxSizes, boxpyramid scale, numboxpyramedlevelsに近しいものと思います。
Kazuma Otake
Kazuma Otake on 20 Jan 2020 at 5:58
回答ありがとうございます。私の理解に少し間違いがありました。
Faster R-CNNのネットワークは、以下のドキュメントを参考にして作成したのですが、resionProposallayerのanchorBoxesにkmedoid関数でクラスタリングした結果を入れていました。MiniboxSizeの指定はしていなかったので、既定値で実行されていました。
また、kmedoids関数でクラスタリングをした結果をMiniboxSizeに反映させるということでしたが、元々kmedoids関数の結果を入れていたanchorBoxesは何を意味しているのでしょうか。

Sign in to comment.

Accepted Answer

Kenta
Kenta on 20 Jan 2020 at 11:33
丁寧に説明してもらいありがとうございます。いえいえ、こちらこそうまく質問をくみ取れてませんでした。すいませんでした。まず、ご質問の解決のほうですが、下のコマンド(detectorに相当する変数名+「ドット」+AnchorBoxes)を実行してみると、アンカーボックスのサイズが見れます。
detector.AnchorBoxes
私の誤認識としては、以下のようにネットワークを定義したと思っていました。ここだと、コメント欄で言っていたようなやり方でアンカーボックスを指定できますが、教えてもらったURLのように、マニュアルでネットワーク作成されてたんですね。https://jp.mathworks.com/help/vision/ref/fasterrcnnobjectdetector.html
[detector, info] = trainFasterRCNNObjectDetector(trainingData, 'resnet50', options, ...
'NegativeOverlapRange', [0 0.3], ...
'PositiveOverlapRange', [0.6 1]);
「kmedoids関数の結果を入れていたanchorBoxesは何を意味しているのでしょうか」に関してですが、
おそらく、detectorのアンカーボックスにそのまま等しいと思います。Otake様が定義されたような、lgraph形式だと、MinBoxsizeなどは指定できないようで、おそらく定義されたアンカーボックスの値がそのまま書き換えれず、のこっていると思います。カスタムでネットワークを作ってアンカーボックスを明示的に指定した時、こちらのオプションの値とそれのどちらが優先されるかは試したことがなく、わかりません。ただ、最後に出力される変数detectorにアンカーボックス情報が入っていますので、そちらを参照されると、この質問は解決する気がしています。この説明もうまく質問に答えれてない気もしますが、またなにかあれば質問いただけると幸いです。

  0 Comments

Sign in to comment.

More Answers (0)

Sign in to answer this question.