• 1. 前提
  • 2. 创建项目文件夹
  • 3. 什么是__init__.py文件
  • 4.什么是module.py文件
    • 4.1 引入必要的模块(即使有的库没用到,也不要删)
    • 4.2 定义类
  • 5. 如何使用?
    • 5.1 调用方法一:安装到系统再调用
    • 5.2 调用方法二:直接调用项目文件夹
  • 6. PaddleHub Serving模型的部署

本文主要参考如何创建自己的Module一文,并结合自己实践和踩坑记录而成。

github:detect_test_for_PaddleHub

PaddleHub:自定义Module的Serveing

1. 前提

现在基于你已经训练好了一个模型,现在将它转为hub,方便管理和调用

2. 创建项目文件夹

首先,创建一个项目detect_hub文件夹,其必要结构为:

即项目文件夹detect_hub下存在两个最基本的程序文件(其他你需要的自行放置在根目录下即可)。

3. 什么是__init__.py文件

该文件是一个包的标记文件,我们只需要新建一个内容为空名字为“init.py”的py文件,放置在项目跟目录下即可。

4.什么是module.py文件

该文件是完成我们预测功能的程序文件,现在来讲如何按规则创建

4.1 引入必要的模块(即使有的库没用到,也不要删)

import argparse
import os

import paddlehub as hub
from paddlehub.module.module import runnable, moduleinfo

# 如果还使用到其他自定义的模块时,需要输入全路径(从根目录开始),比如
# detect_test.inference import *

4.2 定义类

module.py中需要有一个继承了hub.Module的类存在,该类负责实现预测逻辑,并使用moduleinfo填写基本信息。当使用hub.Module(name=”senta_test”)加载Module时,PaddleHub会自动创建SentaTest的对象并返回。

:“@moduleinfo”中的“name”必须和跟目录的名字(detect_test)一样,否则会导致导入模块时的路径问题

@moduleinfo(
    name="detect_test",
    version="1.0.0",
    summary="This is a PaddleHub Module. Just for test.",
    author="thgpddl",
    author_email="",
    type="cv/detection",
)
class DetectTest:
    def __init__(self):
        # add arg parser
        self.parser = argparse.ArgumentParser(description="test")
        self.parser.add_argument('--input_iameg_path', type=str, default=None, help="a url of image")		
		# 更多初始化的量....
		
	def predict(self,input_image):
		# 实现预测的代码,可以通过调用第三方的模块实现
		# 比如调用你写好了的模型预测模块,来实现预测
		return your_result

5. 如何使用?

5.1 调用方法一:安装到系统再调用

将Module安装到本机中,再通过Hub.Module(name=…)加载
安装:$ hub install detect_test
detect_test为项目根目录名字
调用:

import paddlehub as hub
test=hub.Module(name="detect_test")
res=test.predict([img])

:这里的"predict()"方式不是固定的,他实际上是调用module.py中类中定义的 p r e d i c t ( ) predict() predict()方法

5.2 调用方法二:直接调用项目文件夹

直接通过Hub.Module(directory=…)加载

import paddlehub as hub
test=hub.Module(directory="detect_test")
res=test.predict([img])

6. PaddleHub Serving模型的部署

PaddleHub:自定义Module的Serveing

更多推荐

PaddleHub:自定义Module