Keras X Imagenet
以下介绍如何在Keras里跑Imagenet2012,以及其中的坑。
版本说明:
- Tensorflow 2.2.0
- Python 3.5
数据集下载
方法一:官网下载文件。以Imagenet2012为例,数据集均可以在Imagenet官网 下载,具体地,Imagenet2012下载网址。
Warning:值得注意的是,validation部分的图片标签在 Development kit (Task 1 & 2)
中,需要下载该文件。
方法二:Tensorflow常年维护一个数据集即时获取的PyPI仓库,即tensorflow_datasets,但如何使用有待补充…
数据预处理和准备
首先是validation标签问题,这个问题很大,因为Imagenet官网toolkit给的标签(ILSVRC2012_ID)和Caffe、Keras的标签是不一致的,跑代码时需要用对应框架的标签。(证据ILSVRC2012_img_val数据集的使用, 下载imagenet2012数据集以及label说明)。我的处理方法是下载Caffe对应的Imagenet2012的标签,跑Keras时用这个标签。
然后是预处理,预处理大概分几步:
- Convert the image/images into batch format
- expand_dims will add an extra dimension to the data at a particular axis, we want the input matrix to the network to be of the form (batchsize, height, width, channels), thus we add the extra dimension to the axis 0.
- prepare the image for the XXX model
Note:不同的模型对应的不同的preprocess_input方法,要注意对应。要注意input_shape大小。同时注意,preprocess_input只能处理一张图片,处理多张图片的结果是不一样的。
以下是对图片进行 VGG19 处理的示例代码 :
1 | from keras.preprocessing import image |
用预训练模型参数测试
Reference:
- Keras Applications
- Keras Tutorial Using pre-trained Imagenet models
- mostafaelhoushi/keras-imagenet
- How to reproduce ImageNet validation results
示例代码 :
1 | import tensorflow as tf |
Note:血泪教训:Keras虽然有中文文档,但更新比英文慢,看英文版本会准确些