README.md 5.5 KB
Newer Older
H
haoyuying 已提交
1
# ace2p
W
wuzewu 已提交
2

H
haoyuying 已提交
3 4 5 6 7 8 9 10 11
|模型名称|ace2p|
| :--- | :---: | 
|类别|图像-图像分割|
|网络|ACE2P|
|数据集|LIP|
|是否支持Fine-tuning|否|
|模型大小|259MB|
|指标|-|
|最新更新日期|2021-02-26|
W
wuzewu 已提交
12 13


H
haoyuying 已提交
14
## 一、模型基本信息
W
wuzewu 已提交
15

H
haoyuying 已提交
16
- ### 应用效果展示
W
wuzewu 已提交
17

H
haoyuying 已提交
18 19 20 21
  - 网络结构:
      <p align="center">
      <img src="https://bj.bcebos.com/paddlehub/paddlehub-img/ace2p_network.jpg" hspace='10'/> <br />
      </p>
W
wuzewu 已提交
22

H
haoyuying 已提交
23
  - 调色板
W
wuzewu 已提交
24

H
haoyuying 已提交
25 26 27
      <p align="left">
      <img src="https://bj.bcebos.com/paddlehub/paddlehub-img/ace2p_palette.jpg" hspace='10'/> <br />
      </p>
W
wuzewu 已提交
28

H
haoyuying 已提交
29 30 31 32
  - 样例结果示例:
      <p align="center">
      <img src="https://user-images.githubusercontent.com/35907364/130913092-312a5f37-842e-4fd0-8db4-5f853fd8419f.jpg" width = "337" height = "505" hspace='10'/> <img src="https://user-images.githubusercontent.com/35907364/130913765-c9572c77-c6bf-46ec-9653-04ff356b4b85.png" width = "337" height = "505" hspace='10'/>
      </p>
W
wuzewu 已提交
33

H
haoyuying 已提交
34
- ### 模型介绍
W
wuzewu 已提交
35

H
haoyuying 已提交
36
  - 人体解析(Human Parsing)是细粒度的语义分割任务,其旨在识别像素级别的人类图像的组成部分(例如,身体部位和服装)。ACE2P通过融合底层特征,全局上下文信息和边缘细节,端到端地训练学习人体解析任务。该结构针对Intersection over Union指标进行针对性的优化学习,提升准确率。以ACE2P单人人体解析网络为基础的解决方案在CVPR2019第三届LIP挑战赛中赢得了全部三个人体解析任务的第一名。该PaddleHub Module采用ResNet101作为骨干网络,接受输入图片大小为473x473x3。
W
wuzewu 已提交
37 38 39



H
haoyuying 已提交
40
## 二、安装
W
wuzewu 已提交
41

H
haoyuying 已提交
42
- ### 1、环境依赖
W
wuzewu 已提交
43

H
haoyuying 已提交
44
  - paddlepaddle >= 2.0.0
W
wuzewu 已提交
45

H
haoyuying 已提交
46
  - paddlehub >= 2.0.0  
W
wuzewu 已提交
47

H
haoyuying 已提交
48
- ### 2.安装
W
wuzewu 已提交
49

H
haoyuying 已提交
50 51 52 53 54
    - ```shell
      $ hub install ace2p
      ```
    -  如您安装时遇到问题,可参考:[零基础windows安装](../../../../docs/docs_ch/get_start/windows_quickstart.md)
      | [零基础Linux安装](../../../../docs/docs_ch/get_start/linux_quickstart.md) | [零基础MacOS安装](../../../../docs/docs_ch/get_start/mac_quickstart.md)
W
wuzewu 已提交
55

H
haoyuying 已提交
56 57
## 三、模型API预测
  - ### 1、命令行预测
W
wuzewu 已提交
58

H
haoyuying 已提交
59
    ```shell
H
haoyuying 已提交
60
    $ hub run ace2p --input_path "/PATH/TO/IMAGE"
H
haoyuying 已提交
61
    ```
W
wuzewu 已提交
62

H
haoyuying 已提交
63
  - ### 2、预测代码示例
W
wuzewu 已提交
64

