faq_2021_s2.md 6.6 KB
Newer Older
C
cuicheng01 已提交
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
# 图像识别常见问题汇总 - 2021 第2季


## 目录
* [第1期](#第1期)(2021.07.08)


<a name="第1期"></a>
## 第1期

### Q1.1: 目前使用的主体检测模型检测在某些场景中会有误检?

**A**:目前的主体检测模型训练时使用了COCO、Object365、RPC、LogoDet等公开数据集,如果被检测数据是类似工业质检等于常见类别差异较大的数据,需要基于目前的检测模型重新微调训练。

### Q1.2: 添加图片后建索引报assert text_num >= 2错?

**A**:请确保data_file.txt中图片路径和图片名称中间的间隔为单个table,而不是空格。

### Q1.3: 识别模块预测时报Illegal instruction错?

**A**:可能是编译生成的库文件与您的环境不兼容,导致程序报错,如果报错,推荐参考[向量检索教程](../../../deploy/vector_search/README.md)重新编译库文件。

### Q1.4 主体检测是每次只输出一个主体检测框吗?

**A**:主体检测这块的输出数量是可以通过配置文件配置的。在配置文件中Global.threshold控制检测的阈值,小于该阈值的检测框被舍弃,Global.max_det_results控制最大返回的结果数,这两个参数共同决定了输出检测框的数量。

### Q1.5 训练主体检测模型的数据是如何选择的?换成更小的模型会有损精度吗?

**A**:训练数据是在COCO、Object365、RPC、LogoDet等公开数据集中随机抽取的子集,小模型精度可能会有一些损失,后续我们也会尝试下更小的检测模型。关于主体检测模型的更多信息请参考[主体检测](../application/mainbody_detection.md)

### Q1.6 识别模型怎么在预训练模型的基础上进行微调训练?

**A**:识别模型的微调训练和分类模型的微调训练类似,识别模型可以加载商品的预训练模型],训练过程可以参考[识别模型训练](../tutorials/getting_started_retrieval.md),后续我们也会持续细化这块的文档。
C
cuicheng01 已提交
34 35 36 37 38 39 40 41

### Q1.7 PaddleClas和PaddleDetection区别

**A**:PaddleClas是一个兼主体检测、图像分类、图像检索于一体的图像识别repo,用于解决大部分图像识别问题,用户可以很方便的使用PaddleClas来解决小样本、多类别的图像识别问题。PaddleDetection提供了目标检测、关键点检测、多目标跟踪等能力,方便用户定位图像中的感兴趣的点和区域,被广泛应用于工业质检、遥感图像检测、无人巡检等项目。

### Q1.8 PaddleClas 2.2和PaddleClas 2.1完全兼容吗?

**A**:PaddleClas2.2相对PaddleClas2.1新增了metric learning模块,主体检测模块、向量检索模块。另外,也提供了商品识别、车辆识别、logo识别和动漫人物识别等4个场景应用示例。用户可以基于PaddleClas 2.2快速构建图像识别系统。在图像分类模块,二者的使用方法类似,可以参考[图像分类示例](../tutorials/getting_started.md)快速迭代和评估。新增的metric learning模块,可以参考[metric learning示例](../tutorials/getting_started_retrieval.md)。另外,新版本暂时还不支持fp16、dali训练,也暂时不支持多标签训练,这块内容将在不久后支持。
C
cuicheng01 已提交
42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98

### Q1.9 训练metric learning时,每个epoch中,无法跑完所有mini-batch,为什么?

**A**:在训练metric learning时,使用的Sampler是DistributedRandomIdentitySampler,该Sampler不会采样全部的图片,导致会让每一个epoch采样的数据不是所有的数据,所以无法跑完显示的mini-batch是正常现象。后续我们会优化下打印的信息,尽可能减少给大家带来的困惑。

### Q1.10 有些图片没有识别出结果,为什么?

**A**:在配置文件(如inference_product.yaml)中,`IndexProcess.score_thres`中会控制被识别的图片与库中的图片的余弦相似度的最小值。当余弦相似度小于该值时,不会打印结果。您可以根据自己的实际数据调整该值。

### Q1.11 为什么有一些图片检测出的结果就是原图?

**A**:主体检测模型会返回检测框,但事实上为了让后续的识别模型更加准确,在返回检测框的同时也返回了原图。后续会根据原图或者检测框与库中的图片的相似度排序,相似度最高的库中图片的标签即为被识别图片的标签。

### Q1.12 使用circle loss还需加triplet loss吗?

**A**:circle loss是统一了样本对学习和分类学习的两种形式,如果是分类学习的形式的话,可以增加triplet loss。

### Q1.13  hub serving方式启动某个模块,怎么添加该模块的参数呢?

**A**:具体可以参考[hub serving参数](../../../deploy/hubserving/clas/params.py)

### Q1.14  模型训练出nan,为什么?

**A**

1.确保正确加载预训练模型, 最简单的加载方式添加参数`-o Arch.pretrained=True`即可;
2.模型微调时,学习率不要太大,如设置0.001就好。


### Q1.15 SSLD中,大模型在500M数据上预训练后蒸馏小模型,然后在1M数据上蒸馏finetune 小模型?

**A**:步骤如下:

1.基于facebook开源的ResNeXt101-32x16d-wsl模型 去蒸馏得到了ResNet50-vd模型;
2.用这个ResNet50-vd,在500W数据集上去蒸馏MobilNetV3;
3.考虑到500W的数据集的分布和100W的数据分布不完全一致,所以这块,在100W上的数据上又finetune了一下,精度有微弱的提升。


### Q1.16 如果不是识别开源的四个方向的图片,该使用哪个识别模型?

**A**:建议使用商品识别模型,一来是因为商品覆盖的范围比较广,被识别的图片是商品的概率更大,二来是因为商品识别模型的训练数据使用了5万类别的数据,泛化能力更好,特征会更鲁棒一些。

### Q1.17 最后使用512维的向量,为什么不用1024或者其他维度的呢?

**A**:使用维度小的向量,为了加快计算,在实际使用过程中,可能使用128甚至更小。一般来说,512的维度已经够大,能充分表示特征了。

### Q1.18 训练SwinTransformer,loss出现nan

**A**:训练swin-transformer的话,需要使用paddle-dev去训练,安装方式参考[paddlepaddle安装方式](https://www.paddlepaddle.org.cn/install/quick?docurl=/documentation/docs/zh/develop/install/pip/linux-pip.html),后续paddlepaddle-2.1也会同时支持。

### Q1.19 新增底库数据需要重新构建索引吗?

**A**:这一版需要重新构建索引,未来版本会支持只构建新增图片的索引。

### Q1.20 PaddleClas 的train log 文件在哪里?

**A**:在保存权重的路径中存放了train.log。