9月30SD机动战士敢达ol月球车改机包请发到44479...

sd敢达 跪求日更新后安全无毒可以改机包 发到 邮箱中 或+好友发离线文件_百度知道
sd敢达 跪求日更新后安全无毒可以改机包 发到 邮箱中 或+好友发离线文件
跪求日更新后安全无毒可以改机包
发到 邮箱中
或+好友发离线文件
要7月28日更新后的
安全、无毒、稳定、附加教程的改机包
最好简单点 只复制客户端重要文件类似的改机最好
我有更好的答案
收到请务必采纳
采纳率:31%
来自团队:
楼主,你只给这么点财富值要一个可靠改机包做梦,除非你加点,我给你。
就这点悬赏金...
其他1条回答
为您推荐:
其他类似问题
您可能关注的内容
7月28日的相关知识
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。求sd敢达客户端解压软件,或者最新的改机包也可以。_百度知道
求sd敢达客户端解压软件,或者最新的改机包也可以。
我有更好的答案
要被封号的,我都不用了,自己慢慢练吧,客户端解压软件去下
采纳率:17%
为您推荐:
其他类似问题
您可能关注的内容
解压软件的相关知识
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。sd敢达,求9月29日最新的改机包,在线等,秒给分!请发_百度知道
sd敢达,求9月29日最新的改机包,在线等,秒给分!请发
我有更好的答案
采纳率:100%
发了 附教程 给分吧
来自:求助得到的回答
为您推荐:
其他类似问题
您可能关注的内容
9月29日的相关知识
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。&h2&以下为udacity的SDCND的一个项目&/h2&&p&&br&&/p&&h2&项目描述:&/h2&&p&使用openCV设计算法处理车辆前置摄像头录下的视频,检测车辆前方的车道,并计算车道曲率&/p&&p&项目代码地址:&a href=&https://link.zhihu.com/?target=https%3A//github.com/yang1688899/CarND-Advanced-Lane-Lines& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&https://&/span&&span class=&visible&&github.com/yang1688899/&/span&&span class=&invisible&&CarND-Advanced-Lane-Lines&/span&&span class=&ellipsis&&&/span&&/a&&/p&&p&处理后视频:&/p&&a class=&video-box& href=&https://link.zhihu.com/?target=https%3A//www.zhihu.com/video/401344& target=&_blank& data-video-id=&& data-video-playable=&true& data-name=&& data-poster=&https://pic4.zhimg.com/80/v2-6aa3fe90cfb6fe6e35683_b.jpg& data-lens-id=&401344&&
&img class=&thumbnail& src=&https://pic4.zhimg.com/80/v2-6aa3fe90cfb6fe6e35683_b.jpg&&&span class=&content&&
&span class=&title&&&span class=&z-ico-extern-gray&&&/span&&span class=&z-ico-extern-blue&&&/span&&/span&
&span class=&url&&&span class=&z-ico-video&&&/span&https://www.zhihu.com/video/401344&/span&
&p&&br&&/p&&p&&br&&/p&&h2&实现步骤:&/h2&&ul&&li&使用提供的一组棋盘格图片计算相机校正矩阵(camera calibration matrix)和失真系数(distortion coefficients).&/li&&li&校正图片&/li&&li&使用梯度阈值(gradient threshold),颜色阈值(color threshold)等处理图片得到清晰捕捉车道线的二进制图(binary image).&/li&&li&使用透视变换(perspective transform)得到二进制图(binary image)的鸟瞰图(birds-eye view).&/li&&li&检测属于车道线的像素并用它来测出车道边界.&/li&&li&计算车道曲率及车辆相对车道中央的位置.&/li&&/ul&&p&&br&&/p&&ul&&li&处理图片展示车道区域,及车道的曲率和车辆位置.&/li&&/ul&&p&&br&&/p&&h2&相机校正(Camera Calibration)&/h2&&p&这里会使用opencv提供的方法通过棋盘格图片组计算相机校正矩阵(camera calibration matrix)和失真系数(distortion coefficients)。首先要得到棋盘格内角的世界坐标&object points&和对应图片坐标&image point&。假设棋盘格内角世界坐标的z轴为0,棋盘在(x,y)面上,则对于每张棋盘格图片组的图片而言,对应&object points&都是一样的。而通过使用openCv的cv2.findChessboardCorners(),传入棋盘格的灰度(grayscale)图片和横纵内角点个数就可得到图片内角的&image point&。&/p&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&def get_obj_img_points(images,grid=(9,6)):
object_points=[]
img_points = []
for img in images:
#生成object points
object_point = np.zeros( (grid[0]*grid[1],3),np.float32 )
object_point[:,:2]= np.mgrid[0:grid[0],0:grid[1]].T.reshape(-1,2)
#得到灰度图片
gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
#得到图片的image points
ret, corners = cv2.findChessboardCorners(gray, grid, None)
object_points.append(object_point)
img_points.append(corners)
return object_points,img_points
&/code&&/pre&&/div&&p&然后使用上方法得到的&code&object_points&/code& and &code&img_points&/code& 传入&code&cv2.calibrateCamera()&/code& 方法中就可以计算出相机校正矩阵(camera calibration matrix)和失真系数(distortion coefficients),再使用 &code&cv2.undistort()&/code&方法就可得到校正图片。&/p&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&def cal_undistort(img, objpoints, imgpoints):
ret, mtx, dist, rvecs, tvecs = cv2.calibrateCamera(objpoints, imgpoints, img.shape[1::-1], None, None)
dst = cv2.undistort(img, mtx, dist, None, mtx)
return dst
&/code&&/pre&&/div&&p&以下为其中一张棋盘格图片校正前后对比:&/p&&p&&br&&/p&&figure&&img src=&https://pic4.zhimg.com/v2-0c5b2bfa9bcf_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&1092& data-rawheight=&294& class=&origin_image zh-lightbox-thumb& width=&1092& data-original=&https://pic4.zhimg.com/v2-0c5b2bfa9bcf_r.jpg&&&/figure&&p&&br&&/p&&p&&br&&/p&&p&&br&&/p&&h2&校正测试图片&/h2&&p&代码如下:&/p&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&#获取棋盘格图片
cal_imgs = utils.get_images_by_dir('camera_cal')
#计算object_points,img_points
object_points,img_points = utils.calibrate(cal_imgs,grid=(9,6))
#获取测试图片
test_imgs = utils.get_images_by_dir('test_images')
#校正测试图片
undistorted = []
for img in test_imgs:
img = utils.cal_undistort(img,object_points,img_points)
undistorted.append(img)
&/code&&/pre&&/div&&p&测试图片校正前后对比: &/p&&figure&&img src=&https://pic2.zhimg.com/v2-84ff5aa47dfd9bc7bd3dca_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&998& data-rawheight=&1876& class=&origin_image zh-lightbox-thumb& width=&998& data-original=&https://pic2.zhimg.com/v2-84ff5aa47dfd9bc7bd3dca_r.jpg&&&/figure&&p&&br&&/p&&h2&阈值过滤(thresholding)&/h2&&p&这里会使用梯度阈值(gradient threshold),颜色阈值(color threshold)等来处理校正后的图片,捕获车道线所在位置的像素。(这里的梯度指的是颜色变化的梯度)&/p&&p&以下方法通过&cv2.Sobel()&方法计算x轴方向或y轴方向的颜色变化梯度导数,并以此进行阈值过滤(thresholding),得到二进制图(binary image):&/p&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&def abs_sobel_thresh(img, orient='x', thresh_min=0, thresh_max=255):
#装换为灰度图片
gray = cv2.cvtColor(img, cv2.COLOR_RGB2GRAY)
#使用cv2.Sobel()计算计算x方向或y方向的导数
if orient == 'x':
abs_sobel = np.absolute(cv2.Sobel(gray, cv2.CV_64F, 1, 0))
if orient == 'y':
abs_sobel = np.absolute(cv2.Sobel(gray, cv2.CV_64F, 0, 1))
scaled_sobel = np.uint8(255*abs_sobel/np.max(abs_sobel))
binary_output = np.zeros_like(scaled_sobel)
binary_output[(scaled_sobel &= thresh_min) & (scaled_sobel &= thresh_max)] = 1
return binary_output
&/code&&/pre&&/div&&p&通过测试发现使用x轴方向阈值在35到100区间过滤得出的二进制图可以捕捉较为清晰的车道线:&/p&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&x_thresh = utils.abs_sobel_thresh(img, orient='x', thresh_min=35, thresh_max=100)
&/code&&/pre&&/div&&p&以下为使用上面方法应用测试图片的过滤前后对比图: &/p&&figure&&img src=&https://pic3.zhimg.com/v2-eb44479f8dbc92fcfbfbf_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&998& data-rawheight=&1876& class=&origin_image zh-lightbox-thumb& width=&998& data-original=&https://pic3.zhimg.com/v2-eb44479f8dbc92fcfbfbf_r.jpg&&&/figure&&p&&br&&/p&&p&可以看到该方法的缺陷是在路面颜色相对较浅且车道线颜色为黄色时,无法捕捉到车道线(第三,第六,第七张图),但在其他情况车道线捕捉效果还是不错的。&/p&&p&接下来测试一下使用全局的颜色变化梯度来进行阈值过滤:&/p&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&def mag_thresh(img, sobel_kernel=3, mag_thresh=(0, 255)):
# Convert to grayscale
gray = cv2.cvtColor(img, cv2.COLOR_RGB2GRAY)
# Take both Sobel x and y gradients
sobelx = cv2.Sobel(gray, cv2.CV_64F, 1, 0, ksize=sobel_kernel)
sobely = cv2.Sobel(gray, cv2.CV_64F, 0, 1, ksize=sobel_kernel)
# Calculate the gradient magnitude
gradmag = np.sqrt(sobelx**2 + sobely**2)
# Rescale to 8 bit
scale_factor = np.max(gradmag)/255
gradmag = (gradmag/scale_factor).astype(np.uint8)
# Create a binary image of ones where threshold is met, zeros otherwise
binary_output = np.zeros_like(gradmag)
binary_output[(gradmag &= mag_thresh[0]) & (gradmag &= mag_thresh[1])] = 1
# Return the binary image
return binary_output
mag_thresh = utils.mag_thresh(img, sobel_kernel=9, mag_thresh=(50, 100))
&/code&&/pre&&/div&&p&&br&&/p&&figure&&img src=&https://pic1.zhimg.com/v2-5b2c9fdcb00ac_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&998& data-rawheight=&1876& class=&origin_image zh-lightbox-thumb& width=&998& data-original=&https://pic1.zhimg.com/v2-5b2c9fdcb00ac_r.jpg&&&/figure&&p&&br&&/p&&p&结果仍然不理想(观察第三,第六,第七张图片),原因是当路面颜色相对较浅且车道线颜色为黄色时,颜色变化梯度较小,想要把捕捉车道线需要把阈值下限调低,然而这样做同时还会捕获大量的噪音像素,效果会更差。&/p&&p&那么使用颜色阈值过滤呢? 下面为使用hls颜色空间的s通道进行阈值过滤:&/p&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&def hls_select(img,channel='s',thresh=(0, 255)):
hls = cv2.cvtColor(img, cv2.COLOR_RGB2HLS)
if channel=='h':
channel = hls[:,:,0]
elif channel=='l':
channel=hls[:,:,1]
channel=hls[:,:,2]
binary_output = np.zeros_like(channel)
binary_output[(channel & thresh[0]) & (channel &= thresh[1])] = 1
return binary_output
s_thresh = utils.hls_select(img,channel='s',thresh=(180, 255))
&/code&&/pre&&/div&&p&&br&&/p&&figure&&img src=&https://pic2.zhimg.com/v2-72579ebd3d4b33e0ccc7f_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&998& data-rawheight=&1876& class=&origin_image zh-lightbox-thumb& width=&998& data-original=&https://pic2.zhimg.com/v2-72579ebd3d4b33e0ccc7f_r.jpg&&&/figure&&p&&br&&/p&&p&可以看到在路面颜色相对较浅且车道线颜色为黄色的区域,车道线仍然被清晰的捕捉到了,然而在其他地方表现却不太理想(第四,第八张图片)&/p&&p&因此为了应对多变的路面情况,需要结合多种阈值过滤方法。&/p&&p&以下为最终的阈值过滤组合:&/p&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&def thresholding(img):
x_thresh = utils.abs_sobel_thresh(img, orient='x', thresh_min=10 ,thresh_max=230)
mag_thresh = utils.mag_thresh(img, sobel_kernel=3, mag_thresh=(30, 150))
dir_thresh = utils.dir_threshold(img, sobel_kernel=3, thresh=(0.7, 1.3))
hls_thresh = utils.hls_select(img, thresh=(180, 255))
lab_thresh = utils.lab_select(img, thresh=(155, 200))
luv_thresh = utils.luv_select(img, thresh=(225, 255))
#Thresholding combination
threshholded = np.zeros_like(x_thresh)
threshholded[((x_thresh == 1) & (mag_thresh == 1)) | ((dir_thresh == 1) & (hls_thresh == 1)) | (lab_thresh == 1) | (luv_thresh == 1)] = 1
return threshholded
&/code&&/pre&&/div&&p&&br&&/p&&figure&&img src=&https://pic1.zhimg.com/v2-efcb305d01ca332a98d7_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&998& data-rawheight=&1876& class=&origin_image zh-lightbox-thumb& width=&998& data-original=&https://pic1.zhimg.com/v2-efcb305d01ca332a98d7_r.jpg&&&/figure&&p&&br&&/p&&h2&透视变换(perspective transform)&/h2&&p&这里使用&cv2.getPerspectiveTransform()&来获取变形矩阵(tranform matrix),把阈值过滤后的二进制图片变形为鸟撒视角。&/p&&p&以下为定义的源点(source points)和目标点(destination points)&/p&&p&Source
Destination
585, 03, 0, 0960, 0&/p&&p&定义方法获取变形矩阵和逆变形矩阵:&/p&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&def get_M_Minv():
src = np.float32([[(203, 720), (585, 460), (695, 460), ()]])
dst = np.float32([[(320, 720), (320, 0), (960, 0), (960, 720)]])
M = cv2.getPerspectiveTransform(src, dst)
Minv = cv2.getPerspectiveTransform(dst,src)
return M,Minv
&/code&&/pre&&/div&&p&然后使用&cv2.warpPerspective()&传入相关值获得变形图片(wrapped image)&/p&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&thresholded_wraped = cv2.warpPerspective(thresholded, M, img.shape[1::-1], flags=cv2.INTER_LINEAR)
&/code&&/pre&&/div&&p&以下为原图及变形后的效果: &/p&&figure&&img src=&https://pic2.zhimg.com/v2-b6e3e1bda9d_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&998& data-rawheight=&1864& class=&origin_image zh-lightbox-thumb& width=&998& data-original=&https://pic2.zhimg.com/v2-b6e3e1bda9d_r.jpg&&&/figure&&p&&br&&/p&&p&以下为阈值过滤后二进制图变形后效果: &/p&&figure&&img src=&https://pic1.zhimg.com/v2-dfa4c7f9d28d1ac73d173_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&998& data-rawheight=&1876& class=&origin_image zh-lightbox-thumb& width=&998& data-original=&https://pic1.zhimg.com/v2-dfa4c7f9d28d1ac73d173_r.jpg&&&/figure&&p&&br&&/p&&h2&检测车道边界&/h2&&p&上面的二进制图还存在一定的噪音像素,为了准确检测车道边界,首先要确定哪些像素是属于车道线的。&/p&&p&首先要定位车道线的基点(图片最下方车道出现的x轴坐标),由于车道线在的像素都集中在x轴一定范围内,因此把图片一分为二,左右两边的在x轴上的像素分布峰值非常有可能就是车道线基点。&/p&&p&以下为测试片x轴的像素分布图:&/p&&p&&br&&/p&&figure&&img src=&https://pic1.zhimg.com/v2-27c9aef8056f7ccf01a2e1020994cda1_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&1079& data-rawheight=&1876& class=&origin_image zh-lightbox-thumb& width=&1079& data-original=&https://pic1.zhimg.com/v2-27c9aef8056f7ccf01a2e1020994cda1_r.jpg&&&/figure&&p&&br&&/p&&p&定位基点后,再使用使用滑动窗多项式拟合(sliding window polynomial fitting)来获取车道边界。这里使用9个200px宽的滑动窗来定位一条车道线像素:&/p&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&def find_line(binary_warped):
# Take a histogram of the bottom half of the image
histogram = np.sum(binary_warped[binary_warped.shape[0]//2:,:], axis=0)
# Find the peak of the left and right halves of the histogram
# These will be the starting point for the left and right lines
midpoint = np.int(histogram.shape[0]/2)
leftx_base = np.argmax(histogram[:midpoint])
rightx_base = np.argmax(histogram[midpoint:]) + midpoint
# Choose the number of sliding windows
nwindows = 9
# Set height of windows
window_height = np.int(binary_warped.shape[0]/nwindows)
# Identify the x and y positions of all nonzero pixels in the image
nonzero = binary_warped.nonzero()
nonzeroy = np.array(nonzero[0])
nonzerox = np.array(nonzero[1])
# Current positions to be updated for each window
leftx_current = leftx_base
rightx_current = rightx_base
# Set the width of the windows +/- margin
margin = 100
# Set minimum number of pixels found to recenter window
minpix = 50
# Create empty lists to receive left and right lane pixel indices
left_lane_inds = []
right_lane_inds = []
# Step through the windows one by one
for window in range(nwindows):
# Identify window boundaries in x and y (and right and left)
win_y_low = binary_warped.shape[0] - (window+1)*window_height
win_y_high = binary_warped.shape[0] - window*window_height
win_xleft_low = leftx_current - margin
win_xleft_high = leftx_current + margin
win_xright_low = rightx_current - margin
win_xright_high = rightx_current + margin
# Identify the nonzero pixels in x and y within the window
good_left_inds = ((nonzeroy &= win_y_low) & (nonzeroy & win_y_high) &
(nonzerox &= win_xleft_low) &
(nonzerox & win_xleft_high)).nonzero()[0]
good_right_inds = ((nonzeroy &= win_y_low) & (nonzeroy & win_y_high) &
(nonzerox &= win_xright_low) &
(nonzerox & win_xright_high)).nonzero()[0]
# Append these indices to the lists
left_lane_inds.append(good_left_inds)
right_lane_inds.append(good_right_inds)
# If you found & minpix pixels, recenter next window on their mean position
if len(good_left_inds) & minpix:
leftx_current = np.int(np.mean(nonzerox[good_left_inds]))
if len(good_right_inds) & minpix:
rightx_current = np.int(np.mean(nonzerox[good_right_inds]))
# Concatenate the arrays of indices
left_lane_inds = np.concatenate(left_lane_inds)
right_lane_inds = np.concatenate(right_lane_inds)
# Extract left and right line pixel positions
leftx = nonzerox[left_lane_inds]
lefty = nonzeroy[left_lane_inds]
rightx = nonzerox[right_lane_inds]
righty = nonzeroy[right_lane_inds]
# Fit a second order polynomial to each
left_fit = np.polyfit(lefty, leftx, 2)
right_fit = np.polyfit(righty, rightx, 2)
return left_fit, right_fit, left_lane_inds, right_lane_inds
&/code&&/pre&&/div&&p&以下为滑动窗多项式拟合(sliding window polynomial fitting)得到的结果:&/p&&p&&br&&/p&&figure&&img src=&https://pic2.zhimg.com/v2-72fef35b8d74f373cf3dc9_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&998& data-rawheight=&1864& class=&origin_image zh-lightbox-thumb& width=&998& data-original=&https://pic2.zhimg.com/v2-72fef35b8d74f373cf3dc9_r.jpg&&&/figure&&p&&br&&/p&&h2&计算车道曲率及车辆相对车道中心位置&/h2&&p&利用检测车道得到的拟合值(find_line 返回的left_fit, right_fit)计算车道曲率,及车辆相对车道中心位置:&/p&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&def calculate_curv_and_pos(binary_warped,left_fit, right_fit):
# Define y-value where we want radius of curvature
ploty = np.linspace(0, binary_warped.shape[0]-1, binary_warped.shape[0] )
leftx = left_fit[0]*ploty**2 + left_fit[1]*ploty + left_fit[2]
rightx = right_fit[0]*ploty**2 + right_fit[1]*ploty + right_fit[2]
# Define conversions in x and y from pixels space to meters
ym_per_pix = 30/720 # meters per pixel in y dimension
xm_per_pix = 3.7/700 # meters per pixel in x dimension
y_eval = np.max(ploty)
# Fit new polynomials to x,y in world space
left_fit_cr = np.polyfit(ploty*ym_per_pix, leftx*xm_per_pix, 2)
right_fit_cr = np.polyfit(ploty*ym_per_pix, rightx*xm_per_pix, 2)
# Calculate the new radii of curvature
left_curverad = ((1 + (2*left_fit_cr[0]*y_eval*ym_per_pix + left_fit_cr[1])**2)**1.5) / np.absolute(2*left_fit_cr[0])
right_curverad = ((1 + (2*right_fit_cr[0]*y_eval*ym_per_pix + right_fit_cr[1])**2)**1.5) / np.absolute(2*right_fit_cr[0])
curvature = ((left_curverad + right_curverad) / 2)
#print(curvature)
lane_width = np.absolute(leftx[719] - rightx[719])
lane_xm_per_pix = 3.7 / lane_width
veh_pos = (((leftx[719] + rightx[719]) * lane_xm_per_pix) / 2.)
cen_pos = ((binary_warped.shape[1] * lane_xm_per_pix) / 2.)
distance_from_center = veh_pos - cen_pos
return curvature,distance_from_center
&/code&&/pre&&/div&&h2&处理原图,展示信息&/h2&&p&使用逆变形矩阵把鸟瞰二进制图检测的车道镶嵌回原图,并高亮车道区域:&/p&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&def draw_area(undist,binary_warped,Minv,left_fit, right_fit):
# Generate x and y values for plotting
ploty = np.linspace(0, binary_warped.shape[0]-1, binary_warped.shape[0] )
left_fitx = left_fit[0]*ploty**2 + left_fit[1]*ploty + left_fit[2]
right_fitx = right_fit[0]*ploty**2 + right_fit[1]*ploty + right_fit[2]
# Create an image to draw the lines on
warp_zero = np.zeros_like(binary_warped).astype(np.uint8)
color_warp = np.dstack((warp_zero, warp_zero, warp_zero))
# Recast the x and y points into usable format for cv2.fillPoly()
pts_left = np.array([np.transpose(np.vstack([left_fitx, ploty]))])
pts_right = np.array([np.flipud(np.transpose(np.vstack([right_fitx, ploty])))])
pts = np.hstack((pts_left, pts_right))
# Draw the lane onto the warped blank image
cv2.fillPoly(color_warp, np.int_([pts]), (0,255, 0))
# Warp the blank back to original image space using inverse perspective matrix (Minv)
newwarp = cv2.warpPerspective(color_warp, Minv, (undist.shape[1], undist.shape[0]))
# Combine the result with the original image
result = cv2.addWeighted(undist, 1, newwarp, 0.3, 0)
return result
&/code&&/pre&&/div&&p&使用&cv2.putText()&方法处理原图展示车道曲率及车辆相对车道中心位置信息:&/p&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&def draw_values(img, curvature, distance_from_center):
font = cv2.FONT_HERSHEY_SIMPLEX
radius_text = &Radius of Curvature: %sm& % (round(curvature))
if distance_from_center & 0:
pos_flag = 'right'
pos_flag = 'left'
cv2.putText(img, radius_text, (100, 100), font, 1, (255, 255, 255), 2)
center_text = &Vehicle is %.3fm %s of center& % (abs(distance_from_center), pos_flag)
cv2.putText(img, center_text, (100, 150), font, 1, (255, 255, 255), 2)
return img
&/code&&/pre&&/div&&p&以下为测试图片处理后结果:&/p&&p&&br&&/p&&figure&&img src=&https://pic4.zhimg.com/v2-c3b740bff_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&743& data-rawheight=&3743& class=&origin_image zh-lightbox-thumb& width=&743& data-original=&https://pic4.zhimg.com/v2-c3b740bff_r.jpg&&&/figure&&p&(ps:最近在重新看一些udacity上做的项目,就顺便整理下来写成文章分享一下,以后陆续还会写一些,谢谢关注)&/p&
以下为udacity的SDCND的一个项目 项目描述:使用openCV设计算法处理车辆前置摄像头录下的视频,检测车辆前方的车道,并计算车道曲率项目代码地址:处理后视频: 实现步骤:使用提供的一组棋盘格图片计算相机校正矩阵(camera calibratio…
&figure&&img src=&https://pic4.zhimg.com/v2-ed263d4cd59dd061f7aee6_b.jpg& data-rawwidth=&1452& data-rawheight=&612& class=&origin_image zh-lightbox-thumb& width=&1452& data-original=&https://pic4.zhimg.com/v2-ed263d4cd59dd061f7aee6_r.jpg&&&/figure&&p&我们知道,单位四元数 &b&q&/b& 和 so(3) 向量 &img src=&http://www.zhihu.com/equation?tex=%5Cboldsymbol%5Cphi& alt=&\boldsymbol\phi& eeimg=&1&& (即 rotation vector)的对应关系为:&/p&&p&&img src=&http://www.zhihu.com/equation?tex=%7B%5Cbf+q%7D%28%7B%5Cbm+%5Cphi%7D%29+%3D+%5B+%5Csin%5Cfrac%7B%5Cphi%7D%7B2%7D+%7B%5Cbf+a%7D%2C+%5C%2C+%5Ccos+%5Cfrac%7B%5Cphi%7D%7B2%7D%5D%27& alt=&{\bf q}({\bm \phi}) = [ \sin\frac{\phi}{2} {\bf a}, \, \cos \frac{\phi}{2}]'& eeimg=&1&& ,
in which &img src=&http://www.zhihu.com/equation?tex=%5Cphi+%3D+%7C+%5Cbm+%5Cphi%7C%2C+%5Cquad+%7B%5Cbf+a%7D+%3D+%5Cfrac%7B%5Cbm+%5Cphi%7D%7B%5Cphi%7D& alt=&\phi = | \bm \phi|, \quad {\bf a} = \frac{\bm \phi}{\phi}& eeimg=&1&&&/p&&p&当 &img src=&http://www.zhihu.com/equation?tex=%5Cphi& alt=&\phi& eeimg=&1&& 很小时,可以近似表达为:&/p&&p&&img src=&http://www.zhihu.com/equation?tex=%7B%5Cbf+q%7D%28%7B%5Cbm+%5Cphi%7D%29+%3D+%5B+%5Cfrac%7B1%7D%7B2%7D+%7B%5Cbf+%5Cbm+%5Cphi%7D%2C+%5C%2C+1%5D%27& alt=&{\bf q}({\bm \phi}) = [ \frac{1}{2} {\bf \bm \phi}, \, 1]'& eeimg=&1&&&/p&&p&四元数小量和李代数小量有很简单的对应关系,所以在使用四元数的优化问题中,往往也取 &img src=&http://www.zhihu.com/equation?tex=%5Cdelta%5Cbm+%5Cphi& alt=&\delta\bm \phi& eeimg=&1&& 小量作为更新量,例如 OKVIS [1]。&/p&&p&具体到优化过程中,使用李群李代数(如预积分论文 [2])和使用四元数之间还是有区别的。使用李群李代数,在 residual 推导时会用到 so3 的左雅可比或右雅可比;使用四元数,会用到四元数矩阵(或共轭四元数矩阵)。不过既然两者使用的小量一致,那四元数矩阵和 so3 的左右雅可比的关系如何呢?&/p&&p&之所以有这个疑问,是因为 Xingyin 兄在博客里指出 [3],OKVIS 代码中使用了预积分,代码和预计分论文里的思路一致。不过实际上,虽然预积分流程一致,两者在雅可比推导上有所不同:预积分使用 so3 的右雅可比;OKVIS 使用四元数矩阵。所以,我们有必要把这两者的关系厘清。&/p&&p&&br&&/p&&h2&四元数矩阵&/h2&&p&两个旋转叠加,可以表达为两个四元数相乘,或者一个 4*4 矩阵与一个四元数相乘:&/p&&p&&img src=&http://www.zhihu.com/equation?tex=%7B%5Cbf+q+%5Cotimes+p+%3D+Q%7D_l%28%7B%5Cbf+q%29p%7D+%3D+%7B%5Cbf+Q%7D_r%7B%5Cbf+%28p%29q%7D& alt=&{\bf q \otimes p = Q}_l({\bf q)p} = {\bf Q}_r{\bf (p)q}& eeimg=&1&&&/p&&p&这里的 &img src=&http://www.zhihu.com/equation?tex=%7B%5Cbf+Q%7D_l& alt=&{\bf Q}_l& eeimg=&1&& 为四元数矩阵, &img src=&http://www.zhihu.com/equation?tex=%7B%5Cbf+Q%7D_r& alt=&{\bf Q}_r& eeimg=&1&& 为共轭四元数矩阵:&/p&&p&&img src=&http://www.zhihu.com/equation?tex=%7B%5Cbf+Q%7D_l%28%7B%5Cbf+q%7D%29+%3D+%5Cbegin%7Bbmatrix%7D+q_w+%7B%5Cbf+I%7D_3+%2B+%7B%5Cbf+q%7D_%7B1%3A3%7D%5E%5Cwedge+%26+%7B%5Cbf+q%7D_%7B1%3A3%7D%5C%5C+-+%7B%5Cbf+q%7D_%7B1%3A3%7D%27+%26+q_w+%5Cend%7Bbmatrix%7D& alt=&{\bf Q}_l({\bf q}) = \begin{bmatrix} q_w {\bf I}_3 + {\bf q}_{1:3}^\wedge & {\bf q}_{1:3}\\ - {\bf q}_{1:3}' & q_w \end{bmatrix}& eeimg=&1&& ,
&img src=&http://www.zhihu.com/equation?tex=%7B%5Cbf+Q%7D_r+%28%7B%5Cbf+q%7D%29+%3D+%5Cbegin%7Bbmatrix%7D+q_w+%7B%5Cbf+I%7D_3+-+%7B%5Cbf+q%7D_%7B1%3A3%7D%5E%5Cwedge+%26+%7B%5Cbf+q%7D_%7B1%3A3%7D%5C%5C+-+%7B%5Cbf+q%7D_%7B1%3A3%7D%27+%26+q_w+%5Cend%7Bbmatrix%7D& alt=&{\bf Q}_r ({\bf q}) = \begin{bmatrix} q_w {\bf I}_3 - {\bf q}_{1:3}^\wedge & {\bf q}_{1:3}\\ - {\bf q}_{1:3}' & q_w \end{bmatrix}& eeimg=&1&&&/p&&p&两种矩阵对于求导非常方便:&/p&&p&&img src=&http://www.zhihu.com/equation?tex=%5Cfrac%7B%5Cpartial%7B%5Cbf+q+%5Cotimes+p%7D%7D%7B%5Cpartial%5Cbf+p%7D+%3D+%7B%5Cbf+Q%7D_l%28%7B%5Cbf+q%7D%29%2C+%5C%2C%5Cfrac%7B%5Cpartial%7B%5Cbf+q+%5Cotimes+p%7D%7D%7B%5Cpartial%5Cbf+q%7D+%3D+%7B%5Cbf+Q%7D_r+%28%7B%5Cbf+p%7D%29& alt=&\frac{\partial{\bf q \otimes p}}{\partial\bf p} = {\bf Q}_l({\bf q}), \,\frac{\partial{\bf q \otimes p}}{\partial\bf q} = {\bf Q}_r ({\bf p})& eeimg=&1&&&/p&&p&现在,假设有个一个待估计的旋转量 &b&q&/b& ,其更新方式为 &img src=&http://www.zhihu.com/equation?tex=%5Cbf+q+%5Cleftarrow+q+%5Cotimes+q%28%5Cbm%5Calpha%29& alt=&\bf q \leftarrow q \otimes q(\bm\alpha)& eeimg=&1&& , &img src=&http://www.zhihu.com/equation?tex=%5Cbm+%5Calpha& alt=&\bm \alpha& eeimg=&1&& 为 so3 小量。假定有 &b&q &/b&的测量量 &img src=&http://www.zhihu.com/equation?tex=%5Cbf%5Ctilde+q& alt=&\bf\tilde q& eeimg=&1&&,定义误差函数 &img src=&http://www.zhihu.com/equation?tex=%7B%5Cbf+e%7D_%7B%5Crm+qt%7D& alt=&{\bf e}_{\rm qt}& eeimg=&1&& :&/p&&p&&img src=&http://www.zhihu.com/equation?tex=%7B%5Cbf+e%7D_%7B%5Crm+qt%7D+%3D+2%28+%5Ctilde+%7B%5Cbf+q%7D%5E%7B-1%7D%5Cotimes+%7B%5Cbf+q%7D%29_%7B1%3A3%7D+& alt=&{\bf e}_{\rm qt} = 2( \tilde {\bf q}^{-1}\otimes {\bf q})_{1:3} & eeimg=&1&&&/p&&p&则其相对于更新量的雅可比为&/p&&p&&img src=&http://www.zhihu.com/equation?tex=%5Cbegin%7Baligned%7D+%5Cfrac%7B%5Cpartial+%7B%5Cbf+e%7D_%7B%5Crm+qt%7D%7D%7B%5Cpartial+%5Cbm+%5Calpha%7D+%26%3D+2%5Cfrac%7B%5Cpartial+%28%5Ctilde%7B%5Cbf+q%7D%5E%7B-1%7D%5Cotimes%7B%5Cbf+q%7D%5Cotimes+%7B%5Cbf+q%7D%28%7B%5Cbm+%5Calpha%7D%29%29%7D%7B%5Cpartial+%5Cbm+%5Calpha%7D%5CBigg+%7C+_%7B%281%3A3%2C+%3A%29%7D+%5C%5C+%26%3D2%5Cfrac%7B%5Cpartial+%28%5Ctilde%7B%5Cbf+q%7D%5E%7B-1%7D%5Cotimes%7B%5Cbf+q%7D%5Cotimes+%7B%5Cbf+q%7D%28%7B%5Cbm+%5Calpha%7D%29%29%7D%7B%5Cpartial+%7B%5Cbf+q%7D%28%7B%5Cbm+%5Calpha%7D%29%7D+%5Cfrac%7B%5Cpartial+%7B%5Cbf+q%7D%28%7B%5Cbm+%5Calpha%7D%29%7D%7B%5Cpartial+%5Cbm+%5Calpha%7D%5CBigg+%7C+_%7B%281%3A3%2C+%3A%29%7D+%5C%5C+%26%3D%7B%5Cbf+Q%7D_l%28%5Ctilde%7B%5Cbf+q%7D%5E%7B-1%7D%5Cotimes%7B%5Cbf+q%7D%29+%5Cbegin%7Bbmatrix%7D+%7B%5Cbf+I%7D_3+%5C%5C+%7B%5Cbf+0_%7B1%5Ctimes+3%7D%7D+%5Cend%7Bbmatrix%7D%5CBigg+%7C+_%7B%281%3A3%2C+%3A%29%7D+%5C%5C+%26%3D%7B%5Cbf+Q%7D_l%28%5Ctilde%7B%5Cbf+q%7D%5E%7B-1%7D%5Cotimes%7B%5Cbf+q%7D%29+_%7B%281%3A3%2C+1%3A3%29%7D+%5Cend%7Baligned%7D& alt=&\begin{aligned} \frac{\partial {\bf e}_{\rm qt}}{\partial \bm \alpha} &= 2\frac{\partial (\tilde{\bf q}^{-1}\otimes{\bf q}\otimes {\bf q}({\bm \alpha}))}{\partial \bm \alpha}\Bigg | _{(1:3, :)} \\ &=2\frac{\partial (\tilde{\bf q}^{-1}\otimes{\bf q}\otimes {\bf q}({\bm \alpha}))}{\partial {\bf q}({\bm \alpha})} \frac{\partial {\bf q}({\bm \alpha})}{\partial \bm \alpha}\Bigg | _{(1:3, :)} \\ &={\bf Q}_l(\tilde{\bf q}^{-1}\otimes{\bf q}) \begin{bmatrix} {\bf I}_3 \\ {\bf 0_{1\times 3}} \end{bmatrix}\Bigg | _{(1:3, :)} \\ &={\bf Q}_l(\tilde{\bf q}^{-1}\otimes{\bf q}) _{(1:3, 1:3)} \end{aligned}& eeimg=&1&&&/p&&p&即 &img src=&http://www.zhihu.com/equation?tex=%5Cfrac%7B%5Cpartial+%7B%5Cbf+e%7D_%7B%5Crm+qt%7D%7D%7B%5Cpartial+%5Cbm+%5Calpha%7D+%3D%7B%5Cbf+Q%7D_l%5B%7B%5Cbf+q%7D%28%7B%5Cbf+e%7D_%7B%5Crm+qt%7D%29%5D+_%7B%281%3A3%2C+1%3A3%29%7D+& alt=&\frac{\partial {\bf e}_{\rm qt}}{\partial \bm \alpha} ={\bf Q}_l[{\bf q}({\bf e}_{\rm qt})] _{(1:3, 1:3)} & eeimg=&1&&&/p&&p&&br&&/p&&h2&so(3) 雅可比&/h2&&p&据 Barfoot [4],若 &img src=&http://www.zhihu.com/equation?tex=%5Cbm%5Cphi& alt=&\bm\phi& eeimg=&1&& 的左雅可比为 &img src=&http://www.zhihu.com/equation?tex=%7B%5Cbf+J%7D_l%28%7B%5Cbm+%5Cphi%7D%29& alt=&{\bf J}_l({\bm \phi})& eeimg=&1&& ,右雅可比为 &img src=&http://www.zhihu.com/equation?tex=%7B%5Cbf+J%7D_r%28%7B%5Cbm+%5Cphi%7D%29& alt=&{\bf J}_r({\bm \phi})& eeimg=&1&& :&/p&&figure&&img src=&https://pic2.zhimg.com/v2-ac5b2e6bf76c88eaa5a8c2f_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&980& data-rawheight=&156& class=&origin_image zh-lightbox-thumb& width=&980& data-original=&https://pic2.zhimg.com/v2-ac5b2e6bf76c88eaa5a8c2f_r.jpg&&&/figure&&p&于是,假设有待估计量 &b&C&/b&,更新方式为 &img src=&http://www.zhihu.com/equation?tex=%7B%5Cbf+C%7D+%5Cleftarrow+%7B%5Cbf+C%7D%5C%2C+%7B%5Crm+Exp%7D%28%7B%5Cbm+%5Calpha%7D%29& alt=&{\bf C} \leftarrow {\bf C}\, {\rm Exp}({\bm \alpha})& eeimg=&1&& , &img src=&http://www.zhihu.com/equation?tex=%5Cbm+%5Calpha& alt=&\bm \alpha& eeimg=&1&& 为 so3 小量。假定有 &b&C &/b&的测量量 &img src=&http://www.zhihu.com/equation?tex=%5Cbf%5Ctilde+C& alt=&\bf\tilde C& eeimg=&1&&,定义误差函数 &img src=&http://www.zhihu.com/equation?tex=%7B%5Cbf+e%7D_%7B%5Crm+lie%7D& alt=&{\bf e}_{\rm lie}& eeimg=&1&& :&/p&&p&&img src=&http://www.zhihu.com/equation?tex=%7B%5Cbf+e%7D_%7B%5Crm+lie%7D+%3D+%7B%5Crm+Log%7D%28+%5Ctilde+%7B%5Cbf+C%7D%27+%7B%5Cbf+C%7D%29& alt=&{\bf e}_{\rm lie} = {\rm Log}( \tilde {\bf C}' {\bf C})& eeimg=&1&&&/p&&p&则其相对于更新量的雅可比为:&/p&&p&&img src=&http://www.zhihu.com/equation?tex=%5Cbegin%7Baligned%7D+%5Cfrac%7B%5Cpartial+%7B%5Cbf+e%7D_%7B%5Crm+lie%7D%7D%7B%5Cpartial+%5Cbm+%5Calpha%7D+%26%3D+%5Cfrac%7B%5Cpartial%7B%5Crm+Log%7D%28%5Ctilde%7B%5Cbf+C%7D%27%7B%5Cbf+C%7D+%5C%2C%7B%5Crm+Exp%7D+%28%7B%5Cbm+%5Calpha%7D%29%29%7D%7B%5Cpartial+%5Cbm+%5Calpha%7D+%5C%5C+%26+%3D+%7B%5Crm+J%7D_r%28%7B%5Crm+Log%28%5Ctilde%7B%5Cbf+C%7D%27%7B%5Cbf+C%7D+%29%7D%29%5E%7B-1%7D%5C%5C+%26+%3D+%7B%5Crm+J%7D_r%28%7B%5Cbf+e%7D_%7B%5Crm+lie%7D%29%5E%7B-1%7D+%5Cend%7Baligned%7D& alt=&\begin{aligned} \frac{\partial {\bf e}_{\rm lie}}{\partial \bm \alpha} &= \frac{\partial{\rm Log}(\tilde{\bf C}'{\bf C} \,{\rm Exp} ({\bm \alpha}))}{\partial \bm \alpha} \\ & = {\rm J}_r({\rm Log(\tilde{\bf C}'{\bf C} )})^{-1}\\ & = {\rm J}_r({\bf e}_{\rm lie})^{-1} \end{aligned}& eeimg=&1&&&/p&&p&&br&&/p&&h2&讨论&/h2&&p&我们来比较一下 &img src=&http://www.zhihu.com/equation?tex=%5Cfrac%7B%5Cpartial+%7B%5Cbf+e%7D_%7B%5Crm+qt%7D%7D%7B%5Cpartial+%5Cbm+%5Calpha%7D+& alt=&\frac{\partial {\bf e}_{\rm qt}}{\partial \bm \alpha} & eeimg=&1&& 和&img src=&http://www.zhihu.com/equation?tex=%5Cfrac%7B%5Cpartial+%7B%5Cbf+e%7D_%7B%5Crm+lie%7D%7D%7B%5Cpartial+%5Cbm+%5Calpha%7D+& alt=&\frac{\partial {\bf e}_{\rm lie}}{\partial \bm \alpha} & eeimg=&1&& 。&/p&&p&首先,&/p&&p&&img src=&http://www.zhihu.com/equation?tex=%5Cbegin%7Baligned%7D+%5Cfrac%7B%5Cpartial+%7B%5Cbf+e%7D_%7B%5Crm+qt%7D%7D%7B%5Cpartial+%5Cbm+%5Calpha%7D+%26%3D%7B%5Cbf+Q%7D_l%5B%7B%5Cbf+q%7D%28%7B%5Cbf+e%7D_%7B%5Crm+qt%7D%29%5D+_%7B%281%3A3%2C+1%3A3%29%7D%5C%5C+%26%3Dq_w%28%7B%5Cbf+e%7D_%7B%5Crm+qt%7D%29+%7B%5Cbf+I%7D_3+%2B+%7B%5Cbf+q%7D_%7B1%3A3%7D%5E%5Cwedge%28%7B%5Cbf+e%7D_%7B%5Crm+qt%7D%29+%5Cend%7Baligned%7D& alt=&\begin{aligned} \frac{\partial {\bf e}_{\rm qt}}{\partial \bm \alpha} &={\bf Q}_l[{\bf q}({\bf e}_{\rm qt})] _{(1:3, 1:3)}\\ &=q_w({\bf e}_{\rm qt}) {\bf I}_3 + {\bf q}_{1:3}^\wedge({\bf e}_{\rm qt}) \end{aligned}& eeimg=&1&&&/p&&p&如果可以认为误差函数 &img src=&http://www.zhihu.com/equation?tex=%7B%5Cbf+e%7D_%7B%5Crm+qt%7D& alt=&{\bf e}_{\rm qt}& eeimg=&1&& 很小,则&/p&&p&&img src=&http://www.zhihu.com/equation?tex=%5Cfrac%7B%5Cpartial+%7B%5Cbf+e%7D_%7B%5Crm+qt%7D%7D%7B%5Cpartial+%5Cbm+%5Calpha%7D+%5Capprox+%7B%5Cbf+I%7D_3+%2B+%5Cfrac%7B1%7D%7B2%7D%7B%5Cbf+e%7D_%7B%5Crm+qt%7D%5E%5Cwedge& alt=&\frac{\partial {\bf e}_{\rm qt}}{\partial \bm \alpha} \approx {\bf I}_3 + \frac{1}{2}{\bf e}_{\rm qt}^\wedge& eeimg=&1&&&/p&&p&&br&&/p&&p&另一方面,据 Barfoot [4],有&/p&&p&&img src=&http://www.zhihu.com/equation?tex=%5Cfrac%7B%5Cpartial+%7B%5Cbf+e%7D_%7B%5Crm+lie%7D%7D%7B%5Cpartial+%5Cbm+%5Calpha%7D+%3D+%7B%5Crm+J%7D_r%28%7B%5Cbf+e%7D_%7B%5Crm+lie%7D%29%5E%7B-1%7D+%3D+%5Cfrac%7B%5Cphi_%7Be%7D%7D%7B2%7D%5Ccot%5Cfrac%7B%5Cphi_%7Be%7D%7D%7B2%7D+%7B%5Cbf+I%7D%2B%281-%5Cfrac%7B%5Cphi_%7Be%7D%7D%7B2%7D%5Ccot%5Cfrac%7B%5Cphi_%7Be%7D%7D%7B2%7D%29%7B%5Cbf+a_%7B%5Cit+e%7Da_%7B%5Cit+e%7D%7D%27+%2B+%5Cfrac%7B%5Cphi_%7Be%7D%7D%7B2%7D%7B%5Cbf+a%7D_%7Be%7D%5E%5Cwedge& alt=&\frac{\partial {\bf e}_{\rm lie}}{\partial \bm \alpha} = {\rm J}_r({\bf e}_{\rm lie})^{-1} = \frac{\phi_{e}}{2}\cot\frac{\phi_{e}}{2} {\bf I}+(1-\frac{\phi_{e}}{2}\cot\frac{\phi_{e}}{2}){\bf a_{\it e}a_{\it e}}' + \frac{\phi_{e}}{2}{\bf a}_{e}^\wedge& eeimg=&1&&&/p&&p&如果可以认为误差函数很小,即 &img src=&http://www.zhihu.com/equation?tex=%5Cphi_%7Be%7D%5Crightarrow+0& alt=&\phi_{e}\rightarrow 0& eeimg=&1&& ,则 &img src=&http://www.zhihu.com/equation?tex=%5Cfrac%7B%5Cphi_%7Be%7D%7D%7B2%7D%5Ccot%5Cfrac%7B%5Cphi_%7Be%7D%7D%7B2%7D+%5Crightarrow+1& alt=&\frac{\phi_{e}}{2}\cot\frac{\phi_{e}}{2} \rightarrow 1& eeimg=&1&& ,于是&/p&&p&&img src=&http://www.zhihu.com/equation?tex=%5Cfrac%7B%5Cpartial+%7B%5Cbf+e%7D_%7B%5Crm+lie%7D%7D%7B%5Cpartial+%5Cbm+%5Calpha%7D+%5Capprox+%7B%5Cbf+I%7D%2B%5Cfrac%7B%5Cphi_%7Be%7D%7D%7B2%7D%7B%5Cbf+a%7D_%7Be%7D%5E%5Cwedge%3D%7B%5Cbf+I%7D+%2B+%5Cfrac%7B1%7D%7B2%7D%7B%5Cbf+e%7D_%7B%5Crm+lie%7D%5E%5Cwedge& alt=&\frac{\partial {\bf e}_{\rm lie}}{\partial \bm \alpha} \approx {\bf I}+\frac{\phi_{e}}{2}{\bf a}_{e}^\wedge={\bf I} + \frac{1}{2}{\bf e}_{\rm lie}^\wedge& eeimg=&1&& 。&/p&&p&&br&&/p&&p&可以看到,当可以认为误差函数很小时, &img src=&http://www.zhihu.com/equation?tex=%5Cfrac%7B%5Cpartial+%7B%5Cbf+e%7D_%7B%5Crm+qt%7D%7D%7B%5Cpartial+%5Cbm+%5Calpha%7D+& alt=&\frac{\partial {\bf e}_{\rm qt}}{\partial \bm \alpha} & eeimg=&1&& 和&img src=&http://www.zhihu.com/equation?tex=%5Cfrac%7B%5Cpartial+%7B%5Cbf+e%7D_%7B%5Crm+lie%7D%7D%7B%5Cpartial+%5Cbm+%5Calpha%7D+& alt=&\frac{\partial {\bf e}_{\rm lie}}{\partial \bm \alpha} & eeimg=&1&& 是相等的。这其实很好理解,因为当 &img src=&http://www.zhihu.com/equation?tex=%7B%5Cbf+e%7D_%7B%5Crm+qt%7D+%3D+2%28+%5Ctilde+%7B%5Cbf+q%7D%5E%7B-1%7D%5Cotimes+%7B%5Cbf+q%7D%29_%7B1%3A3%7D& alt=&{\bf e}_{\rm qt} = 2( \tilde {\bf q}^{-1}\otimes {\bf q})_{1:3}& eeimg=&1&& 很小时, &img src=&http://www.zhihu.com/equation?tex=%7B%5Cbf+q%7D%28%7B%5Cbm+%5Cphi%7D%29+%3D+%5B+%5Cfrac%7B1%7D%7B2%7D+%7B%5Cbf+%5Cbm+%5Cphi%7D%2C+%5C%2C+1%5D%27& alt=&{\bf q}({\bm \phi}) = [ \frac{1}{2} {\bf \bm \phi}, \, 1]'& eeimg=&1&& 估计成立,所以 &img src=&http://www.zhihu.com/equation?tex=%7B%5Cbf+e%7D_%7B%5Crm+qt%7D%2C+%7B%5Cbf+e%7D_%7B%5Crm+lie%7D& alt=&{\bf e}_{\rm qt}, {\bf e}_{\rm lie}& eeimg=&1&& 实际上就表示同一个量,都是误差旋转量的李代数,推导出来的雅可比自然就一样了,我们只是通过不同的途径去算同一个量而已。这个例子的价值在于,展示了四元数矩阵和 so3 雅可比之间的具体关系,即:&/p&&blockquote&如果有可以认为很小的 so3 量,如某个误差函数 &img src=&http://www.zhihu.com/equation?tex=%7B%5Cbf+e%7D_%7B%5Cphi%7D& alt=&{\bf e}_{\phi}& eeimg=&1&& ,则&br&&img src=&http://www.zhihu.com/equation?tex=%7B%5Cbf+J%7D_r%28%7B%5Cbf+e%7D_%7B%5Cphi%7D%29%5E%7B-1%7D+%3D+%7B%5Cbf+Q%7D_l%28%7B%5Cbf+q%7D%28%7B%5Cbf+e%7D_%7B%5Cphi%7D%29%29_%7B%281%3A3%2C1%3A3%29%7D& alt=&{\bf J}_r({\bf e}_{\phi})^{-1} = {\bf Q}_l({\bf q}({\bf e}_{\phi}))_{(1:3,1:3)}& eeimg=&1&&&/blockquote&&p&上面用的是右扰动模型;如果使用左扰动,可类似地得到 &img src=&http://www.zhihu.com/equation?tex=%7B%5Cbf+J%7D_l%28%7B%5Cbf+e%7D_%7B%5Cphi%7D%29%5E%7B-1%7D+%3D+%7B%5Cbf+Q%7D_r%28%7B%5Cbf+q%7D%28%7B%5Cbf+e%7D_%7B%5Cphi%7D%29%29_%7B%281%3A3%2C1%3A3%29%7D& alt=&{\bf J}_l({\bf e}_{\phi})^{-1} = {\bf Q}_r({\bf q}({\bf e}_{\phi}))_{(1:3,1:3)}& eeimg=&1&& 。&/p&&p&&br&&/p&&h2&尾声&/h2&&p&如果 &img src=&http://www.zhihu.com/equation?tex=%5Cphi& alt=&\phi& eeimg=&1&& 不能认为很小, &img src=&http://www.zhihu.com/equation?tex=%7B%5Cbf+J%7D_r%28%5Cbm+%5Cphi%29%5E%7B-1%7D& alt=&{\bf J}_r(\bm \phi)^{-1}& eeimg=&1&& 与 &img src=&http://www.zhihu.com/equation?tex=%7B%5Cbf+Q%7D_l%28%7B%5Cbf+q%7D%28+%7B%5Cbm%5Cphi%7D+%29%29& alt=&{\bf Q}_l({\bf q}( {\bm\phi} ))& eeimg=&1&& 的关系是怎样?并不复杂。区别仅在于此时&img src=&http://www.zhihu.com/equation?tex=%7B%5Cbf+q%7D%28%7B%5Cbm+%5Cphi%7D%29+%3D+%5B+%5Cfrac%7B1%7D%7B2%7D+%7B%5Cbf+%5Cbm+%5Cphi%7D%2C+%5C%2C+1%5D%27& alt=&{\bf q}({\bm \phi}) = [ \frac{1}{2} {\bf \bm \phi}, \, 1]'& eeimg=&1&& 的估计不能成立, &img src=&http://www.zhihu.com/equation?tex=2%7B%5Cbf+q%7D_%7B1%3A3%7D& alt=&2{\bf q}_{1:3}& eeimg=&1&& 和 &img src=&http://www.zhihu.com/equation?tex=%5Cbm+%5Cphi& alt=&\bm \phi& eeimg=&1&& 不能当作一个量而已;但它们之间的相互关系是已知的: &img src=&http://www.zhihu.com/equation?tex=%7B%5Cbf+q%7D_%7B1%3A3%7D%3D+%5Csin%5Cfrac%7B%7C%5Cbm%5Cphi%7C%7D%7B2%7D+%5Ccdot+%5Cfrac%7B%5Cbm+%5Cphi%7D%7B%7C%5Cbm%5Cphi%7C%7D& alt=&{\bf q}_{1:3}= \sin\frac{|\bm\phi|}{2} \cdot \frac{\bm \phi}{|\bm\phi|}& eeimg=&1&& 。在上面的演算中,我们实际上得到的结果是&/p&&p&&img src=&http://www.zhihu.com/equation?tex=%5Cfrac%7B%5Cpartial%5Cbm+%5Cphi%7D%7B%5Cpartial%7B%5Cbm+%5Calpha%7D%7D%3D%7B%5Cbf+J%7D_r%28%7B%5Cbm%5Cphi%7D%29%5E%7B-1%7D%2C%5Cquad+%5Cfrac%7B%5Cpartial%7B%5Cbf+q%7D_%7B1%3A3%7D%7D%7B%5Cpartial%7B%5Cbm+%5Calpha%7D%7D%3D%7B%5Cbf+Q%7D_l%28%7B%5Cbf+q%7D%28%7B%5Cbm%5Cphi%7D%29%29_%7B%281%3A3%2C1%3A3%29%7D& alt=&\frac{\partial\bm \phi}{\partial{\bm \alpha}}={\bf J}_r({\bm\phi})^{-1},\quad \frac{\partial{\bf q}_{1:3}}{\partial{\bm \alpha}}={\bf Q}_l({\bf q}({\bm\phi}))_{(1:3,1:3)}& eeimg=&1&&&/p&&p&可以证明:&/p&&p&&img src=&http://www.zhihu.com/equation?tex=%7B%5Cbf+J%7D_r%28%7B%5Cbm%5Cphi%7D%29%5E%7B-1%7D+%3D+%5Cfrac%7B%5Cpartial%5Cbm+%5Cphi%7D%7B%5Cpartial%7B%5Cbf+q%7D_%7B1%3A3%7D%7D+%5C%2C%7B%5Cbf+Q%7D_l%28%7B%5Cbf+q%7D%28%7B%5Cbm%5Cphi%7D%29%29_%7B%281%3A3%2C1%3A3%29%7D& alt=&{\bf J}_r({\bm\phi})^{-1} = \frac{\partial\bm \phi}{\partial{\bf q}_{1:3}} \,{\bf Q}_l({\bf q}({\bm\phi}))_{(1:3,1:3)}& eeimg=&1&& 。&/p&&p&代入过程就不贴了。&/p&&p&&br&&/p&&p&&br&&/p&&h2&参考文献&/h2&&p&[1] S. Leutenegger, S. Lynen, M. Bosse, R. Siegwart, P. Furgale, “Keyframe-based visual-inertial odometry using nonlinear optimization”, Int. Journal of Robotics Research (IJRR), 2014.&/p&&p&[2] C. Forster, L. Carlone, F. Dellaert and D. Scaramuzza, &On-Manifold Preintegration for Real-Time Visual--Inertial Odometry,& in &i&IEEE Transactions on Robotics&/i&, vol. 33, no. 1, pp. 1-21, Feb. 2017.&/p&&p&[3] &a href=&http://link.zhihu.com/?target=https%3A//blog.csdn.net/fuxingyin/article/details/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&OKVIS IMU 误差公式代码版本&/a&&/p&&p&[4] T. Barfoot, State Estimation for Robotics.&/p&
我们知道,单位四元数 q 和 so(3) 向量 \boldsymbol\phi (即 rotation vector)的对应关系为:{\bf q}({\bm \phi}) = [ \sin\frac{\phi}{2} {\bf a}, \, \cos \frac{\phi}{2}]' , in which \phi = | \bm \phi|, \quad {\bf a} = \frac{\bm \phi}{\phi} 当 …
&p&走入主流文化?&/p&&p&不存在的。&/p&&p&高达出场的时候我先是激动——酷累哇刚大木哒!然后震怒——真男人都开扎古!娘炮才特么的开高达!&/p&&p&然后身后传来一个声音:这个变形金刚怎么没见过啊……&/p&&p&我瞬间收起小情绪,接着看电影去了。&/p&&p&什么时候别人能分清高达跟变形金刚什么时候再来琢磨进入主流文化这事吧。&/p&&p&&br&&/p&&p&&br&&/p&&p&我当然希望元祖从天而降,然后高达屹立于大地之上,双方战况胶着你来我往难分高下,此时敌方巨大化兵器入场,一道红色闪电顷刻而至击破敌舰,沙扎比夜莺新安洲接踵而来将敌方舰队挡于圈外;然后敌方BOSS呼叫小弟无数,元祖一时间处于劣势,危机时一道七彩大炮闪过,紧跟着月光蝶毁天灭地,傻子那三红入场,独角兽启动NT-D加入战局,与敌方BOSS站得难分难解,不料大BOSS见此情景一个大招毁掉了地图,准备用虫洞跳出,关键时刻一个声音大喊我这只手鲜红如烈火,它高声叫我去紧抓住胜利!拼死撑开虫洞一秒让元祖穿出,结果穿出后元祖被BOSS砍掉了脑袋,最后一个Last Shoot逆转全局,完美。&/p&&p&不过你猜观众会不会为这些梗买单?&/p&&p&&br&&/p&&p&ps.冷静下来想一想,斯皮尔伯格的意思也可能是“你们这些联邦的驾驶员只能坚持三分钟!三分钟!”&/p&&p&ZICK ZEON!&/p&
走入主流文化?不存在的。高达出场的时候我先是激动——酷累哇刚大木哒!然后震怒——真男人都开扎古!娘炮才特么的开高达!然后身后传来一个声音:这个变形金刚怎么没见过啊……我瞬间收起小情绪,接着看电影去了。什么时候别人能分清高达跟变形金刚什么时…
&figure&&img src=&https://pic3.zhimg.com/v2-8843768bfe25a57e4aa8ebdbeb29b69f_b.jpg& data-rawwidth=&5010& data-rawheight=&3340& class=&origin_image zh-lightbox-thumb& width=&5010& data-original=&https://pic3.zhimg.com/v2-8843768bfe25a57e4aa8ebdbeb29b69f_r.jpg&&&/figure&&p&[&b&Good News: 4月18日&/b&] EDCF被IJCAI2018接收。初稿地址:&/p&&a href=&http://link.zhihu.com/?target=http%3A//www.dcs.bbk.ac.uk/%7Esjmaybank/VisualTrackingIJCAI2018.pdf& data-draft-node=&block& data-draft-type=&link-card& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&EDCF-IJCAI2018&/a&&p&【本文略长】&/p&&figure&&img src=&https://pic3.zhimg.com/v2-dd8f61bbf678cd613ba932_b.jpg& data-size=&normal& data-rawwidth=&600& data-rawheight=&240& class=&origin_image zh-lightbox-thumb& width=&600& data-original=&https://pic3.zhimg.com/v2-dd8f61bbf678cd613ba932_r.jpg&&&figcaption&RASNet网络架构&/figcaption&&/figure&&p&追逐极限的永远没有尽头。&/p&&p&我从没想过,有人可以超越ECO,但超越早晚会发生。&/p&&p&基于Siamese网络的视觉跟踪算法已经逐步占领跟踪领域。即使,他的性能远不如ECO;即使,他非常依赖于训练过程。但这都不能阻挡这个时代的方向,无休止的正则范式终究是要被数据驱动所取代。我相信,这是整个视觉跟踪的方向之一。简洁优雅的流水线实现,高效稳定的表现为他赢取了无数粉丝(&a href=&http://link.zhihu.com/?target=https%3A//scholar.google.com.hk/scholar%3Fcites%3Das_sdt%3D2005%26sciodt%3D0%2C5%26hl%3Den& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Cited by 139&/a&)。或许还有人对相关滤波恋恋不舍,但人们终有一天,将会不再留恋相关滤波。&/p&&p&好啦,煽情结束,直接剖析,到底什么让SiamFC可以work的工作。Siamese类方法的核心是学习到一个可靠的,通用的&b&相似性度量&/b&。在训练过程中成对的图像输入Siamese网络,通过训练过程中的监督使得目标物体在不同视角光照变换下取得较为一致的特征,而前景和背景得到较为不同的特征表述。&/p&&p&&br&&/p&&h2&&b&初识SiamFC&/b&&/h2&&p&如果不进行深入的研究,你看到的SiamFC是这样的,&/p&&a class=&video-box& href=&http://link.zhihu.com/?target=https%3A//www.zhihu.com/video/663040& target=&_blank& data-video-id=&& data-video-playable=&true& data-name=&& data-poster=&https://pic4.zhimg.com/80/v2-81b3a08f7b15464d3cfd5ee17d9229f7_b.jpg& data-lens-id=&663040&&
&img class=&thumbnail& src=&https://pic4.zhimg.com/80/v2-81b3a08f7b15464d3cfd5ee17d9229f7_b.jpg&&&span class=&content&&
&span class=&title&&&span class=&z-ico-extern-gray&&&/span&&span class=&z-ico-extern-blue&&&/span&&/span&
&span class=&url&&&span class=&z-ico-video&&&/span&https://www.zhihu.com/video/663040&/span&
&a class=&video-box& href=&http://link.zhihu.com/?target=https%3A//www.zhihu.com/video/649472& target=&_blank& data-video-id=&& data-video-playable=&true& data-name=&& data-poster=&https://pic1.zhimg.com/80/v2-9af4cf547e5c01de1bfb94818f7abf90_b.jpg& data-lens-id=&649472&&
&img class=&thumbnail& src=&https://pic1.zhimg.com/80/v2-9af4cf547e5c01de1bfb94818f7abf90_b.jpg&&&span class=&content&&
&span class=&title&&&span class=&z-ico-extern-gray&&&/span&&span class=&z-ico-extern-blue&&&/span&&/span&
&span class=&url&&&span class=&z-ico-video&&&/span&https://www.zhihu.com/video/649472&/span&
&p&或者是这样的,&/p&&figure&&img src=&https://pic4.zhimg.com/v2-e5ebbebb8e6a6b4e0153fcb3_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&1700& data-rawheight=&1044& class=&origin_image zh-lightbox-thumb& width=&1700& data-original=&https://pic4.zhimg.com/v2-e5ebbebb8e6a6b4e0153fcb3_r.jpg&&&/figure&&p&简直,又快又好有没有,GTX1050都能跑的飞起啊。这个时代,搞深度学习做跟踪肯定跟着这个方向啊。&/p&&p&&br&&/p&&h2&&b&分析SiamFC:可视化&/b&&/h2&&p&但很快,我发现,表象之下,SiamFC究竟和我们想的是否一样呢。我们进一步的&b&可视化&/b&了SiamFC在跟踪过程中的heatmap,结果令人大跌眼镜。(注意,左边是根据groundtruth选定的patch)&/p&&figure&&img src=&https://pic2.zhimg.com/v2-08a0d20f86c64de3bc44cfe5_b.jpg& data-size=&normal& data-rawwidth=&482& data-rawheight=&241& data-thumbnail=&https://pic2.zhimg.com/v2-08a0d20f86c64de3bc44cfe5_b.jpg& class=&origin_image zh-lightbox-thumb& width=&482& data-original=&https://pic2.zhimg.com/v2-08a0d20f86c64de3bc44cfe5_r.jpg&&&figcaption&SiamFC在basketball视频中的heatmaps&/figcaption&&/figure&&figure&&img src=&https://pic2.zhimg.com/v2-42daad76b27ec037c14906_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&482& data-rawheight=&241& data-thumbnail=&https://pic3.zhimg.com/v2-42daad76b27ec037c14906_b.jpg& class=&origin_image zh-lightbox-thumb& width=&482& data-original=&https://pic3.zhimg.com/v2-42daad76b27ec037c14906_r.jpg&&&/figure&&figure&&img src=&https://pic2.zhimg.com/v2-7ec524e687d441ffe4b035abde18e2b9_b.jpg& data-size=&normal& data-rawwidth=&482& data-rawheight=&241& data-thumbnail=&https://pic2.zhimg.com/v2-7ec524e687d441ffe4b035abde18e2b9_b.jpg& class=&origin_image zh-lightbox-thumb& width=&482& data-original=&https://pic2.zhimg.com/v2-7ec524e687d441ffe4b035abde18e2b9_r.jpg&&&figcaption&我gif制作的时候每10帧画一次,有点鬼畜~~&/figcaption&&/figure&&p&取其中某一帧的结果看下,如果不靠&b&高斯框&/b&,基本上无法跟上目标。在&i&bolt&/i&和&i&gymnastics&/i&系列视频中更为明显。&/p&&figure&&img src=&https://pic3.zhimg.com/v2-a30e65e0a326_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&1446& data-rawheight=&241& class=&origin_image zh-lightbox-thumb& width=&1446& data-original=&https://pic3.zhimg.com/v2-a30e65e0a326_r.jpg&&&/figure&&p&SiamFC并不能区分不同的物体,&b&周边的具有语义的物体都会得到一个非常大的响应&/b&。&/p&&p&&br&&/p&&h2&&b&那么SiamFC是如何做到较为适宜的跟踪结果呢?&/b&&/h2&&p&重点竟然在&b&高斯窗&/b&上,通过高斯窗的平滑,SiamFC很快抑制了较远的目标。而跟踪库上的目标存在一个对这种算法很有利的分布,目标基本上都是画面中所关心的目标(摄像机追焦的对象)。跟踪的时候运动并不剧烈,周边的干扰物较少,不存在出画面重新搜索等问题。当这几个条件满足的时候,SiamFC的表现还是比较可观的。&/p&&p&总的来说,跟踪的目标不适合&b&背景嘈杂&/b&以及&b&剧烈的抖动。&/b&&/p&&figure&&img src=&https://pic3.zhimg.com/v2-d9dee4d282b8d68e505ef2_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&2400& data-rawheight=&900& class=&origin_image zh-lightbox-thumb& width=&2400& data-original=&https://pic3.zhimg.com/v2-d9dee4d282b8d68e505ef2_r.jpg&&&/figure&&p&&br&&/p&&h2&&b&如何改进?&/b&&/h2&&p&那么摆在我们眼前的道路已经非常明显了,岂不是我们通过改善训练的过程,取得我们想要的&b&好特征&/b&不就可以了么。数据量猛增,Data Augmentation猛上,反正别的领域的成功训练经验拿来怼不就可以了么。&/p&&p&但别着急,既然觉得训练的时候有问题,那我们看看&b&训练集上的表现&/b&总可以了吧。&/p&&p&&br&&/p&&p&然而SiamFC在训练集上也存在同样的问题(训练集可以看做是oracle表现了)。那么很自然的一个推论是,&b&你简单的增大训练集并不能得到更好的结果&/b&(要么是模型容量有问题,要么就是训练过程有问题)。&/p&&p&我们分析一下SiamFC训练的过程。原因在于两点。&/p&&ol&&li&其实你训练的是目标是让网络即对各种光照旋转等各种变化长时间鲁棒,又对不同目标产生较大差异,&b&这本身就很困难&/b&,甚至&b&有点矛盾。&/b&因为本身这种变化是时序上连续的,而当作为pair训练的时候,两个较远的目标可能本身就差异非常大(甚至单独拿出来根本看不出是一个物体)。整个目标和背景的分布无论是时间上还是空间上的分布都是具有流形分布的。流形的思想。 当大量的数据来的时候,网络干脆说咱们容量就这么点,还是捡着前背景分离来做吧,把前景背景分离开就差不多了,需要细节来比对的又比较少(困难样本比较少,数据均衡的问题,fine-grained的网络方法水一波),所以高层的特征并没有能学习到fine-grained的特征,甚至因为你给了各种光照,它干脆连颜色也丢了吧(疯狂的data argumentation反而会带来坏处),就这样,学习到的特征实际上得到的结果就是上面所看到的(感觉任何图片检索的方式训出来的网络加上高斯窗都可以等效SiamFC)。对于特征表述网络而言,你会让高层特征进行一个抽象,抽象出这个目标最本质的一些因素;同时,又希望目标对细节都有所考虑,例如,两个长得不太像的人(reid倒是通过数据驱动做的很不错),等等。&/li&&li&训练数据(训练方式)不均衡问题,这个在新工作中解释。(maybe focal loss水一波)&/li&&/ol&&p&&br&&/p&&p&那么这么说,SiamFC岂不是一无是处,一塌糊涂?但,&b&事实绝不是这样的&/b&。它的优势在于它足够的简单,可以说如果不考虑网络的搭建,抽象出来&b&简单到了极致&/b&。&/p&&figure&&img src=&https://pic2.zhimg.com/v2-c493dd6d73ac8e04c85ee5_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&915& data-rawheight=&380& class=&origin_image zh-lightbox-thumb& width=&915& data-original=&https://pic2.zhimg.com/v2-c493dd6d73ac8e04c85ee5_r.jpg&&&/figure&&p&基本流程如下:&/p&&p&&b&按照运动学模型提取crop,对其抽取特征&/b&,&b&slide window做最近邻搜索(通过卷积实现)。&/b&(信息检索的其他方法果断可以拿来试一波)。&/p&&p&&br&&/p&&p&为什么和传统的方法相比&b&少了分类器训练&/b&这个步骤,是因为算法本身可以从多个角度理解。如果把最近邻搜索的特征当做&b&kernel&/b&,这个feature本身就是一个分类器。另一方面,特征足够强大的时候,自带判别效果,俗称&b&万事靠特征&/b&。所以,&b&对于SiamFC来说特征网络和判别网络自成一体&/b&。&/p&&p&&br&&/p&&h2&&b&介绍我的工作(RASNet & EDCF)&/b&&/h2&&p&最近的两个工作就是针对以上问题,从框架的角度进行了改进。因为EDCF的投稿时间在CVPR出结果之前,所以EDCF和投稿CVPR的工作比较独立,耦合的部分比较少。此外,就是随着对问题的认知逐步发生改变,论文解决的问题也不一样。&/p&&p&两个工作分别干了什么事情,各自一句话描述如下。&/p&&p&&b&RASNet使用三个attention机制对SiamFC特征的空间和channel进行加权,分解特征提取和判别性分析的耦合,用来提升判别能力。&/b&&/p&&p&&b&EDCF使用自编码网络使得特征网络更多的关注目标的细节表述,结合Context-aware的相关滤波抑制掉周边的干扰,并且使得模型可以在线更新。&/b&&/p&&p&总的来说,这两个论文的出现是对SiamFC的问题不断理解的一个过程中。改进网络&b&增加判别性&/b&,增加&b&细节描述&/b&,和&b&传统方法结合&/b&。&/p&&p&&br&&/p&&h2&&b&RASNet&/b&&/h2&&p&&b&Learning Attentions: Residual Attentional Siamese Network for High Performance Online Visual Tracking&/b&&/p&&p&&b&问题提出&/b&&/p&&blockquote&SiameseFC,这篇不用说了,必然是大热。至少我觉得影响力可以在扩展很多,最近我对他的分析表明,这个算法非常适合固定场景下的跟踪,他可以学习到什么是背景。想象一下,那个cross correlation是一种距离度量,在他的嵌入空间内,实际上有上亿张子图像去拉伸这个嵌入空间,得到的很大程度都可以理解为前景metric learning,后景直接剔除。所以感官上认为非常适合固定场景,这也是为什么深度学习不能再类似的库上训练的原因之一吧,你直接记下了哪些是背景,相类似的测试库场景差不多。前景就算有区分,背景都知道了,也算过拟合(对背景的过拟合)。这个算法如果硬要找缺陷,存在几个问题,第一点是网络的结果没有对齐,我不能理解为什么要乘以16,乘以stride是正确的,本身相关操作的起点就不是crop的左上角,真正的起点是以左上角为起点的小区域(exemplar)的中心。&b&此外就是cross correlation是对于每个位置贡献一样的,例如左上角和右下角以及中心的贡献都是相同的,这就是问题。&/b&&/blockquote&&p&上次分析中【&a href=&https://www.zhihu.com/question//answer/& class=&internal&&Qiang Wang:基于深度学习的目标跟踪算法是否可能做到实时?&/a&】,我们提出一个问题,SiamFC在进行&b&交叉相关&/b&的时候,每一个位置对于前景的贡献是相同的。这样,对于要匹配的目标,绿色的框和蓝色的框的价值就是一样的了,这必然限制了模型的判别能力。&/p&&figure&&img src=&https://pic3.zhimg.com/v2-eedcdd30f38f3a_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&1592& data-rawheight=&840& class=&origin_image zh-lightbox-thumb& width=&1592& data-original=&https://pic3.zhimg.com/v2-eedcdd30f38f3a_r.jpg&&&/figure&&p&&b&理论分析&/b&&/p&&p&为了印证这个观点(理论上找方法的缺陷),我们首先回顾通用目标跟踪算法(大多数回归或者分类的方法)。大多数的跟踪算法都可以表述为一个简单的核回归问题。&/p&&p&&img src=&http://www.zhihu.com/equation?tex=%7E%7E%7E%7E%7E%7E%7E%7E%7E%7E%7E%7E%7E%7E%7E%7E%7E%7E%7E%7E%7E%7E%7E%7E%7E%7E%7E%7E%7E%7E%7E%7E%7E%7E%7E%7E%7E%7E%7E%5Cmin_%7B%5Cmathbf%7B%5Cmathbf%7Bw%7D%7D%7D+%5Cparallel+%5Cmathbf%7BA%7D+%5Cmathbf%7B%5Cmathbf%7Bw%7D%7D+-+%5Cmathbf%7By%7D+%5Cparallel+%5E2_2+%2B+%5Clambda+%5Cparallel+%5Cmathbf%7B%5Cmathbf%7Bw%7D%7D+%5Cparallel+%5E2_2& alt=&~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\min_{\mathbf{\mathbf{w}}} \parallel \mathbf{A} \mathbf{\mathbf{w}} - \mathbf{y} \parallel ^2_2 + \lambda \parallel \mathbf{\mathbf{w}} \parallel ^2_2& eeimg=&1&&&/p&&p&我们通过一些样本A,以及对应的标签y,学习得到分类器w。问题的解也非常容易:&/p&&p&&img src=&http://www.zhihu.com/equation?tex=%7E%7E%7E%7E%7E%7E%7E%7E%7E%7E%7E%7E%7E%7E%7E%7E%7E%7E%7E%7E%7E%7E%7E%7E%7E%7E%7E%7E%7E%7E%7E%7E%7E%7E%7E%7E%7E%7E%7E%7E%5Cmathbf%7Bw%7D%3D%28%5Cmathbf%7BA%7D%5E%7B%5Ctop%7D%5Cmathbf%7BA%7D%2B%5Clambda+I%29%5E%7B-1%7D%5Cmathbf%7BA%7D%5E%7B%5Ctop%7D%5Cmathbf%7By%7D& alt=&~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\mathbf{w}=(\mathbf{A}^{\top}\mathbf{A}+\lambda I)^{-1}\mathbf{A}^{\top}\mathbf{y}& eeimg=&1&&&/p&&p&基本上通用的跟踪算法都可以使用这个框架来求解(SGD什么的也都可以用)。而更本质的,我们是在通过标签信息来得到对偶变量 &img src=&http://www.zhihu.com/equation?tex=%5Cbm%7B%5Calpha%7D& alt=&\bm{\alpha}& eeimg=&1&& ,KCF只是通过循环移位的样本进行了频域加速。&/p&&p&&img src=&http://www.zhihu.com/equation?tex=%7E%7E%7E%7E%7E%7E%7E%7E%7E%7E%7E%7E%7E%7E%7E%7E%7E%7E%7E%7E%7E%7E%7E%7E%7E%7E%7E%7E%7E%7E%7E%7E%7E%7E%7E%7E%7E%7E%7E%7E%7E%7E%7E%7E%7E%7E%7E%7E%7E%7E%7E%7E%7E%5Cmathbf%7Bw%7D%3D%5Cmathbf%7BA%7D%5E%7B%5Ctop%7D+%5Cbm%7B%5Calpha%7D.& alt=&~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\mathbf{w}=\mathbf{A}^{\top} \bm{\alpha}.& eeimg=&1&&&/p&&p&那么很自然的想法是,这些对偶变量到底有什么含义?这里我可能无法给出非常准确的解答,但是结合SVM等的一些理解。可以给出一个感性认知:对于正样本,对偶变量就设置为正数;如果对于负样本,对偶变量就设置成负数或者0。当然实际的过程会比这个更复杂一些(SVM中需要是支持向量)。&/p&&p&那么转过头来看SiamFC,实际上就是对于所有的正样本,对偶变量均匀设置为1(w=A,判别器 or kernel=训练样本)。这种简单粗暴的方式使得判别性无法再这部分得到体现。KCF是通过一个闭式解去求解这个对偶变量,存在的问题是容易overfitting(因为你的判别性大量的依赖于在线的样本)。既然你一个公式就可以得到的闭式解,那么是否可以通过网络去求解呢?是的,我们要做的工作的本质就是&b&让网络去预测对偶变量&/b&。(下面是别人用神经网络去解矩阵的逆,明显要难于跟踪这个解。)&/p&&a href=&http://link.zhihu.com/?target=http%3A//imagesci.ece.cmu.edu/files/paper/2017/OneNet_ICCV17.pdf& data-draft-node=&block& data-draft-type=&link-card& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&[ICCV17]One Network to Solve Them All — Solving Linear Inverse Problems using Deep Projection Models&/a&&p&我们将SiamFC的交叉相关详细展开:&/p&&p&&img src=&http://www.zhihu.com/equation?tex=%7E%7E%7E%7E%7E%7E%7E%7E%7E%7E%7E%7E%7E%7E%7E%7E%7E%7E%7E%7E%7E%7E%7E%7E%7E%7E%7E%7E%7E%7E%7E%7Ef_%7Bp%27%2Cq%27%7D+%3D+%5Csum_%7Bi%3D0%7D%5E%7Bm-1%7D+%5Csum_%7Bj%3D0%7D%5E%7Bn-1%7D+%5Csum_%7Bc%3D0%7D%5E%7Bd-1%7D+%5Cphi_%7Bi%2Cj%2Cc%7D%28%5Cmathbf%7Bz%7D%29+%5Cphi_%7Bp%27%2Bi%2Cq%27%2Bj%2Cc%7D%28%5Cmathbf%7Bx%7D%29+%2B+b& alt=&~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~f_{p',q'} = \sum_{i=0}^{m-1} \sum_{j=0}^{n-1} \sum_{c=0}^{d-1} \phi_{i,j,c}(\mathbf{z}) \phi_{p'+i,q'+j,c}(\mathbf{x}) + b& eeimg=&1&&&/p&&p&对于每个位置的响应,其实是一个标准的相关,从公式对i和j的循环也可以看出,显然该方法无法对于每个位置的权重进行加权,我们提出了带权重的交叉相关(weighted cross correlation):&/p&&p&&img src=&http://www.zhihu.com/equation?tex=%7E%7E%7E%7E%7E%7E%7E%7E%7E%7E%7E%7E%7E%7E%7E%7E%7E%7E%7E%7E%7E%7E%7E%7E%7E%7E%7E%7Ef_%7Bp%27%2Cq%27%7D+%3D+%5Csum_%7Bi%3D0%7D%5E%7Bm-1%7D+%5Csum_%7Bj%3D0%7D%5E%7Bn-1%7D+%5Csum_%7Bc%3D0%7D%5E%7Bd-1%7D+%5Cgamma_%7Bi%2Cj%2Cc%7D+%5Cphi_%7Bi%2Cj%2Cc%7D%28%5Cmathbf%7Bz%7D%29+%5Cphi_%7Bp%27%2Bi%2Cq%27%2Bj%2Cc%7D%28%5Cmathbf%7Bx%7D%29+%2B+b& alt=&~~~~~~~~~~~~~~~~~~~~~~~~~~~~f_{p',q'} = \sum_{i=0}^{m-1} \sum_{j=0}^{n-1} \sum_{c=0}^{d-1} \gamma_{i,j,c} \phi_{i,j,c}(\mathbf{z}) \phi_{p'+i,q'+j,c}(\mathbf{x}) + b& eeimg=&1&&&/p&&p&引入权重 &img src=&http://www.zhihu.com/equation?tex=%5Cgamma_%7Bi%2Cj%2Cc%7D+& alt=&\gamma_{i,j,c} & eeimg=&1&& 来对位置和channel进行加权。注意到这种加权的方式等同于attention的机制 &img src=&http://www.zhihu.com/equation?tex=%5Cbm%7B%5Cgamma%7D+%5Codot+%5Cphi%28%5Cmathbf%7B%5Cmathbf%7Bz%7D%7D%29& alt=&\bm{\gamma} \odot \phi(\mathbf{\mathbf{z}})& eeimg=&1&& ,所以在文章中将这种权重的学习转换成attention的学习。&/p&&p&&img src=&http://www.zhihu.com/equation?tex=%7E%7E%7E%7E%7E%7E%7E%7E%7E%7E%7E%7E%7E%7E%7E%7E%7E%7E%7E%7E%7E%7E%7E%7E%7E%7E%7E%7E%7E%7E%7E%7E%7E%7E%7E%7E%7E%7E%7Ef%28%5Cmathbf%7Bz%7D%2C%5Cmathbf%7Bx%7D%29+%3D+%28%5Cbm%7B%5Cgamma%7D+%5Codot+%5Cphi%28%5Cmathbf%7B%5Cmathbf%7Bz%7D%7D%29%29%5Cast+%5Cphi%28%5Cmathbf%7Bx%7D%29%2Bb%5Ccdot%5Cmathbf%7B1%7D.& alt=&~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~f(\mathbf{z},\mathbf{x}) = (\bm{\gamma} \odot \phi(\mathbf{\mathbf{z}}))\ast \phi(\mathbf{x})+b\cdot\mathbf{1}.& eeimg=&1&&&/p&&p&&br&&/p&&p&&b&具体操作(实验验证)&/b&&/p&&p&首先还是从实验分析结果开始。&/p&&p&跟踪问题一般的&b&目标都是crop在中心&/b&的。所以最简单的一种方式直接学习一个Spatial Attention,即对于每个位置可以编码一个权重,固定的 &img src=&http://www.zhihu.com/equation?tex=%5Cgamma_%7Bi%2Cj%7D& alt=&\gamma_{i,j}& eeimg=&1&& (仅引入36个float参数)。&/p&&figure&&img src=&https://pic4.zhimg.com/v2-4b292d3f7f68ab116cf1231ceaf3c8a3_b.jpg& data-size=&normal& data-rawwidth=&1021& data-rawheight=&578& class=&origin_image zh-lightbox-thumb& width=&1021& data-original=&https://pic4.zhimg.com/v2-4b292d3f7f68ab116cf1231ceaf3c8a3_r.jpg&&&figcaption&注意epoch(从第0到第50 epoch)&/figcaption&&/figure&&p&随着训练的进行,attention基本上和预想的一样,&b&中间位置的权重得到提升,边缘的位置有所下降&/b&(略兴奋)。然而在线测试的精度却不如预想中有大幅改进。&/p&&p&无奈,为了增加网络的判别能力,一个通用的attention似乎并不够。&b&CF根据每个模板图像进行学习,得到很好的判别器&/b&。那么我们也可以模仿这个机制,根据第一帧图像的feature,使用网络学习一个动态的attention。这部分网络设计(暴力实验,并没有什么好的方法论),应该掌握全局的信息,fc和编解码网络都可以实现这样的想法,在GAN-tracker(&b&VITAL&/b&)里面貌似使用的是fc。&/p&&figure&&img src=&https://pic1.zhimg.com/v2-e92b6e5d854_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&1897& data-rawheight=&596& class=&origin_image zh-lightbox-thumb& width=&1897& data-original=&https://pic1.zhimg.com/v2-e92b6e5d854_r.jpg&&&/figure&&p&上述这个Spatial Attention的方法论来自于,&b&预测变换参数要比直接预测输出更容易&/b&。同期的&b&LSART&/b&中也使用了这个思想,构建了Cross-Patch Similarity ,对每个patch的重要性进行了编码,但是是通过在线优化的方式去做的。&b&我的想法是,能让网络学习的就学习,尽量避免在线学习(aggressively learning the target sequence online )。&/b&&/p&&p&至于为什么提出这样一个残差的结构,主要思想来源于Residual Attention Network for Image Classification。补充材料里面有和Residual Attention Network for Image Classification 网络结构的对比。我们所提出的Residual Attention是针对跟踪问题专门设计的。General attention的学习不同于分类问题中的固定的1当偏执,因为&b&分类问题的attention全图分布较为均匀&/b&,而跟踪中的attention的先验在中心。&/p&&p&此外是关于残差的理解,我的理解是:残差之所以称为残差,是&b&希望残差学习的部分的均值近似为0。&/b&所以我把这种attention的和也称为Residual Attention。&/p&&p&&br&&/p&&p&有了上述的实验结果和理论基础,很自然的扩展就是加入channel attention的机制。&/p&&p&Channel attention的思路主要是来自于CSRDCF和SENet,在CSRDCF中就有在线的调整每个通道对于最终结果的权重。不过是通过在线优化的方式去做的,凡是可以在线优化做的必然可以用网络学习啊。&/p&&p&感谢SENet,虽然让他当Best paper似乎不太现实。但我真的觉得他们提出的这个网络部件真的是对于跟踪非常work,无论是解释性方面,还是实际效果(今年CVPR2018跟踪方向有至少3篇都有花一个小节去介绍这个部件RASNet,FlowTrack,Twofold,从流程图看,GAN Tracker应该也利用了这个部件的变种。但显然,每个作者对于问题的认知是不同的,思考的角度也有所不同。)。&/p&&p&关于这个部件的解释性(玄学):&/p&&p&1、这个部件可以理解为特征选择。我论文正文中说的是,如果这个部件输出进行二值化,那么就等同于特征选择。&/p&&p&2、另一个角度,跟踪大多只在网络的最后一层使用SENet模块,可以把每一层特征理解为一个独立的分类器/跟踪器,&b&SENet的scale实际上是通过分析特征后(global pooling+2fc)对这些分类器进行加权ensemble。&/b&&/p&&p&&br&&/p&&p&最终,通过通过上述部件的结合,得到我们最终的模型。速度上只增加了3个小分支,并没有怎么影响速度,精度提升却很大。更多细节可以从文章中读到。&/p&&p&[] 最近几天看到的文章都是基于SRDCF派系的哈,各种方法肯定还是百花齐放,但基本上的结论是,今年的成绩单是&b&实时算法&/b&在OTB2015上得有&b&0.64的AUC&/b&,&b&非实时&/b&的算法基本上都在&b&0.67的AUC&/b&以上了。&/p&&p&&br&&/p&&h2&&b&EDCF&/b&&/h2&&p&&b&Do not Lose the Details: Reinforced Representation Learning for High Performance Visual Tracking&/b&&/p&&p&&b&问题提出&/b&&/p&&p&SiamFC的&b&高层特征只抽取了语义表述,却丢失了细节的表述(很容易漂移到表观差异巨大但属性类似的distractor)。&/b&一方面是网络深了之后自然而然的带来的细节的丢失;另一方面,训练的过程中只考虑了判别学习,细节信息本身是否可以保留就没有保障了。&/p&&p&&br&&/p&&p&&b&解决方案&/b&&/p&&p&为了诱导网络更好的进行学习,&b&我们在SiamFC的特征层后加入反卷积网络,还原原始图像,这样就强迫网络特征层包含底层信息。&/b&此外,&b&self-encoder的使用,可以通过大量的图像进行无监督的学习,使得样本更加general(Ps:win神很早就用了这个方法dlt,但是没有在中间加判别监督)&/b&。实验也表明,encoder-decoder的结构对于最终的特征有利。&/p&&figure&&img src=&https://pic4.zhimg.com/v2-5f1cefa33ac6bb6d8cd948d3_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&2422& data-rawheight=&1362& class=&origin_image zh-lightbox-thumb& width=&2422& data-original=&https://pic4.zhimg.com/v2-5f1cefa33ac6bb6d8cd948d3_r.jpg&&&/figure&&p&尽管加了这个方法,但,实验的结果还是不能令人满意。OTB上取得了明显的提升(3%),但是OTB的baseline还是太低。这就继续回到RASNet的问题上了,为什么KCF就可以很好地区分要跟踪的目标,而SiamFC就不具备这样好的性质呢。MDNet也可以跟的非常好的呀(判别力表现很好)。问题出在了,&b&你学习到的是general的domain信息,如何迁移到当前video的domain并没有得到重视&/b&。&/p&&p&RASNet通过在第一帧图像分析得到适应于当前图像的attention来weight就是一种方式,类似于图像复原等领域的方法论(预测参数比预测输出要容易-&所以预测对偶变量要好于直接预测分类器)。那么为了使得模型可以&b&快速&/b&进行调整,显然DCFNet是不二选择了。之前VOT2017比赛的时候就有尝试过,使用DCFNet+SiamFC来底层特征的学习过程能取得非常好的结果(&b&SiamDCF&/b&),所以之后的结合就从这个角度出发。同时论文中对DCFNet进行了扩展,加入了context-aware的CF(有闭式解,方法论:&b&凡是有闭式解的快速传统算法,全部end2end做一遍&/b&)。&/p&&p&&br&&/p&&p&&br&&/p&&h2&&b&科研反思&/b&&/h2&&p&以上差不多是这两篇文章的思路来源,很多时候,我都很容易只从这些细节入手,从底向上来做工作。这样也许可以做出一两篇文章,但是&b&都不是足够的创新&/b&,经常会成为跟风者。跟风者只能喝汤,同时也很快会被淘汰,从更高层次去理解设计跟踪算法才是我们应该追求的目标。感谢我的老师给予我的指导。&/p&&p&&br&&/p&&h2&&b&未来方向&/b&&/h2&&p&显然,跟踪会成为各种fancy的新方法(meta-learning,residual,GAN)的&b&试验田&/b&。&/p&&p&但这也就带来了一个问题,除了自身的发展,总会落后于其他领域。&/p&&p&今年了解到的有三篇spotlight。其中一篇,3个oral/poster最后被AC定成spotlight,跟踪领域自身的影响力只能说有限了。&/p&&p&&br&&/p&&p&&b&Long-term tracking&/b&:&/p&&p&long-term的根在哪可能不太清楚。但大名鼎鼎的&b&TLD&/b&是不可不提的。虽然做单目标跟踪方向,但是看到他们公司给出的demo还是震惊。(DJI的跟踪也很棒。)&/p&&a class=&video-box& href=&http://link.zhihu.com/?target=https%3A//www.zhihu.com/video/486656& target=&_blank& data-video-id=&& data-video-playable=&true& data-name=&& data-poster=&https://pic1.zhimg.com/80/v2-ede12ee27f29800bf29fdd_b.jpg& data-lens-id=&486656&&
&img class=&thumbnail& src=&https://pic1.zhimg.com/80/v2-ede12ee27f29800bf29fdd_b.jpg&&&span class=&content&&
&span class=&title&&&span class=&z-ico-extern-gray&&&/span&&span class=&z-ico-extern-blue&&&/span&&/span&
&span class=&url&&&span class=&z-ico-video&&&/span&https://www.zhihu.com/video/486656&/span&
&p&学术界这一两年也更多的关注long-term跟踪。从最初的UAV20L库,到RanTao的Tracking for half an hour,以及VOT组委会邮件通知的比赛预告。都表明,Long-term tracking可能会是下一代的趋势。&/p&&p&一方面是short-term有所饱和,另一方面真正工程使用的时候很多丢失遮挡问题在short-term中并不突出,这影响了实际使用。vot组委会的reset机制经常被别的领域所诟病了,这个自动reset根本无法在实际的跟踪中使用。这就引出了实际跟踪的时候,我们对于算法的期待,我们希望算法可以了解到目标什么时候被遮挡了,什么时候丢失了。丢失之后可以找回,这才是我们想要的跟踪。想要达到这种效果,显然不是目前的跟踪算法可以做到的。&/p&&p&Oxford和RanTao的实验室合作的&b&&a href=&http://link.zhihu.com/?target=https%3A//github.com/oxuva/long-term-tracking-benchmark& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&long-term-tracking-benchmark&/a&&/b&,也值得关注。&/p&&p&目前项目名称Long-term tracking in the wild: a benchmark,缩写叫LTW,挺好哒。未来跟踪的测试集要是在百万这个级别,基本上速度慢的方法就刷不了了。(1M Frames / 100FPS=10k s≈3h,要是1FPS得跑2周了。)&/p&&p&&br&&/p&&p&&b&检测跟踪走向统一&/b&&/p&&p&现在detection已经搞video detection了,很多时候检测都比跟踪快,真的比较忧虑啊。Detect to Track and Track to Detect 这样的论文只会越来越多,未来肯定会做成一个闭环。一整个系统才是有价值的。&/p&&p&好消息是,有很多公司开始参与跟踪这个领域,虽然在应用上,大多数都是以MOT形式落地,公司的参与一定程度上会促进跟踪领域的发展。&/p&&p&我了解的Sensetime,目前应该是掌握单目标跟踪领域&b&精度最高&/b&,&b&速度最快&/b&的算法。这边负责跟踪的leader &a class=&member_mention& href=&http://www.zhihu.com/people/5a5edfbdd54fafadd8129a08& data-hash=&5a5edfbdd54fafadd8129a08& data-hovercard=&p$b$5a5edfbdd54fafadd8129a08&&@武伟&/a& ,提供的指导非常有价值;公司做的方向也非常前沿;同时这里还有非常多技术很牛的伙伴 &a class=&member_mention& href=&http://www.zhihu.com/people/fb14a824dae9b55e62edb7& data-hash=&fb14a824dae9b55e62edb7& data-hovercard=&p$b$fb14a824dae9b55e62edb7&&@朱政&/a& and &a class=&member_mention& href=&http://www.zhihu.com/people/ae4fab3dc4f7& data-hash=&ae4fab3dc4f7& data-hovercard=&p$b$ae4fab3dc4f7&&@lbvic&/a& (今年大四,论文评分3个oral/poster)。&/p&&p&&br&&/p&&p&&br&&/p&&h2&&b&福利环节,算法实现需要注意小细节&/b&&/h2&&ul&&li&网络训练的初始化(随机 or pretrained?),想要学习的层的diversity是否大(局部层的学习率是否调大一些?),是否冻结一些层?&/li&&li&深度学习的算法,记得务必要写warm up(针对VOT测试而言);&/li&&li&跟踪的框请尽快}

我要回帖

更多关于 机动战士敢达ol角马改 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信