PaddleClas icon indicating copy to clipboard operation
PaddleClas copied to clipboard

关于使用GeneralRecognition_PPLCNet_x2_5.yaml训练后,提取特征进行图片检索精度很差的问题

Open alexHxun opened this issue 1 year ago • 0 comments

欢迎您使用PaddleClas并反馈相关问题,非常感谢您对PaddleClas的贡献! 提出issue时,辛苦您提供以下信息,方便我们快速定位问题并及时有效地解决您的问题:

  1. PaddleClas版本以及PaddlePaddle版本:PaddleClas release 最新,PaddlePaddle 2.0
  2. 涉及的其他产品使用的版本号:无
  3. 训练环境信息: a. 具体操作系统,Ubuntu·18.04 b. Python版本号,python3.7.4 c. CUDA/cuDNN版本, CUDA11.0 CUDNN7.6
  4. 完整的代码(相比于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中所有图片正确检索的准确率??

希望有人能解答,如果 有描述的不清楚的地方,请指出

alexHxun avatar Aug 10 '22 02:08 alexHxun