void randomly_crop_images ( const matrix<rgb_pixel>& img, dlib::array<matrix<rgb_pixel>>& crops, dlib::rand& rnd, long num_crops ) { std::vector<chip_details> dets; for (long i = 0; i < num_crops; ++i) { auto rect = make_random_cropping_rect_resnet(img, rnd); dets.push_back(chip_details(rect, chip_dims(227,227))); } extract_image_chips(img, dets, crops); for (auto&& img : crops) { // Also randomly flip the image if (rnd.get_random_double() > 0.5) img = fliplr(img); // And then randomly adjust the colors. apply_random_color_offset(img, rnd); } }
void sample_hmm ( dlib::rand& rnd, const matrix<double>& transition_probabilities, const matrix<double>& emission_probabilities, unsigned long previous_label, unsigned long& next_label, unsigned long& next_sample ) /*! requires - previous_label < transition_probabilities.nr() - transition_probabilities.nr() == transition_probabilities.nc() - transition_probabilities.nr() == emission_probabilities.nr() - The rows of transition_probabilities and emission_probabilities must sum to 1. (i.e. sum_cols(transition_probabilities) and sum_cols(emission_probabilities) must evaluate to vectors of all 1s.) ensures - This function randomly samples the HMM defined by transition_probabilities and emission_probabilities assuming that the previous hidden state was previous_label. - The HMM is defined by: - P(next_label |previous_label) == transition_probabilities(previous_label, next_label) - P(next_sample|next_label) == emission_probabilities (next_label, next_sample) - #next_label == the sampled value of the hidden state - #next_sample == the sampled value of the observed state !*/ { // sample next_label double p = rnd.get_random_double(); for (long c = 0; p >= 0 && c < transition_probabilities.nc(); ++c) { next_label = c; p -= transition_probabilities(previous_label, c); } // now sample next_sample p = rnd.get_random_double(); for (long c = 0; p >= 0 && c < emission_probabilities.nc(); ++c) { next_sample = c; p -= emission_probabilities(next_label, c); } }
rectangle make_random_cropping_rect_resnet( const matrix<rgb_pixel>& img, dlib::rand& rnd ) { // figure out what rectangle we want to crop from the image double mins = 0.466666666, maxs = 0.875; auto scale = mins + rnd.get_random_double()*(maxs-mins); auto size = scale*std::min(img.nr(), img.nc()); rectangle rect(size, size); // randomly shift the box around point offset(rnd.get_random_32bit_number()%(img.nc()-rect.width()), rnd.get_random_32bit_number()%(img.nr()-rect.height())); return move_rect(rect, offset); }
void randomly_crop_image ( const matrix<rgb_pixel>& img, matrix<rgb_pixel>& crop, dlib::rand& rnd ) { auto rect = make_random_cropping_rect_resnet(img, rnd); // now crop it out as a 227x227 image. extract_image_chip(img, chip_details(rect, chip_dims(227,227)), crop); // Also randomly flip the image if (rnd.get_random_double() > 0.5) crop = fliplr(crop); // And then randomly adjust the colors. apply_random_color_offset(crop, rnd); }