H
haoyuying 已提交
65 66 67
    ```python
    import paddlehub as hub
    import cv2
W
wuzewu 已提交
68

H
haoyuying 已提交
69 70 71 72
    human_parser = hub.Module(name="ace2p")
    result = human_parser.segmentation(images=[cv2.imread('/PATH/TO/IMAGE')])
    ```
  
H
haoyuying 已提交
73
  - ### 3、API
W
wuzewu 已提交
74

H
haoyuying 已提交
75 76 77 78 79 80 81 82
    ```python
    def segmentation(images=None,
                    paths=None,
                    batch_size=1,
                    use_gpu=False,
                    output_dir='ace2p_output',
                    visualization=False):
    ```
W
wuzewu 已提交
83

H
haoyuying 已提交
84
    - 预测API,用于图像分割得到人体解析。
W
wuzewu 已提交
85

H
haoyuying 已提交
86
    - **参数**
W
wuzewu 已提交
87

H
haoyuying 已提交
88 89 90 91 92 93
      * images (list\[numpy.ndarray\]): 图片数据,ndarray.shape 为 \[H, W, C\],BGR格式;
      * paths (list\[str\]): 图片的路径;
      * batch\_size (int): batch 的大小;
      * use\_gpu (bool): 是否使用 GPU;
      * output\_dir (str): 保存处理结果的文件目录;
      * visualization (bool): 是否将识别结果保存为图片文件。
W
wuzewu 已提交
94

H
haoyuying 已提交
95
    - **返回**
W
wuzewu 已提交
96

H
haoyuying 已提交
97 98 99 100 101 102 103 104 105 106
      * res (list\[dict\]): 识别结果的列表,列表中每一个元素为 dict,关键字有'path', 'data',相应的取值为:
          * path (str): 原输入图片的路径;
          * data (numpy.ndarray): 图像分割得到的结果,shape 为`H * W`,元素的取值为0-19,表示每个像素的分类结果,映射顺序与下面的调色板相同。

    ```python
    def save_inference_model(dirname,
                            model_filename=None,
                            params_filename=None,
                            combined=True)
    ```
W
wuzewu 已提交
107

H
haoyuying 已提交
108
    - 将模型保存到指定路径。
W
wuzewu 已提交
109

H
haoyuying 已提交
110
    - **参数**
W
wuzewu 已提交
111

H
haoyuying 已提交
112 113 114 115
      * dirname: 存在模型的目录名称
      * model\_filename: 模型文件名称,默认为\_\_model\_\_
      * params\_filename: 参数文件名称,默认为\_\_params\_\_(仅当`combined`为True时生效)
      * combined: 是否将参数保存到统一的一个文件中。
W
wuzewu 已提交
116 117


H
haoyuying 已提交
118
## 四、服务部署
W
wuzewu 已提交
119

H
haoyuying 已提交
120
- PaddleHub Serving可以部署一个人体解析的在线服务。
W
wuzewu 已提交
121

H
haoyuying 已提交
122
- ### 第一步:启动PaddleHub Serving
W
wuzewu 已提交
123

H
haoyuying 已提交
124 125 126 127 128
  - 运行启动命令:
  
    ```shell
     $ hub serving start -m ace2p
    ```
W
wuzewu 已提交
129

H
haoyuying 已提交
130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178
    - 这样就完成了一个人体解析服务化API的部署,默认端口号为8866。

    - **NOTE:** 如使用GPU预测,则需要在启动服务之前,请设置CUDA\_VISIBLE\_DEVICES环境变量,否则不用设置。

- ### 第二步:发送预测请求

  - 配置好服务端,以下数行代码即可实现发送预测请求,获取预测结果

      ```python
      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请求
      data = {'images':[cv2_to_base64(cv2.imread("/PATH/TO/IMAGE"))]}
      headers = {"Content-type": "application/json"}
      url = "http://127.0.0.1:8866/predict/ace2p"
      r = requests.post(url=url, headers=headers, data=json.dumps(data))

      # 打印预测结果
      print(base64_to_cv2(r.json()["results"][0]['data']))
      ```


## 五、更新历史

* 1.0.0

  初始发布

* 1.1.0

  适配paddlehub2.0版本