在网格搜索中加入了可视化,但是训练脚本好像给改错了。

This commit is contained in:
2025-12-03 18:39:15 +08:00
parent 5b31827740
commit 3e271a61c2
4 changed files with 189 additions and 2 deletions
+58
View File
@@ -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相似度检索器"""