$ hub install repvgg_b1g2_imagenet==1.0.0
$ hub run repvgg_b1g2_imagenet --input_path "/PATH/TO/IMAGE" --top_k 5
import paddle
import paddlehub as hub
if __name__ == '__main__':
model = hub.Module(name='repvgg_b1g2_imagenet',)
result = model.predict([PATH/TO/IMAGE])
使用PaddleHub Fine-tune API进行Fine-tune可以分为4个步骤。
import paddlehub.vision.transforms as T
transforms = T.Compose([T.Resize((256, 256)),
T.CenterCrop(224),
T.Normalize(mean=[0.485, 0.456, 0.406], std = [0.229, 0.224, 0.225])],
to_rgb=True)
'transforms' 数据增强模块定义了丰富的数据预处理方式,用户可按照需求替换自己需要的数据预处理方式。
from paddlehub.datasets import Flowers
flowers = Flowers(transforms)
flowers_validate = Flowers(transforms, mode='val')
'hub.datasets.Flowers()' 会自动从网络下载数据集并解压到用户目录下'$HOME/.paddlehub/dataset'目录。
import paddlehub as hub
model = hub.Module(name='repvgg_b1g2_imagenet',
label_list=["roses", "tulips", "daisy", "sunflowers", "dandelion"],
load_checkpoint=None)
PaddleHub提供许多图像分类预训练模型,如xception、mobilenet、efficientnet等,详细信息参见图像分类模型。
如果想尝试efficientnet模型,只需要更换Module中的'name'参数即可.
import paddlehub as hub
# 更换name参数即可无缝切换efficientnet模型, 代码示例如下
module = hub.Module(name="efficientnetb7_imagenet")
NOTE:目前部分模型还没有完全升级到2.0版本,敬请期待。
import paddle
from paddlehub.finetune.trainer import Trainer
optimizer = paddle.optimizer.Adam(learning_rate=0.001, parameters=model.parameters())
trainer = Trainer(model, optimizer, checkpoint_dir='img_classification_ckpt')
trainer.train(flowers, epochs=100, batch_size=32, eval_dataset=flowers_validate, save_interval=1)
Paddle2.0rc提供了多种优化器选择,如'SGD', 'Adam', 'Adamax'等,详细参见策略。
其中'Adam':
'Trainer' 主要控制Fine-tune的训练,包含以下可控制的参数:
'trainer.train' 主要控制具体的训练过程,包含以下可控制的参数:
当完成Fine-tune后,Fine-tune过程在验证集上表现最优的模型会被保存在'${CHECKPOINT_DIR}/best_model'目录下,其中'${CHECKPOINT_DIR}'目录为Fine-tune时所选择的保存checkpoint的目录。 我们使用该模型来进行预测。predict.py脚本如下:
import paddle
import paddlehub as hub
if __name__ == '__main__':
model = hub.Module(name='repvgg_b1g2_imagenet', label_list=["roses", "tulips", "daisy", "sunflowers", "dandelion"], load_checkpoint='/PATH/TO/CHECKPOINT')
result = model.predict(['flower.jpg'])
参数配置正确后,请执行脚本'python predict.py', 加载模型具体可参见加载。
NOTE: 进行预测时,所选择的module,checkpoint_dir,dataset必须和Fine-tune所用的一样。
PaddleHub Serving可以部署一个在线分类任务服务
运行启动命令:
$ hub serving start -m repvgg_b1g2_imagenet
这样就完成了一个分类任务服务化API的部署,默认端口号为8866。
NOTE: 如使用GPU预测,则需要在启动服务之前,请设置CUDA_VISIBLE_DEVICES环境变量,否则不用设置。
配置好服务端,以下数行代码即可实现发送预测请求,获取预测结果
import requests
import json
import cv2
import base64
import numpy as np
def cv2_to_base64(image):
data = cv2.imencode('.jpg', image)[1]
return base64.b64encode(data.tostring()).decode('utf8')
def base64_to_cv2(b64str):
data = base64.b64decode(b64str.encode('utf8'))
data = np.fromstring(data, np.uint8)
data = cv2.imdecode(data, cv2.IMREAD_COLOR)
return data
# 发送HTTP请求
org_im = cv2.imread('/PATH/TO/IMAGE')
data = {'images':[cv2_to_base64(org_im)], 'top_k':2}
headers = {"Content-type": "application/json"}
url = "http://127.0.0.1:8866/predict/repvgg_b1g2_imagenet"
r = requests.post(url=url, headers=headers, data=json.dumps(data))
data =r.json()["results"]['data']
paddlepaddle >= 2.0.0
paddlehub >= 2.0.0