note1:
读代码的阶段来说,自己感觉已经能有一定的python函数基础,开始对代码内部的策略进行理解,因为bbox为fast-rcnn代码,只是简单的介绍了一下。对rpn_msr进行一定的详细策略解析。主要在对代码算法理解层面。
bbox笔记:
两个程序是用Cython写的,好处是速度快,但因为要用到cython涉及编译问题,所以编译比较麻烦。在作者的issue里找到了对应的py文件,作为参看。这两个nms.py和bbox.py是一个通用的,大部分的代码上都是相同的。先附上对应代码:
#the py for nms
import numpy as np
def nms(dets, thresh):
x1 = dets[:, 0]
y1 = dets[:, 1]
x2 = dets[:, 2]
y2 = dets[:, 3]
scores = dets[:, 4]
areas = (x2 - x1 + 1) * (y2 - y1 + 1)
order = scores.argsort()[::-1]
keep = []
while order.size > 0:
i = order[0]
keep.append(i)
xx1 = np.maximum(x1[i], x1[order[1:]])
yy1 = np.maximum(y1[i], y1[order[1:]])
xx2 = np.minimum(x2[i], x2[order[1:]])
yy2 = np.minimum(y2[i], y2[order[1:]])
w = np.maximum(0.0, xx2 - xx1 + 1)
h = np.maximum(0.0, yy2 - yy1 + 1)
inter = w * h
ovr = inter / (areas[i] + areas[order[1:]] - inter)
inds = np.where(ovr <= thresh)[0]
order = order[inds + 1]
return keep
#the py for bbox
import numpy as np
def bbox_overlaps(boxes,query_boxes):
N = boxes.shape[0]
K = query_boxes.shape[0]
overlaps = np.zeros((N, K))
for k in range(K):
box_area = (
(query_boxes[k, 2] - query_boxes[k, 0] + 1) *
(query_boxes[k, 3] - query_boxes[k, 1] + 1)
)
for n in range(N):
iw = (
min(boxes[n, 2], query_boxes[k, 2]) -
max(boxes[n, 0], query_boxes[k, 0]) + 1
)
if iw > 0:
ih = (
min(boxes[n, 3], query_boxes[k, 3]) -
max(boxes[n, 1], query_boxes[k, 1]) + 1
)
if ih > 0:
ua = float(
(boxes[n, 2] - boxes[n, 0] + 1) *
(boxes[n, 3] - boxes[n, 1] + 1) +
box_area - iw * ih
)
overlaps[n, k] = iw * ih / ua
return overlaps
def bbox_intersections(boxes,query_boxes):
N = boxes.shape[0]
K = query_boxes.shape[0]
intersec = np.zeros((N, K))
for k in range(K):
box_area = (
(query_boxes[k, 2] - query_boxes[k, 0] + 1) *
(query_boxes[k, 3] - query_boxes[k, 1] + 1)
)
for n in range(N):
iw = (
min(boxes[n, 2], query_boxes[k, 2]) -
max(boxes[n, 0], query_boxes[k, 0]) + 1
)
if iw > 0:
ih = (
min(boxes[n, 3], query_boxes[k, 3]) -
max(boxes[n, 1], query_boxes[k, 1]) + 1
)
if ih > 0:
intersec[n, k] = iw * ih / box_area
return intersec
rpn_msr
知识点:
- ipython简介:
https://blog.csdn.net/jearmy/article/details/46524807
https://blog.csdn.net/qq_31095335/article/details/52179599
https://blog.csdn.net/ztf312/article/details/78677093 - from IPython import embed;
embed()
运行到插入语句的地方时,会转到 IPython环境下