This is a library that implements methods to aggregate local features (mainly for multimedia) into a single global feature that can be used easily with any classifier.
Dependencies
The library depends on scikit-learn and all the feature aggregation methods extend the scikit-learn BaseEstimator class.
Example
import numpy as np
from feature_aggregation import BagOfWords, FisherVectors
X = 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 _ in range(10)
])
A more complex example using OpenCV to extract dense SIFT and then transform them using Bag Of Words and train an SVM with chi square additive kernel.
import numpy as np
import cv2
from sklearn.datasets import fetch_olivetti_faces
from sklearn.kernel_approximation import AdditiveChi2Sampler
from sklearn.metrics import classification_report
from sklearn.pipeline import Pipeline
from sklearn.svm import LinearSVC
from feature_aggregation import BagOfWords
def sift(*args, **kwargs):
try:
return cv2.xfeatures2d.SIFT_create(*args, **kwargs)
except:
return cv2.SIFT()
def dsift(img, step=5):
keypoints = [
cv2.KeyPoint(x, y, step)
for y in range(0, img.shape[0], step)
for x in range(0, img.shape[1], step)
]
features = sift().compute(img, keypoints)[1]
features /= features.sum(axis=1).reshape(-1, 1)
return features
# Generate dense SIFT features
faces = fetch_olivetti_faces()
features = [
dsift((x.reshape(64, 64, 1)*255).astype(np.uint8))
for x in faces.data
]
# Aggregate those features with bag of words using online training
bow = BagOfWords(100)
for i in range(2):
for j in range(0, len(features), 10):
bow.partial_fit(features[j:j+10])
faces_bow = bow.transform(features)
# Split in training and test set
train = np.arange(len(features))
np.random.shuffle(train)
test = train[200:]
train = train[:200]
# Train and evaluate
svm = 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])))
Metadata
Release files for feature-aggregation 0.3
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| feature_aggregation-0.3-py2.py3-none-any.whl | Python 2, Python 3 | none | any | Details |
Release files / feature_aggregation-0.3-py2.py3-none-any.whl
| Download URL | feature_aggregation-0.3-py2.py3-none-any.whl |
|---|---|
| Size | 13.2 kB |
| Tags | Python 2 Python 3 |
|
SHA-256 checksum How to use checksums |
9edd66f946dffdf6c4ae3942e13fb5fa8c464efd6525a777d879c241dddd7e07
|
|
BLAKE2b-256 checksum How to use checksums |
2151317a3238ba37c30763177651fb9751f3f545abe021e446ed1e9b5cdc57f5
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
Security for feature-aggregation 0.3
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.