Faster R-CNNのアンカーボックスについて
3 views (last 30 days)
Show older comments
Faster R-CNNではRPNでアンカーボックスを使用しますが、様々なサイトでアンカーボックスを調べているとボックスサイズとアスペクト比を定義するといったような記述を見かけます。しかし、MATLABでは縦横のサイズがあらかじめ定義されたボックスという記述があり、実際に縦と横のサイズの2列の行列を定義することによってtrainFasterRCNNObjectDetector関数は実行でき、検出もできるのですが、サイズとアスペクト比というのが気になります。
Faster R-CNNの検出プロセスも含めて回答いただきたいです。
ちなみにアンカーボックスはデータセットからkmedoids関数を使って15個の縦横サイズにクラスタリングしています。
2 Comments
Kenta
on 16 Jan 2020
Edited: Kenta
on 17 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に近しいものと思います。
Accepted Answer
Kenta
on 20 Jan 2020
丁寧に説明してもらいありがとうございます。いえいえ、こちらこそうまく質問をくみ取れてませんでした。すいませんでした。まず、ご質問の解決のほうですが、下のコマンド(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
More Answers (0)
See Also
Categories
Find more on Parallel and Cloud in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!