提示:最近开始在【图像分割】方面进行研究,记录相关知识点,分享学习中遇到的问题已经解决的方法。
f-BRS是由三星莫斯科人工智能中心的Konstantin Sofiiuk等人在《f-BRS: Rethinking Backpropagating Refinement for Interactive Segmentation [CVPR 2020]》【论文地址】一文中提出的模型,是一种新颖的反向传播优化方案,该方案可在网络的中间特征上运行,并且只需要对网络的一小部分进行正向和反向传递。
在详细解析f-BRS网络之前,首要任务是搭建f-BRS【Pytorch-demo地址】所需的运行环境,并模型完成训练和测试工作,展开后续工作才有意义。
在Windows10环境下装anaconda环境,方便搭建专用于f-BRS模型的虚拟环境,所有依赖包都安装在这个虚拟环境下。
# 创建虚拟环境
conda create -n fbrs python=3.7
# 查看新环境是否安装成功
conda env list
# 激活mivos虚拟环境
activate fbrs
【安装合适的pytorch和torchvision(GPU版)】 pytorch版本>1.4.0就可以。
# 安装合适的pytorch和torchvision
pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu117
python -m ensurepip
easy_install pip
python -m pip install --upgrade pip
下载源码,在requirements.txt所在目录下执行命令,安装所需的第三方包:
pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple -r requirements.txt
查看所有安装的包
# 查看所有安装的包
pip list
conda list
在 SBD 数据集上训练所有模型,然后在 GrabCut、Berkeley、DAVIS、SBD 和 COCO_MVal 数据集上对其进行评估。
数据集 | 描述 | 下载地址 |
---|---|---|
SBD | 8498张图像共20172个实例用于训练;2857张图像共6671个实例用于测试 | 百度网盘[p3rl] |
Grab Cut | 50 张图像,每张图像一个对象 | GrabCut.zip (11 MB) |
Berkeley | 96 张图片,100 个实例 | Berkeley.zip (7 MB) |
DAVIS | 345 张图片,每张图片有一个对象 | DAVIS.zip (43 MB) |
COCO_MVal | 800 个图像和800 个实例 | COCO_MVal.zip (127 MB) |
源码为交互方式拆分提供具有不同主干的训练模型。
Backbone | 训练集 | 下载地址 |
---|---|---|
ResNet-34 | SBD | resnet34_dh128_sbd.pth(89 MB) |
ResNet-50 | SBD | resnet50_dh128_sbd.pth(120 MB) |
ResNet-101 | SBD | resnet101_dh256_sbd.pth(223 MB) |
HRNetV2-W18+OCR | SBD | hrnet18_ocr64_sbd.pth(39 MB) |
HRNetV2-W32+OCR | SBD | hrnet32_ocr128_sbd.pth(119 MB) |
ResNet-50 | COCO+LVIS | resnet50_dh128_lvis.pth(120 MB) |
HRNetV2-W32+OCR | COCO+LVIS | hrnet32_ocr128_lvis.pth(119 MB) |
修改config.yml文件上数据集的存放位置和源代码的提供的权重存放位置。
这里博主提供的SBD数据集需要进一步解压data目录下的benchmark.tgz,然后再找到dataset文件夹,这才是训练f-BRS所需的SBD数据集。
# --gpu 序号 --limit-longest-size 图片大小(默认800) --cpu 仅用cpu
python3 demo.py --checkpoint=<模型存放地址>--gpu=0
# eg:python demo.py --checkpoint=weights/resnet34_dh128_sbd.pth --gpu=0 --limit-longest-size=400
# ResNet-34 model
# --gpus=0,1 多GPU --workers=4线程数 win下是0
python train.py models/sbd/r34_dh128.py --gpus=0 --workers=0 --exp-name=first-try
# ResNet-50 model
python train.py models/sbd/r50_dh128.py --gpus=0 --workers=0 --exp-name=first-try
# ResNet-101 model
python train.py models/sbd/r101_dh256.py --gpus=0 --workers=0 --exp-name=first-try
以r50_dh128为例进行训练,记的在trian.py里自己设置batch_size大小:
# HRNetV2-W18+OCR model
python train.py models/sbd/hrnet18_ocr64.py --gpus=0 --workers=0 --exp-name=first-try
# HRNetV2-W32+OCR model
python train.py models/sbd/hrnet32_ocr128.py --gpus=0 --workers=0 --exp-name=first-try
# HRNetV2-W48+OCR model
python train.py models/sbd/hrnet48_ocr128.py --gpus=0 --workers=0 --exp-name=first-try
以r50_dh128为例进行训练,记的在trian.py里自己设置batch_size大小:
以下是hrnet的预训练权重地址,并修改config.yml文件上预训练权重的存放地址。
Backbone | 训练集 | 下载地址 |
---|---|---|
HRNet-W18-C | ImageNet | 百度云[r5xn] |
HRNet-W32-C | ImageNet | 百度云[itc1] |
HRNet-W48-C | ImageNet | 百度云[68g2] |
resnet不需要单独下载在ImageNet数据集上训练好的预训练权重,是因为可以通过联网下载
博主使用源代码提供的模型权重
# --datasets:测试数据集,默认测试所有数据集 --checkpoint:模型权重
python scripts/evaluate_model.py --checkpoint=<checkpoint-name>
# evaluates ResNet-34 model
python scripts/evaluate_model.py f-BRS-B --checkpoint=resnet34_dh128_sbd
# ResNet-50 model
python scripts/evaluate_model.py RGB-BRS --checkpoint=resnet50_dh128_sbd --datasets=GrabCut,Berkeley
# ResNet-50 model
python scripts/evaluate_model.py RGB-BRS --checkpoint=resnet50_dh128_lvis --datasets=GrabCut,Berkeley
# ResNet-101 model
python scripts/evaluate_model.py DistMap-BRS --checkpoint=resnet101_dh256_sbd --datasets=DAVIS
# HRNetV2-W32+OCR model
python scripts/evaluate_model.py f-BRS-B --checkpoint=hrnet18_ocr64_sbd
# HRNetV2-W32+OCR model
python scripts/evaluate_model.py f-BRS-B --checkpoint=hrnet32_ocr128_sbd
# HRNetV2-W32+OCR model
python scripts/evaluate_model.py f-BRS-B --checkpoint=hrnet32_ocr128_lvis
以hrnet18_ocr64_sbd为例进行评估,测试所有数据集:
尽可能简单、详细的介绍f-BRS的安装流程以及解决了安装过程中可能存在的问题。后续会根据自己学到的知识结合个人理解讲解f-BRS的原理和代码。