☰
PaddleHub 看图写诗(reading_pictures_writing_poems)模型实战指南:图像分类驱动的古诗词自动生成
2026/9/25 2:48:51 网站建设 项目流程
  • 人工智能
  • 大模型
  • 微调
  • 模型推理服务

【免费下载链接】PaddleFormers

PaddleFormers is an easy-to-use library of pre-trained large language model zoo based on PaddlePaddle.

项目地址:https://gitcode.com/gh_mirrors/pa/PaddleFormers
点击查看免费下载

导读

reading_pictures_writing_poems是 PaddleFormers 仓库中基于 PaddleHub 构建的文本生成类模块,能够"看图写诗"——输入一张图片,自动输出一首古诗词。本指南以该模块的官方文档为主体,结合仓库内 module.py 源码,完整讲解模型基本信息、多网络级联的工作原理、环境依赖与安装步骤、命令行与 Python API 两种预测方式,以及参数细节与更新历史,帮助读者快速上手并理解其底层调用链。


一、模型基本信息

模型名称reading_pictures_writing_poems
类别文本-文本生成
网络多网络级联
数据集-
是否支持 Fine-tuning否
模型大小3.16K
最新更新日期2021-04-26
数据指标-

从基本信息表可以看出,该模块本质上是多个 PaddleHub 预训练模型的级联编排(多网络级联),自身不携带完整网络权重,因此模型大小仅 3.16K,且不支持 Fine-tuning,仅用于预测推理。

模型介绍

看图写诗(reading_pictures_writing_poems)模型可自动根据图像生成古诗词,该 PaddleHub Module 支持预测。官方文档给出的运行效果示例如下:输入一张风景图片,模型生成的古诗为:

  • 蕾蕾海河海,岳峰岳麓蔓。
  • 不萌枝上春,自结心中线。

二、工作原理:多网络级联的生成链路

要真正理解该模块,需要先看清其内部调用关系。虽然官方文档将"网络"标注为"多网络级联",但并未展开细节,这里从仓库源码 module.py 出发还原完整链路。

2.1 级联的三个子模型

模块在__init__中初始化了三个 PaddleHub 子模块(见 module.py):

模块属性实际加载的子模型作用
module_imageefficientnetb4_imagenet图像分类,识别图片内容
module_similarernie_gen_couplet对联生成,为古诗提供近义词语料
module_poemernie_gen_poetry古诗生成,产出完整诗篇

需要特别说明:官方文档 readme.md 中写的是依赖xception71_imagenet、ernie_gen_couplet、ernie_gen_poetry这 3 个模型,但从当前仓库的源码结构看,module.py第 24 行实际加载的是efficientnetb4_imagenet(对应仓库目录 modules/image/classification/efficientnetb4_imagenet)。结合 1.1.0 版本更新说明中"更换分类模型"的描述可以推断,文档正文可能未随 1.1.0 版本同步更新,实际以源码为准。若本地未安装这 3 个子模型,代码运行时会自动下载。

2.2 WritingPoem 的四步生成流水线

WritingPoem方法的完整流程(module.py)如下:

  1. 图像分类:调用module_image.classification(paths=[image]),取分类结果中得分最高的类别PictureClassification。
  2. 类别翻译:使用translate库的Translator(to_lang="chinese")将英文类别名翻译为中文,作为后续生成的关键词。
  3. 近义词生成:将中文类别作为文本,调用module_similar.generate(texts=texts, use_gpu=use_gpu, beam_width=20)生成 20 条候选对联/近义词;再通过is_chinese方法过滤,仅保留"全为中文且长度大于 1"的字符串,存入Words列表。
  4. 古诗组装与续写:
    • 取前 8 个合法词语两两拼接为FirstWord~FourthWord,进而组成出句ChuJu(上句)和对句DuiJu(下句);
    • 用"{:.5},{:.5}。"的格式约束上下句各取 5 个字符,得到上阕FirstPoetry;
    • 调用module_poem.generate(texts=FirstPoetry, use_gpu=use_gpu, beam_width=5)续写下阕,并用"{:.12}"截取 12 个字符;
    • 最终合并上阕与下阕,返回结构化结果。

is_chinese校验逻辑(module.py)通过 Unicode 区间\u4e00~\u9fff逐一判断字符,并剔除长度小于等于 1 的字符串,确保拼接出的诗句均为纯中文词语。

2.3 底层古诗生成实现

级联链路的最后一环ernie_gen_poetry对应仓库 modules/text/text_generation/ernie_gen_poetry,其generate接口(module.py)展示了更多实现细节:

  • 加载ErnieForGeneration.from_pretrained("ernie-1.0"),并用本地微调权重ernie_gen_poetry.pdparams覆盖模型参数;
  • 使用ErnieTokenizer编码输入文本,通过beam_search_infilling(decode.py)执行束搜索填充式生成,关键解码参数包括max_decode_len=80、max_encode_len=20、beam_width(默认 5)、tgt_type_id=1;
  • 输入校验会对"缺少逗号句号""上下句不对仗""含非中文字符"的文本给出告警,提示可能产生不符合预期的输出——这也解释了为什么看图写诗模块要精心拼装出对仗工整的 5 字上阕再交给该模型续写。

