Paddlehub快速入门:
https://paddlehub.readthedocs.io/zh_CN/release-v2.1/get_start_index.html

教程:
https://paddlehub.readthedocs.io/zh_CN/release-v2.1/tutorial_index.html
图像分类finetune:
https://paddlehub.readthedocs.io/zh_CN/release-v2.1/finetune/image_classification.html
自定义数据:
https://paddlehub.readthedocs.io/zh_CN/release-v2.1/finetune/customized_dataset.html

API:
https://paddlehub.readthedocs.io/zh_CN/release-v2.1/api_index.html

1 安装paddlehub


pip install --upgrade paddlehub -i https://mirror.baidu/pypi/simple

2 Python预测


口罩检测代码:

import paddlehub as hub
import cv2


def detectMask(img_path):
    module = hub.Module(name="pyramidbox_lite_mobile_mask")
    test_img_path = "test.png"
    img = cv2.imread(test_img_path)
    # print(img.shape)
    # set input dict
    input_dict = {"data": [img]}
    results = module.face_detection(data=input_dict)
    print(results)
    print(results[0]["data"][0]["label"])
    print(results[0]["data"][0]["confidence"])
    print(results[0]["data"][0]["top"])
    print(results[0]["data"][0]["bottom"])
    print(results[0]["data"][0]["left"])
    print(results[0]["data"][0]["right"])


if __name__ == '__main__':
    detectMask("test.png")
    pass

结果图:

3 图像分类迁移学习

(1)使用自带的数据集迁移学习

代码:

import paddle

import paddlehub.vision.transforms as T

import paddlehub as hub

# Step1: 定义数据预处理方式

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)

# Step2: 下载数据集并使用

from paddlehub.datasets import Flowers

flowers = Flowers(transforms)

flowers_validate = Flowers(transforms, mode='val')

# Step3: 加载预训练模型

model = hub.Module(name="resnet50_vd_imagenet_ssld", label_list=["roses", "tulips", "daisy", "sunflowers", "dandelion"])

# Step4: 选择优化策略和运行配置

optimizer = paddle.optimizer.Adam(learning_rate=0.001, parameters=model.parameters())

trainer = hub.Trainer(model, optimizer, checkpoint_dir='img_classification_ckpt')

trainer.train(flowers, epochs=10, batch_size=2, eval_dataset=flowers_validate, save_interval=1)

(2) 使用自己得数据集迁移学习

import paddle
import paddlehub.vision.transforms as T
import paddlehub as hub
import os
from typing import Callable, Tuple
import paddle
import numpy as np
from paddlehub.finetune.trainer import Trainer
dataROOTPath = "C:/Users/Happy/.paddlehub/dataset"

class MyDataSet(paddle.io.Dataset):
    def __init__(self, transforms: Callable, mode: str = 'train'):
        self.mode = mode
        self.transforms = transforms
        self.num_classes = 2

        if self.mode == 'train':
            self.file = 'train_list.txt'
        elif self.mode == 'test':
            self.file = 'test_list.txt'
        else:
            self.file = 'validate_list.txt'
        self.file = os.path.join(dataROOTPath, 'mydata', self.file)

        with open(self.file, 'r') as file:
            self.data = file.read().split(' ')

    def __getitem__(self, idx) -> Tuple[np.ndarray, int]:
        img_path, grt = self.data[idx].split(' ')
        img_path = os.path.join(dataROOTPath, 'mydata', img_path)
        im = self.transforms(img_path)
        return im, int(grt)

    def __len__(self):
        return len(self.data)

# Step1: 定义数据预处理方式
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)
# Step2: 使用自己的数据集
myDataSet = MyDataSet(transforms, mode='train')
myDataSet_validate = MyDataSet(transforms, mode='val')
# Step3: 加载预训练模型
model = hub.Module(name="resnet50_vd_imagenet_ssld", label_list=["roses", "sunflowers"])
# Step4: 选择优化策略和运行配置
optimizer = paddle.optimizer.Adam(learning_rate=0.001, parameters=model.parameters())
trainer = Trainer(model, optimizer, checkpoint_dir='img_classification_ckpt')
trainer.train(myDataSet, epochs=10, batch_size=2, eval_dataset=myDataSet_validate, log_interval=2, save_interval=1)

4 模型预测

import paddle
import paddlehub as hub

if __name__ == '__main__':

    model = hub.Module(name='resnet50_vd_imagenet_ssld', label_list=["roses", "tulips", "daisy", "sunflowers", "dandelion"], load_checkpoint='/PATH/TO/CHECKPOINT')
    result = model.predict(['flower.jpg'])

更多推荐

【paddle】paddlehub