Task2:利用 Basnet 将Task1中的所有图片转化为显著性图片
1. 什么是显著性检测?
显著性检测的目的是识别图像中最吸引人注意的区域(显著性区域)。对于你的任务,就是将普通图片转换为突出主要对象的显著性图。
输入:普通图片 → 输出:显著性热力图(黑白或彩色)
2. BASNet 简介
BASNet (Boundary-Aware Salient Object Detection) 是一个先进的显著性检测模型:
- 优点:边缘保持好,细节丰富
- 适用性:适用于各种类型的图像
- 预训练模型:已有在大型数据集上训练好的模型
3.具体操作
代码链接:https://github.com/NathanUA/BASNet.
这里我把BASNet文件下载下来放在D盘,然后我在Anaconda Prompt中创建虚拟环境,先用/d D:\MyJupyter\TASK\BASNet转到BASNet目录下,采用conda activate basnet命令创建besnet虚拟环境,然后打开jupyter notebook
我的网络无法正常访问 PyPI 官方服务器(pypi.org
),SSL 证书验证失败。
在虚拟环境中使用国内镜像源来安装:
pip install numpy scikit-image torch torchvision pillow -i https://pypi.tuna.tsinghua.edu.cn/simple --trusted-host pypi.tuna.tsinghua.edu.cn
这个错误是输出目录不存在导致的。程序试图保存结果图片,但是指定的目录路径不存在。经过检查是save_output函数有问题
def save_output(image_name, pred, d_dir):predict = predpredict = predict.squeeze()predict_np = predict.cpu().data.numpy()im = Image.fromarray(predict_np*255).convert('RGB')# 读取原始图像获取尺寸original_image = io.imread(image_name)# 调整到原始图像尺寸imo = im.resize((original_image.shape[1], original_image.shape[0]), resample=Image.BILINEAR)# 创建输出目录(如果不存在)os.makedirs(d_dir, exist_ok=True)# 提取纯文件名(不带路径)img_basename = os.path.basename(image_name)output_filename = os.path.splitext(img_basename)[0] + '.png'# 保存文件output_path = os.path.join(d_dir, output_filename)imo.save(output_path)print(f"Saved: {output_path}")
将原本的代码改成如上。
接下来直接在jupyter中运行BASNet_test.ipynb(在BASNet/demo/中 ),直接运行第五个单元格。
可以在test_images中添加自己的图片,进行测试。