Hugging Face VisualBERT演示Notebook如何使用本地自定义图片
本地图片传入VisualBERT预处理模块的实现方案
该需求完全可以实现,官方提供的Preprocess模块本身就兼容非URL的输入类型,不需要修改Faster R-CNN特征提取的后续逻辑,只要调整传入预处理的参数即可,具体有两种常用实现方式:
方案一:直接传入本地图片路径(最推荐)
Preprocess类的调用入口原生支持本地文件路径输入,和传入在线URL的用法完全一致,不需要额外编写图像读取代码,是最稳定的实现方式。
Colab环境下上传的文件默认存储在/content/目录下,直接传入图片的绝对路径即可:
# 替换为你上传的图片实际路径,可通过!ls /content命令确认文件名 LOCAL_IMG_PATH = "/content/your_custom_image.jpg" frcnn_cfg = Config.from_pretrained("unc-nlp/frcnn-vg-finetuned") frcnn = GeneralizedRCNN.from_pretrained("unc-nlp/frcnn-vg-finetuned", config=frcnn_cfg) image_preprocess = Preprocess(frcnn_cfg) images, sizes, scales_yx = image_preprocess(LOCAL_IMG_PATH) output_dict = frcnn( images, sizes, scales_yx=scales_yx, padding="max_detections", max_detections=frcnn_cfg.max_detections, return_tensors="pt", )
方案二:传入已读取到内存的图像对象
如果你已经提前将图片读取为内存中的图像对象,只要符合输入格式要求,也可以直接传入Preprocess,支持的内存对象格式包括:
- PIL Image对象:需要先调用
.convert("RGB")强制转为三通道,避免带透明通道的PNG图片报错,预处理模块会自动完成通道顺序转换、缩放等操作 - BGR格式的numpy数组:要求dtype为
uint8,shape为(图像高度, 图像宽度, 3),和OpenCV默认读取的图像格式完全匹配
以PIL读取图像为例,实现代码如下:
from PIL import Image # 读取本地图片为PIL对象 img = Image.open("/content/your_custom_image.jpg").convert("RGB") frcnn_cfg = Config.from_pretrained("unc-nlp/frcnn-vg-finetuned") frcnn = GeneralizedRCNN.from_pretrained("unc-nlp/frcnn-vg-finetuned", config=frcnn_cfg) image_preprocess = Preprocess(frcnn_cfg) images, sizes, scales_yx = image_preprocess(img) output_dict = frcnn( images, sizes, scales_yx=scales_yx, padding="max_detections", max_detections=frcnn_cfg.max_detections, return_tensors="pt", )
注意事项
- 不要传入PyTorch张量格式的图像给
Preprocess模块,该模块不支持张量输入,会直接报错 - 如果传入numpy数组,不要手动调整通道顺序为RGB,必须保持BGR顺序,否则提取的视觉特征会出现偏差,导致推理结果错误
- 如果遇到路径不存在的报错,可在Colab中执行
!ls /content命令,确认上传图片的实际文件名和路径
内容的提问来源于stack exchange,提问作者lazytux
相关产品推荐
相关产品推荐

