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

조회 수: 12 (최근 30일)
HY
HY 2020년 9월 29일
댓글: HY 2020년 9월 30일
こんにちは。
学習し終えた物体検出器(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',...

채택된 답변

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

댓글을 달려면 로그인하십시오.

추가 답변 (0개)

Community Treasure Hunt

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

Start Hunting!