深度学习学习日记_Region proposal

定义:Region Proposal(候选区域),就是预先找出图中目标可能出现的位置,通过利用图像中的纹理、边缘、颜色等信息,保证在选取较少窗口。

目前的目标检测也被分为:有Region Proposal的方式(Faster-RCNN等)和没有Region Proposal的方法区分(YOLO等)

其他的必须了解一些概念:

Bounding boxes、Region Proposal、Ground Truth、IOU 

红色边框里面的内容是Region Proposal(候选区域:为什么叫候选区域,因为我们不会将红色的区域喂入CNN,因为飞机的翅膀特征会缺失(如果深度学习认为飞机必须有翅膀,那红色边框没有翅膀会很蠢))

绿色边框里面的内容是Ground Truth(也就是实际要检测的边框)

IOU计算方式(R∩G)/(R∪G),是一种评价标准

红色绿色区域的边框都可以称为Bounding Box,Bounding Box Regression的目的就是让红色边框变成绿色的边框

(参考https://blog.csdn.net/zijin0802034/article/details/77685438

核心算法:

1、from sliding windows   to   selective search

2、from selective search   to   region proposal network

一、候选区域算法one:Silding Windows __ 滑动窗口【一种暴力的搜索方式】

import cv2

def sliding_window(image, stepSize, windowSize):
    for y in range(0, image.shape[0], stepSize[1]):
        for x in range(0, image.shape[1], stepSize[0]):
            yield (x, y, image[y:y + windowSize[1], x:x + windowSize[0]])

if __name__ == '__main__':
    image = cv2.imread('1.jpg')

    # 自定义滑动窗口的大小
    w = image.shape[1]
    h = image.shape[0]
    # 本代码将图片分为3×3,共九个子区域,winW, winH和stepSize可自行更改
    (winW, winH) = (int(w/3),int(h/3))
    stepSize = (int(w/3), int(h/3))
    cnt = 0
    for (x, y, window) in sliding_window(image, stepSize=stepSize, windowSize=(winW, winH)):
        if window.shape[0] != winH or window.shape[1] != winW:
            continue
        # since we do not have a classifier, we'll just draw the window
        clone = image.copy()
        cv2.rectangle(clone, (x, y), (x + winW, y + winH), (0, 255, 0), 2)
        cv2.imshow("Window", clone)
        cv2.waitKey(1000)

        slice = image[y:y+winH,x:x+winW]
        cv2.namedWindow('sliding_slice',0)
        cv2.imshow('sliding_slice', slice)
        cv2.waitKey(1000)
        cnt = cnt + 1

二、候选区域算法two:Selective search __ ss __选择性搜索【一种比较不暴力的搜索方式】

import selectivesearch.selectivesearch as ss
import cv2
 
img = cv2.imread("1.jpg")
img_lbl, regions = ss.selective_search(img, scale=1000, sigma=0.8, min_size=50)
'''
im_orig:输入图片
scale:在开始图像分割时,两个区域是否融合取决于两区域区间相似度是否比两区域的区内相似度都低,
每个区域都是一个像素点,区内相似度是0,所以在区内相似度后面加上一个k/c,c是区域内总像素点数,
k就是scale,k越大,区域融合的越多,最终分割的区域总数越少.
min_size是若分割完后区域面积小于min_size,就与相邻的区域中相似度最接近的区域融合.
'''
for r in regions:
    x,y,h,w = r['rect']
    cv2.rectangle(img, (x, y), (x + h, y + w), (0, 255, 0), 2)
cv2.imshow("img", img)
print("OK")
cv2.waitKey(0)

三、候选区域算法three: Region Proposal Network __ RPN __Faster RNN核心所在

下面的章节会着重学习下

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值