def use_hmm(img_times, change_vals, fps=10, min_secs_for_train_to_pass=8): from sklearn.hmm import GaussianHMM X = np.column_stack(change_vals) n_components = 2 model = GaussianHMM(n_components, covariance_type="diag", n_iter=1000) model.fit([X.T]) #thresh = 10**-15 #model.transmat_ = np.array([[1-thresh,thresh],[1-thresh,thresh]]) hidden_states = model.predict(X.T) # print trained parameters and plot print("Transition matrix") print(model.transmat_) print() print("means and vars of each hidden state") for i in range(n_components): print("%dth hidden state" % i) print("mean = ", model.means_[i]) print("var = ", np.diag(model.covars_[i])) print() if model.means_[0][0] > model.means_[1][0]: # assume most most frames have no train, switch labels if necessary hidden_states = 1 - hidden_states train_spotted = filter_out_short_motions(hidden_states, min_secs_for_train_to_pass, fps) plot_timeline(img_times, change_vals, hidden_states, train_spotted) utils.copy_image_subset(config.experiment_data_frames, config.experiment_output_frames_hmm, np.nonzero(train_spotted)[0]) return train_spotted
def save_positive_negative_examples(img_times, train_spotted, n=20): train_inds, = np.nonzero(train_spotted) non_train_inds, = np.nonzero(1-train_spotted) positive_inds = train_inds[::len(train_inds)/(2*n)] negative_inds = non_train_inds[::len(non_train_inds)/(2*n)] utils.copy_image_subset(config.experiment_data_frames, os.path.join(config.experiment_output, 'positive_examples'), positive_inds[2::+1]) utils.copy_image_subset(config.experiment_data_frames, os.path.join(config.experiment_output, 'positive_examples'), positive_inds[2::]) utils.copy_image_subset(config.experiment_data_frames, os.path.join(config.experiment_output, 'negative_examples'), negative_inds)