滑动窗口的joblib python(HOG + SVM)

时间:2018-07-10 10:45:48

标签: python svm joblib

我正在研究一个项目,以使用SVM + HOG检测图像中的对象。问题是我的算法需要10到12秒钟(运行一个滑动窗口)来检测对象。因此,如何减少运行时间。有什么技巧可以做到这一点。谁能帮助我使用Joblib优化以下代码的for循环。这将大有帮助。 谢谢

def find_motors(img, ystart, ystop ,xstart ,xstop, cells_per_step, svc, X_scaler, params):

color_space    = params['color_space']
spatial_size   = params['spatial_size']
hist_bins      = params['hist_bins']
orient         = params['orient']
pix_per_cell   = params['pix_per_cell']
cell_per_block = params['cell_per_block']
hog_channel    = params['hog_channel']

spatial_feat   = params['spatial_feat']
hist_feat      = params['hist_feat']
hog_feat       = params['hog_feat']

assert(hog_channel == "ALL")
assert(spatial_feat == True)
assert(hist_feat == True)
assert(hog_feat == True)




img_tosearch = img[ystart:ystop,xstart:xstop,:]
ctrans_tosearch = convert_rgb_color(img_tosearch, conv=color_space)
ch1 = ctrans_tosearch[:,:,0]
ch2 = ctrans_tosearch[:,:,1]
ch3 = ctrans_tosearch[:,:,2]

# Define blocks and steps as above
nxblocks = (ch1.shape[1] // pix_per_cell)-1
nyblocks = (ch1.shape[0] // pix_per_cell)-1 
nfeat_per_block = orient*cell_per_block**2
# 64 was the orginal sampling rate, with 8 cells and 8 pix per cell
window = 64
nblocks_per_window = (window // pix_per_cell)-1 
nxsteps = (nxblocks - nblocks_per_window) // cells_per_step
nysteps = (nyblocks - nblocks_per_window) // cells_per_step

# Compute individual channel HOG features for the entire image
hog1 = get_hog_features(ch1, orient, pix_per_cell, cell_per_block, feature_vec=False)
hog2 = get_hog_features(ch2, orient, pix_per_cell, cell_per_block, feature_vec=False)
hog3 = get_hog_features(ch3, orient, pix_per_cell, cell_per_block, feature_vec=False)

bboxes = []
for xb in range(nxsteps+1):
    for yb in range(nysteps+1):
        ypos = yb*cells_per_step
        xpos = xb*cells_per_step
        # Extract HOG for this patch
        hog_feat1 = hog1[ypos:ypos+nblocks_per_window, xpos:xpos+nblocks_per_window].ravel() 
        hog_feat2 = hog2[ypos:ypos+nblocks_per_window, xpos:xpos+nblocks_per_window].ravel() 
        hog_feat3 = hog3[ypos:ypos+nblocks_per_window, xpos:xpos+nblocks_per_window].ravel() 
        hog_features = np.hstack((hog_feat1, hog_feat2, hog_feat3))

        xleft = xpos*pix_per_cell
        ytop = ypos*pix_per_cell

        # Extract the image patch
        subimg = cv2.resize(ctrans_tosearch[ytop:ytop+window, xleft:xleft+window], (64,64))

        # Get color features
        spatial_features = bin_spatial(subimg, size=spatial_size)
        hist_features = color_hist(subimg, nbins=hist_bins)

        # Scale features and make a prediction
        test_features = X_scaler.transform(np.hstack((spatial_features, hist_features, hog_features)).reshape(1, -1))    
        #test_features = X_scaler.transform(np.hstack((shape_feat, hist_feat)).reshape(1, -1))    
        test_prediction = svc.predict(test_features)

        if test_prediction == 1:
            xbox_left = np.int(xleft)
            ytop_draw = np.int(ytop)
            win_draw = np.int(window)
            box = [(xbox_left+xstart, ytop_draw+ystart), (xbox_left+win_draw+xstart,ytop_draw+win_draw+ystart)]
            bboxes.append(box)

return bboxes

0 个答案:

没有答案