Esempio n. 1
0
def classify_image(cc, img_idx, C=1.0, gamma=0.0, cls=None):
  """
  Input: ClassifierConfig, img_idx
  Output: Score for given class; 20list of scores if cls=None
  """
  feat_vect = get_feature_vector(cc, img_idx)
  if cls == None:
    score = {}
    for cls_idx, cls in enumerate(cc.d.classes):
      print '\tclassify %s for %s on %d'%(cc.d.images[img_idx].name, cls, comm_rank)
      path = config.get_classifier_svm_name(cls, C, gamma)
      if os.path.exists(path):
        clf = load_svm(path)
        score[cls_idx] = svm_predict(feat_vect, clf)
  else:
    clf = load_svm(config.get_classifier_svm_name(cls))
    score = svm_predict(feat_vect, clf)
  return score
Esempio n. 2
0
def classify_image(cc, img_idx, C=1.0, gamma=0.0, cls=None):
    """
  Input: ClassifierConfig, img_idx
  Output: Score for given class; 20list of scores if cls=None
  """
    feat_vect = get_feature_vector(cc, img_idx)
    if cls == None:
        score = {}
        for cls_idx, cls in enumerate(cc.d.classes):
            print '\tclassify %s for %s on %d' % (cc.d.images[img_idx].name,
                                                  cls, comm_rank)
            path = config.get_classifier_svm_name(cls, C, gamma)
            if os.path.exists(path):
                clf = load_svm(path)
                score[cls_idx] = svm_predict(feat_vect, clf)
    else:
        clf = load_svm(config.get_classifier_svm_name(cls))
        score = svm_predict(feat_vect, clf)
    return score
Esempio n. 3
0
def train_image_classify_svm(cc, cls, C=1.0, gamma=0.0, force_new=False):
    current_fold = cc.d.current_fold
    filename = config.get_classifier_svm_name(cls, C, gamma, current_fold)
    if not force_new and os.path.exists(filename):
        print 'svm for class %s, C=%f, gamma=%f exists already' % (cls, C,
                                                                   gamma)
        return

    pyr_feat_size = get_pyr_feat_size(cc.L, cc.dense_codebook.shape[0])

    cc.tictocer.tic('overall')

    print 'compute classifier(C=%f, gamma=%f) for class %s' % (C, gamma, cls)
    pos_images = cc.d.get_pos_samples_for_fold_class(cls)
    if pos_images.size == 0:
        return
    neg_images = cc.d.get_neg_samples_for_fold_class(cls, pos_images.size)

    # 1. extract all the pyramids
    # ======== POSTIVE IMAGES ===========
    print 'compute feature vector for positive images'
    num_slices = 3
    pos_pyrs = np.zeros(
        (len(pos_images),
         pyr_feat_size + cc.sparse_codebook.shape[0] * (1 + num_slices)))
    for idx, img in enumerate(pos_images):
        pos_pyrs[idx, :] = get_feature_vector(cc, img)

    # ======== NEGATIVE IMAGES ===========
    print 'compute feature vector for negative images'
    neg_pyrs = np.zeros(
        (len(neg_images),
         pyr_feat_size + cc.sparse_codebook.shape[0] * (1 + num_slices)))
    for idx, img in enumerate(neg_images):
        neg_pyrs[idx, :] = get_feature_vector(cc, img)

    # 2. Compute SVM for class
    X = np.vstack((pos_pyrs, neg_pyrs))
    Y = [1] * pos_pyrs.shape[0] + [-1] * neg_pyrs.shape[0]

    if X.shape[0] > 0:
        print 'train svm for class %s, C=%f, gamma=%f' % (cls, C, gamma)
        cc.tictocer.tic()
        clf = train_svm(X, Y, kernel='rbf', gamma=gamma, C=C)
        print '\ttook %f seconds' % cc.tictocer.toc(quiet=True)

        print 'save as', filename
        save_svm(clf, filename)
    else:
        print 'Don\'t compute SVM, no examples given'

    print 'training all classifier SVMs took:', cc.tictocer.toc(
        'overall', quiet=True), 'seconds on', comm_rank
