【OpenMMLab】MMSegmentation 代码

AI权益加码!Claude Code、Cursor等20+工具免费用! 购周边限时加赠Coding Plan Lite,畅享主流AI工具!学习进阶更高效! 阅读详情

系列文章目录

第一课:【OpenMMLab】OpenMMLab概述
第二课:【OpenMMLab】人体姿态估计、关键点检测与MMPose
第三课:【openMMLab】MMPose 代码教程
第四课:【OpenMMLab】深度学习预训练与 MMPreTrain
第五课: 【OpenMMLab】MMPretrain 代码教程
第六课:【OpenMMLab】目标检测与MMDetection
第七课:【OpenMMLab】MMDetection 代码
第八课:【OpenMMLab】语义分割与MMSegmentation

MMSegmentation 语义分割算法库

MMSegmentation 是专门做图像分割,尤其是语义分割的算法库。在无人驾驶、遥感图像、医疗影响等领域,语义分割都是非常重要的算法。算法库内容非常丰富,包括 600+ 个预训练模型和 40+ 篇算法复现。
子豪兄视频教程地址:https://www.bilibili.com/video/BV1uh411T73q
代码教程地址:https://github.com/TommyZihao/MMSegmentation_Tutorials
算法库地址:https://github.com/open-mmlab/mmsegmentation

安装配置

安装pytorch

# torch 版本 1.10.1 cuda 版本 11.3
pip3 install install torch==1.10.1+cu113 torchvision==0.11.2+cu113 torchaudio==0.10.1+cu113 -f https://download.pytorch.org/whl/cu113/torch_stable.html

安装 MMCV

pip install -U openmim
mim install mmengine
mim install "mmcv==2.0.0rc4"

安装其他工具包

包括 cv2: opencv-python, pillow, matplotlib, seaborn, tqdm, pytorch-lightning, mmdet

pip install opencv-python pillow matplotlib seaborn tqdm pytorch-lightning 'mmdet>=3.0.0rc1' -i https://pypi.tuna.tsinghua.edu.cn/simple

下载和安装MMSegmentation

git clone https://github.com/open-mmlab/mmsegmentation.git -b dev-1.x
cd mmsegmentation
pip install -e .

准备工作

  1. 准备文件夹
  • data:存放自己的数据
  • outputs:存放模型的输出结果
  • checkpoint:存放模型权重
mkdir data outputs checkpoint
  1. 下载预训练权重

Model Zoo:https://github.com/open-mmlab/mmsegmentation/blob/master/docs/en/model_zoo.md

# pspnet cityscapes 的模型权重
wget https://download.openmmlab.com/mmsegmentation/v0.5/pspnet/pspnet_r50-d8_512x1024_40k_cityscapes/pspnet_r50-d8_512x1024_40k_cityscapes_20200605_003338-2966598c.pth -P checkpoint
  1. 下载素材
# 伦敦街景图片
!wget https://zihao-openmmlab.obs.cn-east-3.myhuaweicloud.com/20220713-mmdetection/images/street_uk.jpeg -P data

# 上海驾车街景视频,视频来源:https://www.youtube.com/watch?v=ll8TgCZ0plk
!wget https://zihao-download.obs.cn-east-3.myhuaweicloud.com/detectron2/traffic.mp4 -P data

# 街拍视频,2022年3月30日
!wget https://zihao-openmmlab.obs.cn-east-3.myhuaweicloud.com/20220713-mmdetection/images/street_20220330_174028.mp4 -P data

检查安装

  1. 检查pytorch
import torch
print(torch.__version__)
print(torch.cuda.is_available())
  1. 检查mmcv,cuda 和 编译器版本
import mmcv
from mmcv.ops import get_compiling_cuda_version, get_compiler_version
print("mmcv 版本:", mmcv.__version__)
print("CUDA 版本:", get_compiling_cuda_version())
print("GCC 版本:", get_compiler_version()) 
  1. 检查 mmsegmentation 版本
import mmseg
from mmseg.utils import register_all_modules
from mmseg.apis import inference_model, init_model
print("mmsegmentation 版本": mmseg.__version__)

使用命令行进行预测和可视化

使用 demo/image_demo.py 对图像预测

python demo/image_demo.py \
	img \
	config \
	checkpoint \
	--out-dir outputs \
	--device cuda:0
	--opacity 0.5

