Faster RCNN最終候補ボックス座標値の取得
7729 ワード
以前の训练を経て、小鱼はFaster RCNNネットワークの実现の検出机能に対してすでに少し理解して、次はネットの検出结果を利用して多目标の追迹を実现します.この特定のテーマはいくつかの実现の追迹の道の上の小さい知识の点を记录するために使います.
今日小魚が共有しているのは、訓練されたネットワークを利用してテスト画像の候補枠座標を得る方法です.
小魚はここから最終的な候補枠座標を得て、具体的な方法は:1.可視化の何の可視化関数を分析するのは:
関数から検出されたターゲットボックスbboxを可視化することができ、各ターゲットボックスに検出精度score.2.可視化されたものを見つけてどのようにbbox,scoreを生成するかを示し、可視化関数の2つのパラメータから次の関数に遡って可視化関数、すなわちdemo関数を呼び出すことができる.
この関数からbbox,score,コードの太くなった部分も見られます.ここではim_に遡りますdetect(net,im)関数、この関数は
すなわちreturnコードの上に出力bboxの次元を直接印刷して300*(4(K+1))の行列を得る.kはカテゴリ数を表す.最後にFast RCNNに入力された300個の候補枠であり,我々が望む最終可視化の候補枠ではない.3.これらの必要なものを利用して探した後,それぞれ必要なものを取り始める.ここで小魚は最終的な候補枠を必要とする.それは可視化における候補枠である.私は
各動作~/data/demo/01009.jpgピクチャの1つのターゲットボックスの座標は、合計数行で、そのピクチャに何個のターゲットが検出されたかを証明する.
今日小魚が共有しているのは、訓練されたネットワークを利用してテスト画像の候補枠座標を得る方法です.
~/py-faster-rcnn/tools/demo.py
というファイルを実行する際に、テストセットのターゲットを候補ボックスの可視化、すなわちdemo.py
のdef vis_detections
関数を行う.ここではdemoを参照する.pyコード解析はこのコードの主な3つの機能を理解する:候補ボックスの結果の可視化;ターゲットボックスの取得を検出する.パラメータの取得小魚はここから最終的な候補枠座標を得て、具体的な方法は:1.可視化の何の可視化関数を分析するのは:
def vis_detections(im, class_name, dets, thresh=0.5):
"""Draw detected bounding boxes."""
inds = np.where(dets[:, -1] >= thresh)[0]
if len(inds) == 0:
return
im = im[:, :, (2, 1, 0)]
fig, ax = plt.subplots(figsize=(12, 12))
ax.imshow(im, aspect='equal')
for i in inds:
bbox = dets[i, :4]
score = dets[i, -1]
ax.add_patch(
plt.Rectangle((bbox[0], bbox[1]),
bbox[2] - bbox[0],
bbox[3] - bbox[1], fill=False,
edgecolor='red', linewidth=3.5)
)
ax.text(bbox[0], bbox[1] - 2,
'{:s} {:.3f}'.format(class_name, score),
bbox=dict(facecolor='blue', alpha=0.5),
fontsize=14, color='white')
ax.set_title(('{} detections with '
'p({} | box) >= {:.1f}').format(class_name, class_name,
thresh),
fontsize=14)
plt.axis('off')
plt.tight_layout()
plt.draw()
関数から検出されたターゲットボックスbboxを可視化することができ、各ターゲットボックスに検出精度score.2.可視化されたものを見つけてどのようにbbox,scoreを生成するかを示し、可視化関数の2つのパラメータから次の関数に遡って可視化関数、すなわちdemo関数を呼び出すことができる.
def demo(net, image_name):
"""Detect object classes in an image using pre-computed object proposals."""
# Load the demo image
im_file = os.path.join(cfg.DATA_DIR, 'demo', image_name)
im = cv2.imread(im_file)
# Detect all object classes and regress object bounds
timer = Timer()
timer.tic()
**scores, boxes = im_detect(net, im)**
timer.toc()
print ('Detection took {:.3f}s for '
'{:d} object proposals').format(timer.total_time, boxes.shape[0])
# Visualize detections for each class
CONF_THRESH = 0.8
NMS_THRESH = 0.3
for cls_ind, cls in enumerate(CLASSES[1:]):
cls_ind += 1 # because we skipped background
cls_boxes = boxes[:, 4*cls_ind:4*(cls_ind + 1)]
cls_scores = scores[:, cls_ind]
dets = np.hstack((cls_boxes,
cls_scores[:, np.newaxis])).astype(np.float32)
keep = nms(dets, NMS_THRESH)
dets = dets[keep, :]
vis_detections(im, cls, dets, thresh=CONF_THRESH)
この関数からbbox,score,コードの太くなった部分も見られます.ここではim_に遡りますdetect(net,im)関数、この関数は
~/py-faster-rcnn/lib/fast_rcnn/test.py
に現れ、私たちはこの関数に移動して、im_detect(net,im)関数にはbbox,scoreコードとreturn scores,pred_の完全な計算があります.boxes.ここで注意しなければならないのは、im_detect(net,im)関数では、182行に印刷コードが追加されます.print pred_boxes.shape
return scores, pred_boxes
すなわちreturnコードの上に出力bboxの次元を直接印刷して300*(4(K+1))の行列を得る.kはカテゴリ数を表す.最後にFast RCNNに入力された300個の候補枠であり,我々が望む最終可視化の候補枠ではない.3.これらの必要なものを利用して探した後,それぞれ必要なものを取り始める.ここで小魚は最終的な候補枠を必要とする.それは可視化における候補枠である.私は
~/py-faster-rcnn/tools/demo.py
にprint出力命令を加えるだけでいいです.53行程度でprint bbox
を加えると、最終的な結果は以下のフォーマットになります.Demo for data/demo/00109.jpg
Detection took 0.142s for 300 object proposals
[ 1198.58422852 1014.32049561 1291.8581543 1123.05639648]
[ 675.29943848 634.83068848 766.93762207 724.48535156]
[ 1463.50634766 131.7862854 1548.50048828 223.23049927]
[ 1021.40447998 367.55706787 1138.07788086 479.88537598]
[ 1228.62817383 665.61010742 1330.26538086 781.8638916 ]
[ 1069.45117188 457.67938232 1159.40161133 542.62628174]
[ 588.99707031 251.40000916 685.6192627 361.50817871]
[ 1058.63061523 542.11383057 1131.95068359 612.54180908]
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
各動作~/data/demo/01009.jpgピクチャの1つのターゲットボックスの座標は、合計数行で、そのピクチャに何個のターゲットが検出されたかを証明する.