PaddleClas
PaddleClas copied to clipboard
关于使用GeneralRecognition_PPLCNet_x2_5.yaml训练后,提取特征进行图片检索精度很差的问题
欢迎您使用PaddleClas并反馈相关问题,非常感谢您对PaddleClas的贡献! 提出issue时,辛苦您提供以下信息,方便我们快速定位问题并及时有效地解决您的问题:
- PaddleClas版本以及PaddlePaddle版本:PaddleClas release 最新,PaddlePaddle 2.0
- 涉及的其他产品使用的版本号:无
- 训练环境信息: a. 具体操作系统,Ubuntu·18.04 b. Python版本号,python3.7.4 c. CUDA/cuDNN版本, CUDA11.0 CUDNN7.6
- 完整的代码(相比于repo中代码,有改动的地方)、详细的错误信息及相关log
只修改了向量尺寸,数据集路径:
global configs
Global: checkpoints: null pretrained_model: null output_dir: ./output/ device: gpu save_interval: 1 eval_during_train: True eval_interval: 1 epochs: 100 print_batch_step: 10 use_visualdl: False
used for static mode and model export
image_shape: [3, 224, 224] save_inference_dir: ./inference eval_mode: retrieval use_dali: False to_static: False
model architecture
Arch: name: RecModel infer_output_key: features infer_add_softmax: False
Backbone: name: PPLCNet_x2_5 pretrained: True use_ssld: True BackboneStopLayer: name: "flatten" Neck: name: FC embedding_size: 1280 class_num: 256 Head: name: ArcMargin embedding_size: 256 class_num: 250 margin: 0.2 scale: 30
loss function config for traing/eval process
Loss: Train: - CELoss: weight: 1.0 Eval: - CELoss: weight: 1.0
Optimizer: name: Momentum momentum: 0.9 lr: name: Cosine learning_rate: 0.04 warmup_epoch: 5 regularizer: name: 'L2' coeff: 0.00001
data loader for train and eval
DataLoader: Train: dataset: name: ImageNetDataset image_root: ./dataset/ cls_label_path: ./dataset/train.txt transform_ops: - DecodeImage: to_rgb: True channel_first: False - RandCropImage: size: 224 - RandFlipImage: flip_code: 1 - NormalizeImage: scale: 1.0/255.0 mean: [0.485, 0.456, 0.406] std: [0.229, 0.224, 0.225] order: ''
sampler:
name: DistributedBatchSampler
batch_size: 32
drop_last: False
shuffle: True
loader:
num_workers: 4
use_shared_memory: True
Eval: Query: dataset: name: VeriWild image_root: ./dataset/query/ cls_label_path: ./dataset//query.txt transform_ops: - DecodeImage: to_rgb: True channel_first: False - ResizeImage: size: 224 - NormalizeImage: scale: 0.00392157 mean: [0.485, 0.456, 0.406] std: [0.229, 0.224, 0.225] order: '' sampler: name: DistributedBatchSampler batch_size: 32 drop_last: False shuffle: False loader: num_workers: 4 use_shared_memory: True
Gallery:
dataset:
name: VeriWild
image_root: ./dataset/gallery/
cls_label_path: ./dataset/gallery.txt
transform_ops:
- DecodeImage:
to_rgb: True
channel_first: False
- ResizeImage:
size: 224
- NormalizeImage:
scale: 0.00392157
mean: [0.485, 0.456, 0.406]
std: [0.229, 0.224, 0.225]
order: ''
sampler:
name: DistributedBatchSampler
batch_size: 32
drop_last: False
shuffle: False
loader:
num_workers: 4
use_shared_memory: True
Metric: Eval: - Recallk: topk: [1, 5]
正常训练过程中,metric都有接近90%,训练完后,使用模型提取特征进行图片检索,评估准确率,结果非常不理想。。。。top1只有30%多
请问哪里有问题吗?
另外,想知道训练过程中,评估metric的方法是什么?类似于正常的分类准确率? gallery和query集岂不是跟分类任务中的测试集,验证集没区别? 还是说训练过程中的评估方法是使用该epoch训练生成的模型进行特征提取,生成数据库gallery,然后根据相似距离,计算query中所有图片正确检索的准确率??
希望有人能解答,如果 有描述的不清楚的地方,请指出