在网格搜索中加入了可视化,但是训练脚本好像给改错了。
This commit is contained in:
@@ -358,6 +358,64 @@ class FAISSIndexBuilder:
|
||||
return index
|
||||
|
||||
|
||||
def extract_embeddings_only(model_path: str,
|
||||
train_dir: str,
|
||||
output_dir: str,
|
||||
embedding_dim: int = 512,
|
||||
batch_size: int = 16) -> Tuple[np.ndarray, List[int]]:
|
||||
"""
|
||||
仅提取特征向量并保存为JSON(用于可视化)
|
||||
不构建完整的FAISS索引,节省时间
|
||||
|
||||
Args:
|
||||
model_path: 模型路径
|
||||
train_dir: 训练数据目录
|
||||
output_dir: 输出目录
|
||||
embedding_dim: 特征向量维度
|
||||
batch_size: 批处理大小
|
||||
|
||||
Returns:
|
||||
(embeddings, labels): 特征向量数组和标签列表
|
||||
"""
|
||||
print("=" * 60)
|
||||
print("开始提取特征向量用于可视化")
|
||||
print("=" * 60)
|
||||
|
||||
builder = FAISSIndexBuilder(model_path, embedding_dim)
|
||||
|
||||
# 扫描数据
|
||||
image_paths, class_names, labels = builder.scan_training_data(train_dir)
|
||||
builder.image_paths = image_paths
|
||||
builder.labels = labels
|
||||
|
||||
# 提取特征
|
||||
embeddings = builder.extract_features_batch(image_paths, batch_size)
|
||||
builder.embeddings = embeddings
|
||||
|
||||
# 仅保存 embeddings.json 和 labels.json(可视化需要的)
|
||||
os.makedirs(output_dir, exist_ok=True)
|
||||
|
||||
embeddings_json_path = os.path.join(output_dir, 'embeddings.json')
|
||||
labels_json_path = os.path.join(output_dir, 'labels.json')
|
||||
|
||||
print(f"保存特征向量到: {embeddings_json_path}")
|
||||
with open(embeddings_json_path, "w", encoding="utf-8") as f:
|
||||
json.dump(embeddings.tolist(), f, ensure_ascii=False)
|
||||
|
||||
print(f"保存标签到: {labels_json_path}")
|
||||
with open(labels_json_path, "w", encoding="utf-8") as f:
|
||||
json.dump(labels, f, ensure_ascii=False)
|
||||
|
||||
print("=" * 60)
|
||||
print(f"✓ 特征向量提取完成")
|
||||
print(f" 输出目录: {output_dir}")
|
||||
print(f" 样本数: {len(embeddings)}")
|
||||
print(f" 特征维度: {embedding_dim}")
|
||||
print("=" * 60)
|
||||
|
||||
return embeddings, labels
|
||||
|
||||
|
||||
class FAISSSearcher:
|
||||
"""FAISS相似度检索器"""
|
||||
|
||||
|
||||
Reference in New Issue
Block a user