def predict(self, img, pre_label, show=False): state = [copy.deepcopy(self.f_value[0][0])] if show: showpic(img, label_to_landmark(state)) phi_star = self.get_feature(img, pre_label) for i in range(len(self.derection)): deta_X = pre_label - state deta_phi = phi_star - self.get_feature(img, state) pca_deta_X = np.dot(self.pca_base[i][0], np.transpose(deta_X)) print(pca_deta_X.shape) pca_deta_phi = np.dot(self.pca_base[i][1], np.transpose(deta_phi)) if pca_deta_X[0] >= 0: if pca_deta_X[1] >= 0: if pca_deta_phi[0] >= 0: subindex = 0 else: subindex = 1 else: if pca_deta_phi[0] >= 0: subindex = 2 else: subindex = 3 else: if pca_deta_X[1] >= 0: if pca_deta_phi[0] >= 0: subindex = 4 else: subindex = 5 else: if pca_deta_phi[0] >= 0: subindex = 6 else: subindex = 7 state += self.learning_rate * self.compute_strid( img, state, self.derection[i][subindex]) if show: showpic(img, label_to_landmark(state)) return state
def compute_strid(self,img, state, decent_map): ''' 输入单张图片 和 标注 利用计算出来的每一步方向求出每一步的步伐 :param imgs: :param state: :param decent_map: :return: ''' phi = get_hog_feature(img, label_to_landmark(state),self.feature_block) # (4-1)*(4-1)*9*4*12 =3888 phi = np.array(phi) phi_one = np.ones(phi.shape) A = np.hstack((phi, phi_one)) A = np.mat(A) return np.dot(A, decent_map)
def compute_strid(self,img, state, decent_map): ''' 输入单张图片 和 标注 利用计算出来的每一步方向求出每一步的步伐 :param imgs: :param state: :param decent_map: :return: ''' R = decent_map phi = get_hog_feature(img, label_to_landmark(state)) # (4-1)*(4-1)*9*4*12 =3888 phi = np.array(phi) A = phi-self.avg_phi_star return np.dot(A, R)
def compute_strid_batch(self,imgs, states, decent_map): ''' 输入多张图片 和 标注 利用计算出来的每一步方向求出每一步的步伐 :param imgs: :param state: :param decent_map: :return: ''' R = decent_map phi = [get_hog_feature(imgs[idx], label_to_landmark(states[idx]))for idx in range(len(imgs))] # (4-1)*(4-1)*9*4*12 =3888 phi = np.array(phi) train_phi_star = [self.avg_phi_star for idx in range(len(imgs))] train_phi_star = np.array(train_phi_star) A = phi-train_phi_star return np.dot(A, R)
def get_phis(self,imgs,label): phi_star = [get_hog_feature(imgs[idx], label_to_landmark(label[idx]),self.feature_block) for idx in range(len(imgs))] # (4-1)*(4-1)*9*4*12 =3888 phi_star = np.array(phi_star) return phi_star