使用 demo/video_demo.py 对视频进行预测

python demo/video_demo.py \
	video \
	config \
	checkpoint \
	--device cuda:0 \
	--output-file outputs/b3_video.mp4 \
	--opacity 0.5

使用 Python API 预测

import torch.cuda

from mmseg.apis import init_model, inference_model
from mmseg.datasets import cityscapes
from mmengine.model.utils import revert_sync_batchnorm
from mmengine import ProgressBar
import mmcv
from PIL import Image
import numpy as np
import shutil
import time
import os


def predict_single_frame(model, img, palette, opacity=0.2):
    result = inference_model(model, img)

    seg_map = np.array(result.pred_sem_seg.data[0].detach().cpu().numpy()).astype('uint8')
    seg_map = Image.fromarray(seg_map).convert("P")
    seg_map.putpalette(np.array(palette, dtype="uint8"))

    show_img = np.array(seg_map.convert("RGB")) * (1 - opacity) + img * opacity

    return show_img


def predict_video(model, video_path, palette, temp_dir=None, out_file=None):
    imgs = mmcv.VideoReader(video_path)
    pgb = ProgressBar(len(imgs))
    out_dir = os.path.dirname(out_file)
    if temp_dir is None:
        temp_dir = os.path.join(out_dir, "temp_dir")
        assert not os.path.exists(temp_dir), "please clarity the temp_dir"
        os.makedirs(temp_dir)

    for frame_id, img in enumerate(imgs):
        show_img = predict_single_frame(model, img, palette)
        out_frame = f"{temp_dir}/{frame_id:06d}.jpg"
        mmcv.imwrite(show_img, out_frame)

        pgb.update()

    mmcv.frames2video(temp_dir, out_file, fps=imgs.fps, fourcc="mp4v")

    shutil.rmtree(temp_dir)
    print(f"删除临时文件夹{temp_dir}")


if __name__ == '__main__':
    config_path = os.environ["CONFIG"]
    checkpoint = os.environ["CKPT"]
    video_path = os.environ["VIDEO"]

    model = init_model(config_path, checkpoint, device="cuda:0")
    if not torch.cuda.is_available():
        model = revert_sync_batchnorm(model)

    # 从cityscapes 获取类别和类别可视化颜色
    classes = cityscapes.CityscapesDataset.METAINFO["classes"]
    palette = cityscapes.CityscapesDataset.METAINFO["palette"]

    time_ = time.strftime("%Y%m%d%H%M%S")
    predict_video(model, video_path, palette=palette, out_file=os.path.join("outputs", time_, "out_video.mp4"))
利用开源算法OpenMMLab平台的MMsegmentation库进行语义分割之预训练语义分割 在B站博主同济子豪兄的关于利用MMsegmentation开源代码库进行语义分割的视频中介绍了从数据集的制作、训练自己的网络再到部署网络的全过程,但相信可能包括我在内的一些非计算机专业学生大概率用不到最后的部署环节,所以本文仅对前两个环节中的关键点,容易忽略的地方,在自己复现时候需要注意修改的地方进行简单的总结回顾!利用预训练的模型进行分割结果的预测属于迁移学习的范畴,由于在一些领域的数据集数量与质量无法达到要求,研究人员本身也并不从事算法研究,导致若从随机初始化开始训练模型的过程变得异常的困难与低效。 阅读详情

相关推荐

Day9:MMSegmentation代码

下载整理好的数据集;可视化探索数据集;准备config配置文件;MMSef训练语义分割模型;可视化训练日志;用训练得到的模型预测;测试集性能评估;

qq_64392587的博客 480

MMSegmentation 代码实践——OpenMMLab第七讲

MMSegmentation代码实践

jinglingsheshou的博客 889

OpenMMLab AI实战十——MMSegmentation代码

环境配置及安装教程详见。

weixin_46810530的博客 425

OpenMMLab】打卡笔记7 -- MMSegmentation介绍 & 代码实践

MMSegmentation简介及项目结构、MMSegmentation代码实践:1. 配置环境;2. 创建数据集;3. 编写配置文件;4. 模型训练。

weixin_44206632的博客 936

OpenMMLab 实战营打卡-第7课】MMSegmentation代码教学

Kaggle小鼠肾小球切片语义分割

ALittleBoy的博客 1000