三、环境依赖与安装

3.1 环境依赖

官方文档要求的依赖如下:

  • paddlepaddle >= 1.8.2
  • paddlehub >= 1.8.0,安装方法可参考 PaddleHub 安装文档
  • translate(用于将图像分类结果翻译为中文):
$ pip install translate

仓库内 requirements.txt 内容为translate,与文档描述一致,可一键安装:

$ pip install -r modules/text/text_generation/reading_pictures_writing_poems/requirements.txt

3.2 安装模块

$ hub install reading_pictures_writing_poems

安装说明:

  • 本模型运行还需要用到efficientnetb4_imagenet(源码实际引用)、ernie_gen_couplet、ernie_gen_poetry这 3 个模型(依赖清单以 module.py 源码为准);
  • 若未预先安装这 3 个模型,代码运行时会自动下载;
  • 如安装遇到问题,可参考仓库内的零基础安装指南:Windows 安装、Linux 安装、MacOS 安装。

四、模型 API 预测

4.1 命令行预测

安装完成后,可通过hub run直接对图片进行看图写诗:

$ hub run reading_pictures_writing_poems --input_image "/PATH/TO/IMAGE"

命令行参数在源码 module.py 中定义:

  • --input_image:必选输入参数,类型str,为待检测图片的路径;若文件不存在会抛出RuntimeError("File %s is not exist.");
  • --use_gpu:可选配置参数,类型经ast.literal_eval解析(即支持传入True/False),默认False,用于控制是否使用 GPU 推理。

4.2 预测代码示例

import paddlehub as hub readingPicturesWritingPoems = hub.Module(name="reading_pictures_writing_poems") results = readingPicturesWritingPoems.WritingPoem(image="/PATH/TO/IMAGE", use_gpu=False) for result in results: print(result)

代码要点:

  • 通过hub.Module(name="reading_pictures_writing_poems")加载模块;
  • 调用WritingPoem(image=..., use_gpu=...)完成一次预测;
  • 返回结果为列表,逐条打印即可看到生成的古诗词。

4.3 API 详解

def WritingPoem(image, use_gpu=False):

看图写诗预测接口,输入一张图像,输出一首古诗词。

参数

参数类型说明
imagestr待检测的图片路径
use_gpubool是否使用 GPU 进行预测,默认False

返回

  • results(list[dict]):识别结果的列表,列表中每一个元素为 dict,包含以下关键字:
    • image:原输入图片的路径;
    • poetry:输出的古诗词文本。

从源码 module.py 可以看到,最终返回值形如:

[{'image': '/PATH/TO/IMAGE', 'poetry': '上阕五言两句,下阕续写十二字'}]

五、服务部署说明

官方文档明确指出:本模型不支持 hub serving 部署。原因可以从模型架构推断——WritingPoem内部依赖translate库的在线翻译服务以及三个级联子模型,生成流程包含外部服务调用与多步文本处理,无法被 PaddleHub Serving 的标准服务化流程直接封装。因此如需将其集成到线上服务,只能在自己的应用代码中按上文示例调用。


六、更新历史

  • 1.0.0:初始发布。
  • 1.1.0:移除 Fluid API,更换分类模型(从源码看,图像分类模型已更换为efficientnetb4_imagenet;模块版本号在 module.py 的@moduleinfo中登记为1.1.0,作者为 Mr.郑先生_)。

注意:官方文档更新历史一节末尾附带的安装命令疑似为笔误(hub install porn_detection_lstm==1.1.0与看图写诗模块无关),实际安装请以第二节中的hub install reading_pictures_writing_poems为准。


七、实践要点总结

  1. 级联思想:看图写诗不是一个端到端大模型,而是"图像分类 → 类别翻译 → 对联近义词生成 → 古诗续写"四条子链路的编排,理解 module.py 的调用顺序是二次开发的关键;
  2. 依赖完整性:首次运行前确保已安装translate库以及efficientnetb4_imagenet、ernie_gen_couplet、ernie_gen_poetry三个子模型,缺失时 PaddleHub 会尝试自动下载;
  3. 文本质量约束:底层ernie_gen_poetry对输入文本的对仗性与中文纯净度敏感(见 ernie_gen_poetry/module.py 的告警逻辑),这也是模块源码用is_chinese过滤、用固定格式拼装上阕的原因;
  4. 部署边界:该模块不支持 hub serving,需要在线服务时应在自身应用中调用 Python API 自行封装。
  • 人工智能
  • 大模型
  • 微调
  • 模型推理服务

【免费下载链接】PaddleFormers

PaddleFormers is an easy-to-use library of pre-trained large language model zoo based on PaddlePaddle.

项目地址:https://gitcode.com/gh_mirrors/pa/PaddleFormers
点击查看免费下载

相关推荐

上一篇:拯救你的命令行效率:PowerShell中CTRL+Backspace的终极优化指南
下一篇:Remmina远程桌面客户端技术文档

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询