mirror of
https://github.com/azaion/gps-denied-onboard.git
synced 2026-04-22 09:26:38 +00:00
3.0 KiB
3.0 KiB
Faiss Index Manager Helper
Interface Definition
Interface Name: IFaissIndexManager
Interface Methods
class IFaissIndexManager(ABC):
@abstractmethod
def build_index(self, descriptors: np.ndarray, index_type: str) -> FaissIndex:
pass
@abstractmethod
def add_descriptors(self, index: FaissIndex, descriptors: np.ndarray) -> bool:
pass
@abstractmethod
def search(self, index: FaissIndex, query: np.ndarray, k: int) -> Tuple[np.ndarray, np.ndarray]:
pass
@abstractmethod
def save_index(self, index: FaissIndex, path: str) -> bool:
pass
@abstractmethod
def load_index(self, path: str) -> FaissIndex:
pass
@abstractmethod
def is_gpu_available(self) -> bool:
pass
@abstractmethod
def set_device(self, device: str) -> bool:
"""Set device: 'gpu' or 'cpu'."""
pass
Component Description
Manages Faiss indices for DINOv2 descriptor similarity search. H04 builds indexes from UAV image descriptors for:
- Loop closure detection: Find when UAV revisits previously seen areas within the same flight
- Chunk-to-chunk matching: Match disconnected chunks to each other
- Flight-to-flight matching: Match current flight to previous flights in same area
Index Source: Descriptors are computed from UAV images using F08's DINOv2 encoder, NOT from satellite images. The index enables finding similar UAV viewpoints.
API Methods
build_index(descriptors: np.ndarray, index_type: str) -> FaissIndex
Description: Builds Faiss index from descriptors.
Index Types:
- "IVF": Inverted File (fast for large databases)
- "HNSW": Hierarchical Navigable Small World (best accuracy/speed trade-off)
- "Flat": Brute force (exact, slow for large datasets)
Input: (N, D) descriptors array
add_descriptors(index: FaissIndex, descriptors: np.ndarray) -> bool
Description: Adds more descriptors to existing index.
search(index: FaissIndex, query: np.ndarray, k: int) -> Tuple[np.ndarray, np.ndarray]
Description: Searches for k nearest neighbors.
Output: (distances, indices) - shape (k,)
save_index(index: FaissIndex, path: str) -> bool
Description: Saves index to disk for fast startup.
load_index(path: str) -> FaissIndex
Description: Loads pre-built index from disk.
Dependencies
External: faiss-gpu or faiss-cpu
GPU/CPU Fallback
H04 supports automatic fallback from GPU to CPU:
is_gpu_available(): Returns True if faiss-gpu is available and CUDA worksset_device("gpu"): Use GPU acceleration (faster for large indexes)set_device("cpu"): Use CPU (fallback when GPU unavailable)
Test Cases
- Build index with 10,000 UAV image descriptors → succeeds
- Search query UAV descriptor → returns top-k similar UAV frames
- Save/load index → index restored correctly
- GPU unavailable → automatically falls back to CPU
- Add descriptors incrementally → index grows correctly