OpenMMLab-9-MMSegmentation代码

仓库地址:https://github.com/TommyZihao/MMSegmentation_Tutorials/tree/main/20230612。基于jupyter-notebook,学习MMSegmentation怎么用。

sinat_29552897的博客 435

OpenMMLab AI实战营二期笔记】第九天 MMSegmentation代码

下载整理好的数据集;可视化探索数据集;准备config配置文件;MMSef训练语义分割模型;可视化训练日志;用训练得到的模型预测;测试集性能评估;

qq_41776136的博客 866

OpenMMLab-AI实战营第二期——5-2. MMSegmentation代码

视频链接:

啷个哩个啷 967

OpenMMLab AI实战训练营day9MMsegmentation代码实战

注册数据集类 自定义config文件 训练 调用api进行训练

lgwwslgw的博客 265

OpenMMLab AI实战营 第7课 MMSegmentation代码教学

第7课 MMSegmentation代码教学

小毛激励我好好学习的博客 297

OpenMMLab】AI实战营第二期Day9:MMSegmentation代码

本视频介绍了使用OpenIMLab的语义分割算法库MMSegmentation进行图像语义分割的方法。

墨门 517

OpenMMLab AI实战训练营 学习笔记DAY(七)-- MMSegmentation框架介绍及代码讲解】

AI实战营第七课!语义分割是目标检测和图像分类的进阶工作,它在像素级别给图像内容做标注,把图片中不同的物体分割开。同济子豪兄会带大家学习语义分割工具箱 MMSegmentation

LL_RF的博客 625

OpenMMLab系列安装教程

OpenMMLab系列安装教程(持续更新)

qq_45402302的博客 1242

open-mmlab (segmentation) 开源框架

最早一直想把mmdetection吃掉,但是一只拖延没有搞定,趁着最近休息,从mmsegmentation切入,记录一下学习过程。算了,先记录CVPR2021-SETR的code(https://github.com/fudan-zvg/SETR)吧,他这个是基于老版本的mmsegmetation的主要模块开发的,后续官方有少量变化或未用到的再补充。 1 overview 先上代码结构,主要使用时用到mmseg,tools,configs。 注:mmcv是应该装到本地的,是mm系列的基础库。但是我看代

Eric_Evil的博客 4926

初识OpenMMLab

此前一直用pytorch进行深度学习代码实战,最近才听说有个开源框架openmmlab,其实也不是很了解能做什么,估计就是能够简化深度学习项目的代码实现,但是该具体怎么做,还不是太清楚。

liurui666666的专栏 121

OpenMMLab-AI实战营第二期——4-2.MMDetection代码

MMDetection 支持了各种不同的检测任务,包括目标检测,实例分割,全景分割,以及半监督目标检测。检测是分割的基础,所以它也包含了很多分割任务,和MMSegmentation的区别是:目前,支持的分割任务为语义分割中支持了实例分割和全景分割。超详细!带你轻松掌握 MMSegmentation 整体构建流程语义分割的应用:①自动驾驶;②遥感图像分析;③医学图像分析。所以可以理解为专门为了这三个垂直方向把语义分割方向的模型单独列出来了这个库主要是面向3D的,感觉重点在点云数据上,

啷个哩个啷 2111

上新啦!OpenMMLab全面更新!

本文转载自知乎,已获原作者授权,请勿二次转载。https://zhuanlan.zhihu.com/p/2691184290/关于OpenMMLab为了帮助更多的同学在复现上少走弯路...

我爱计算机视觉 1419

30分钟快速上手MMSegmentation:从零开始构建语义分割模型

MMSegmentationOpenMMLab推出的专业语义分割工具箱,为开发者提供了从模型训练到部署的完整解决方案。无论你是计算机视觉新手还是经验丰富的研究者,这个强大的工具都能帮助你快速实现高质量的图像分割任务。 ## 项目价值定位:为什么需要专业的语义分割工具? 在计算机视觉领域,语义分割是理解图像内容的核心技术之一。它不仅要识别图像中的物体,还要精确地标注每个像素属于哪个类别。传统的

gitblog_00537的博客 847
上一篇: 【OpenMMLab】语义分割与MMSegmentation
下一篇: 【OpenMMLab】底层视觉与MMEditing
Donny0v0
博客等级 码龄8年 78粉丝 15原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值