1、绪论
Selective Search是R-CNN这篇文章里用的Region Proposal Method。Selective Search的文章是J.R.R. Uijlings, et al, Selective Search for Object Recognition, IJCV 2012。其中selective search的Python实现开源代码(https://github.com/AlpacaDB/selectivesearch)
2、源码使用
example文件夹放了一个例子
selectivesearch文件夹放了selective_search核心代码
源码给了一个简单的例子,如下所示
import skimage.data
import selectivesearch
img = skimage.data.astronaut()
img_lbl, regions = selectivesearch.selective_search(img, scale=500, sigma=0.9, min_size=10)
regions[:10]
=>
[{'labels': [0.0], 'rect': (0, 0, 15, 24), 'size': 260},
{'labels': [1.0], 'rect': (13, 0, 1, 12), 'size': 23},
{'labels': [2.0], 'rect': (0, 15, 15, 11), 'size': 30},
{'labels': [3.0], 'rect': (15, 14, 0, 0), 'size': 1},
{'labels': [4.0], 'rect': (0, 0, 61, 153), 'size': 4927},
{'labels': [5.0], 'rect': (0, 12, 61, 142), 'size': 177},
{'labels': [6.0], 'rect': (7, 54, 6, 17), 'size': 8},
{'labels': [7.0], 'rect': (28, 50, 18, 32), 'size': 22},
{'labels': [8.0], 'rect': (2, 99, 7, 24), 'size': 24},
{'labels': [9.0], 'rect': (14, 118, 79, 117), 'size': 4008}]
3、python3错误解决
参考博客selectivesearch python3 错误解决
使用python3的朋友们可能会遇到在运行时会遇到如下错误:
错误一:
这个比较简单,都会解决,用编辑器打开example.py,在35行使用python3的print用法就行。
for x, y, w, h in candidates:
# print x, y, w, h
print(x, y, w, h)
rect = mpatches.Rectangle((x, y),
w, h, fill=False, edgecolor='red', linewidth=1)
ax.add_patch(rect)
plt.show()
用编辑器打开selectivesearch.py
将第285行:
i, j = sorted(S.items(), cmp=lambda a, b: cmp(a[1], b[1]))[-1][0]
替换成:
i, j = sorted(list(S.items()), key = lambda a: a[1])[-1][0]
然后将init.py文件中的
from selectivesearch import selective_search # NOQA
改成
from .selectivesearch import selective_search # NOQA
详细原因请查看python3 module中init.py的需要注意的地方(其实也可以把两个程序放在同一个文件夹下)
由于字典并 python3 和 python2 并不兼容在206行(R = regions.items())下面添加将 dict_items 转换成 list
r = [elm for elm in R]
R = r
这下就可以正常使用了