物体検出でのラベル表示方法について

3 views (last 30 days)
HY
HY on 29 Sep 2020
Commented: HY on 30 Sep 2020
こんにちは。
学習し終えた物体検出器(Faster R-CNNやYOLOv2)を動画像を用いて検証を行っております。その際に、検出した物体のラベルを動画像上に表示させたく以下のようにプログラムしたのですが、エラーが発生してしまいます。原因としては、物体が検出されないためラベルも検出されずエラーが起き動画がストップしてしまいます。
物体が検出された場合のみラベルを表示されるには、どのようにすれば宜しいでしょうか。
よろしくお願いいたします。
[bboxes, score, label] = detect(rcnn, videoFrame,'NumStrongestRegions', 50,'MaxSize',[106 106]);
[selectedBbox,selectedScore,index] = selectStrongestBbox(bboxes,score, 'RatioType','Min', ...
'OverlapThreshold',0.5);
idx = selectedScore > 0.90
videoFrame = insertObjectAnnotation(videoFrame,'rectangle',...
selectedBbox(idx,:), cellstr(label(idx)), 'color','r');
このコードを実行すると以下のようなエラーが発生してしまいます。
エラー: insertObjectAnnotation
LABELは空以外にする必要があります。
エラー: insertObjectAnnotation>checkLabel (line 300)
validateattributes(label,{'cell'}, {'nonempty', 'vector'}, ...
エラー: insertObjectAnnotation>validateAndParseInputs (line 180)
checkLabel(label);
エラー: insertObjectAnnotation (line 123)
validateAndParseInputs(I, shape, position, label, varargin{:});
エラー: RCNNVideoRead_2 (line 60)
videoFrame = insertObjectAnnotation(videoFrame,'rectangle',...

Accepted Answer

Kenta
Kenta on 29 Sep 2020
こんにちは、if size(bbox,1)>0
など、if文を作るとよいです。
  9 Comments
Kenta
Kenta on 29 Sep 2020
idx = selectedScore > 0.90
videoFrame = insertObjectAnnotation(videoFrame,'rectangle',...
selectedBbox(idx,:), cellstr(label(idx)), 'color','r');
例えば、こちらの例にあわせると、if numel(find(idx==1)) > 0
とすれば、(またはsize(x,1)の形でも同じ意味)idxが1、つまりスコアが0.9以上のものがある場合IF以下の文を実行するという意味になります。例えば画像中に犬らしきものが3つあって、それが0.8, 0.85, 0.91というスコアで検出されたならば、numel(find(idx==1))の値は1になります。
そして、もし信頼度が0.9以上のものがなかった場合は、BBOXも空になって、そのあとでエラーになるので、この値が0 より大きい、ということが偽の場合はバウンディングボックスを出す工程がスキップされるのでエラーなく次のフレームに移ることができます。
HY
HY on 30 Sep 2020
詳しい説明ありがとうございます。 よく理解できました。 今日はできないのですが、もう一度試したいと思います。 大変ありがとうございました!!

Sign in to comment.

More Answers (0)

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!