def run(self): iterator = "Aloi" if iterator=='Bikes': num_cats = 365 image_shape = (480, 640) images_per_category = 1 image_iter = ImageListIterator("bikes", num_cats) if iterator=='Flowers': num_cats = 500 image_shape = (500,500) images_per_category = 1 image_iter = ImageListIterator("flowers", num_cats, randomize=True) if iterator=='Aloi': num_cats = 500 images_per_category = 1 image_shape = (144,192) image_iter = AloiIterator(num_cats, images_per_category) self.pickle_name = "%s-%s-%s.pkl" % (iterator, num_cats, images_per_category) print "Creating gabor region..." gabor = GaborRegion(image_shape, rotations=3, initial_wavelength=3, num_wavelengths=2 ) # precompute all gabor activations print colored("Computing gabor activations...", 'green') images = [] i = 0 while image_iter.has_next(): image, category, img_idx = image_iter.next() gabor.do_inference(numpy.array(image)) active = gabor.node_values.copy() images.append((active, active.sum(), (category, img_idx))) i += 1 if i%10==0: print i print colored("Computing overlap...", 'green') self.num_merges = num_merges = 10 overlap_results = [[] for i in range(num_merges)] cxn_results = [[] for i in range(num_merges)] i = 0 for active, size, idx in images: merged_idxs = [idx] cum_size = size for merge_idx in range(num_merges): max_overlap = 0 max_percent = 0 max_merge = None max_cidx = None max_size = None num_parents = merge_idx + 2 for comp_active, csize, cidx in images: if cidx in merged_idxs: continue merge = numpy.logical_and(active, comp_active) overlap = merge.sum() if overlap > max_overlap: max_overlap = overlap max_merge = merge max_cidx = cidx max_size = csize active = max_merge cum_size += max_size merged_idxs.append(max_cidx) overlap_results[merge_idx].append(max_overlap) cxn_results[merge_idx].append(max_overlap * (num_parents-1) - num_parents) i += 1 if i%10==0: print i fig = plt.figure(1) fig.set_size_inches(5, 10) plt.subplot(1,2,1) colors = '#008800 #880000 #000088 #888800'.split() start, end = 1000000, 0 for color, merge_idx in zip(colors, range(num_merges)): start = min(start, min(overlap_results[merge_idx])) end = max(end, max(overlap_results[merge_idx])) for color, merge_idx in zip(colors, reversed(range(num_merges))): plt.hist(overlap_results[merge_idx], 20, range=(start, end), facecolor=color, alpha=0.75) plt.xlabel("# shared features") plt.ylabel("# occurrences") plt.title("Component sharing\n%s categories, %s images." % \ (num_cats, images_per_category)) plt.grid(True) plt.subplot(1,2,2) start, end = 1000000, 0 for color, merge_idx in zip(colors, range(num_merges)): start = min(start, min(cxn_results[merge_idx])) end = max(end, max(cxn_results[merge_idx])) for color, merge_idx in zip(colors, reversed(range(num_merges))): plt.hist(cxn_results[merge_idx], numpy.arange(start, end, (end-start)/20), facecolor=color, alpha=0.75) plt.xlabel("# fewer connections") plt.ylabel("# occurrences") plt.title("Component sharing\n%s categories, %s images." % \ (num_cats, images_per_category)) plt.grid(True) plt.show() print colored("Analysis complete", "green") self.cxn_results = cxn_results self.overlap_results = overlap_results self.save_results() self.report()