Esempio n. 4
0
def classify_images(cc, images, C, gamma):
  res = np.zeros((images.shape[0], len(cc.d.classes)))
  for cls_idx, cls in enumerate(cc.d.classes):
    filename = config.get_classifier_svm_name(cls, C, gamma, cc.d.current_fold)
    if not os.path.exists(filename):
      continue
    clf = load_svm(filename, probability=False)
    for idx2, img_idx in enumerate(images):
      x = get_feature_vector(cc, img_idx)
      pred = svm_predict(x, clf)
      if pred.size > 0:
        res[idx2, cls_idx] = 1
  return res*2-1
Esempio n. 5
0
def classify_images(cc, images, C, gamma):
    res = np.zeros((images.shape[0], len(cc.d.classes)))
    for cls_idx, cls in enumerate(cc.d.classes):
        filename = config.get_classifier_svm_name(cls, C, gamma,
                                                  cc.d.current_fold)
        if not os.path.exists(filename):
            continue
        clf = load_svm(filename, probability=False)
        for idx2, img_idx in enumerate(images):
            x = get_feature_vector(cc, img_idx)
            pred = svm_predict(x, clf)
            if pred.size > 0:
                res[idx2, cls_idx] = 1
    return res * 2 - 1
Esempio n. 6
0
def train_image_classify_svm(cc, cls, C=1.0, gamma=0.0, force_new=False):
  current_fold = cc.d.current_fold
  filename = config.get_classifier_svm_name(cls, C, gamma, current_fold)
  if not force_new and os.path.exists(filename):
    print 'svm for class %s, C=%f, gamma=%f exists already'%(cls,C,gamma)
    return
      
  pyr_feat_size = get_pyr_feat_size(cc.L, cc.dense_codebook.shape[0])  
  
  cc.tictocer.tic('overall') 
  
  print 'compute classifier(C=%f, gamma=%f) for class %s'%(C, gamma, cls)
  pos_images = cc.d.get_pos_samples_for_fold_class(cls)
  if pos_images.size == 0:
    return
  neg_images = cc.d.get_neg_samples_for_fold_class(cls, pos_images.size)
    
  # 1. extract all the pyramids    
  # ======== POSTIVE IMAGES ===========
  print 'compute feature vector for positive images'
  num_slices = 3
  pos_pyrs = np.zeros((len(pos_images),pyr_feat_size + cc.sparse_codebook.shape[0]*(1+num_slices)))      
  for idx, img in enumerate(pos_images):
    pos_pyrs[idx, :] = get_feature_vector(cc, img)

  # ======== NEGATIVE IMAGES ===========
  print 'compute feature vector for negative images'
  neg_pyrs = np.zeros((len(neg_images),pyr_feat_size + cc.sparse_codebook.shape[0]*(1+num_slices)))  
  for idx, img in enumerate(neg_images):
    neg_pyrs[idx, :] = get_feature_vector(cc, img)
  
  # 2. Compute SVM for class
  X = np.vstack((pos_pyrs, neg_pyrs))
  Y = [1]*pos_pyrs.shape[0] + [-1]*neg_pyrs.shape[0] 
  
  if X.shape[0] > 0:
    print 'train svm for class %s, C=%f, gamma=%f'%(cls,C,gamma)
    cc.tictocer.tic()    
    clf = train_svm(X, Y, kernel='rbf', gamma=gamma, C=C)
    print '\ttook %f seconds'%cc.tictocer.toc(quiet=True)
    
    print 'save as', filename
    save_svm(clf, filename)
  else:
    print 'Don\'t compute SVM, no examples given'
  
  print 'training all classifier SVMs took:', cc.tictocer.toc('overall', quiet=True), 'seconds on', comm_rank