将局部特征聚合为全局特征
feature-aggregation的Python项目详细描述
这是一个实现聚合本地特性的方法的库 (主要用于多媒体)可用于单个全局功能 使用任何分类器都很容易。
依赖关系
库依赖于scikit learn和所有功能聚合 方法扩展scikit learn-baseestimator类。
示例
importnumpyasnpfromfeature_aggregationimportBagOfWords,FisherVectorsX=np.random.rand(1000,2)bow=BagOfWords(10)fv=FisherVectors(10)bow.fit(X)fv.fit(X)G1=bow.transform(np.random.rand(10,100,2))G2=fv.transform([np.random.rand(int(np.random.rand()*100),2)for_inrange(10)])
一个更复杂的例子,使用opencv提取稠密的sift,然后 用词包变换和卡方训练支持向量机 加性核。
importnumpyasnpimportcv2fromsklearn.datasetsimportfetch_olivetti_facesfromsklearn.kernel_approximationimportAdditiveChi2Samplerfromsklearn.metricsimportclassification_reportfromsklearn.pipelineimportPipelinefromsklearn.svmimportLinearSVCfromfeature_aggregationimportBagOfWordsdefsift(*args,**kwargs):try:returncv2.xfeatures2d.SIFT_create(*args,**kwargs)except:returncv2.SIFT()defdsift(img,step=5):keypoints=[cv2.KeyPoint(x,y,step)foryinrange(0,img.shape[0],step)forxinrange(0,img.shape[1],step)]features=sift().compute(img,keypoints)[1]features/=features.sum(axis=1).reshape(-1,1)returnfeatures# Generate dense SIFT featuresfaces=fetch_olivetti_faces()features=[dsift((x.reshape(64,64,1)*255).astype(np.uint8))forxinfaces.data]# Aggregate those features with bag of words using online trainingbow=BagOfWords(100)foriinrange(2):forjinrange(0,len(features),10):bow.partial_fit(features[j:j+10])faces_bow=bow.transform(features)# Split in training and test settrain=np.arange(len(features))np.random.shuffle(train)test=train[200:]train=train[:200]# Train and evaluatesvm=Pipeline([("chi2",AdditiveChi2Sampler()),("svm",LinearSVC(C=10))])svm.fit(faces_bow[train],faces.target[train])print(classification_report(faces.target[test],svm.predict(faces_bow[test])))