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

3 visualizzazioni (ultimi 30 giorni)
HY
HY il 29 Set 2020
Commentato: HY il 30 Set 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',...

Risposta accettata

Kenta
Kenta il 29 Set 2020
こんにちは、if size(bbox,1)>0
など、if文を作るとよいです。
  9 Commenti
Kenta
Kenta il 29 Set 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 il 30 Set 2020
詳しい説明ありがとうございます。 よく理解できました。 今日はできないのですが、もう一度試したいと思います。 大変ありがとうございました!!

Accedi per commentare.

Più risposte (0)

Community Treasure Hunt

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

Start Hunting!