AI计算机视觉笔记十七:实例分割

简介: 本文介绍了计算机视觉中的实例分割技术,通过结合目标检测和语义分割的方法,实现对图像中不同实例的精确区分与标记。以识别多只猫为例,详细描述了使用Mask R-CNN模型进行实例分割的过程,并提供了相关代码及环境搭建指南。通过实例演示,展示了如何利用该技术成功识别并分割出图像中的各个对象。

一、介绍

计算机视觉分为四大基本任务(分类、定位、检测、分割)。而这里了解了一下实例分割。

实例分割:机器自动从图像中用目标检测方法框出不同实例,再用语义分割方法在不同实例区域内进行逐像素标记

借一个浅显的说法:语义分割不区分属于相同类别的不同实例。例如,当图像中有多只猫时,语义分割会将两只猫整体的所有像素预测为“猫”这个类别。与此不同的是,实例分割需要区分出哪些像素属于第一只猫、哪些像素属于第二只猫。

这里以猫为例,基本思路:目标检测+语义分割。

通过目标检测,先检测到猫,然后在用语义分割,就可以实现把猫区分出来,最终达到下图效果
image.png

二、实现过程

实现使用的是Mask R-CNN,Mask R-CNN用于目标检测和分割

地址:

GitHub - matterport/Mask_RCNN:Mask R-CNN,用于 Keras 和 TensorFlow 上的对象检测和实例分割

也可以自己训练数据集,训练方法文档有详细教程。

这是使用是基于mask rcnn训练好的coco数据集的权重mask_rcnn_coco.h5模型。

mask_rcnn_coco.h5:下载链接如下:
链接:https://pan.baidu.com/s/1k0IhAh-H8HYsKl7t9C6jAQ 
提取码:bu1r 
--来自百度网盘超级会员V4的分享

1、下载源码

Releases · matterport/Mask_RCNN · GitHub
image.png
下载后解压,并下载模型,在源码下新建目录weighs存放模型,结构如下:
image.png

三、创建环境

这是使用的是pixellib,安装使用方法:https://pixellib.readthedocs.io/en/latest/index.html

image.png
根据上面创建环境

1、创建虚拟机

conda create -n danmu python==3.8

2、安装

所需要安装的

# TensorFlow
# Windows:pip3 install tensorflow==2.2.0  (最新版的2.8可能会报错)
# macOS:conda install -c conda-forge tensorflow

# pip3 install imgaug
# pip3 install pixellib --upgrade
# conda install -c conda-forge jupyterlab
pip install tensorflow==2.2.0 -i https://pypi.tuna.tsinghua.edu.cn/simple
pip install imgaug -i https://pypi.tuna.tsinghua.edu.cn/simple
pip install pixellib --upgrade -i https://pypi.tuna.tsinghua.edu.cn/simple
pip install 'protobuf~=3.19.0' -i https://pypi.tuna.tsinghua.edu.cn/simple
pip install numpy==1.23.4 -i https://pypi.tuna.tsinghua.edu.cn/simple
conda install -c conda-forge jupyterlab
jupyter lab

到此,环境搭建完成。接下来是编写一个简单的代码测试一下。

四、代码

功能不是很复杂,基本看得懂,所以直接上代码。

这里注意target_classes = segment_frame.select_target_classes(cat=True),选择的类别是猫,模型也有其他的,可以自行修改。

import cv2
import numpy as np
import matplotlib.pyplot as plt
import pixellib
from pixellib.instance import instance_segmentation


class Segment_Video:
    def __init__(self):
        pass

    def segment_det(self):
        # 实例化
        segment_frame = instance_segmentation()
        segment_frame.load_model("weights/mask_rcnn_coco.h5")

        # 选择类别
        target_classes = segment_frame.select_target_classes(cat=True)

        # 摄像头
        #cap = cv2.VideoCapture(0)
        cap = cv2.VideoCapture('./videos/video_cat.mp4')

        # 获取视频宽度与高度
        frame_w = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH))
        frame_h = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))
        # 获取帧率
        fps = int(cap.get(cv2.CAP_PROP_FPS))

        # 构建视频写入器
        video_name = './out_video/out_video_cat.mp4'
        video_writer = cv2.VideoWriter(video_name, cv2.VideoWriter_fourcc(*'mp4v'), fps, (frame_w, frame_h))

        frame_index = 0

        while True:
            ret, frame = cap.read()
            if frame is None:
                break

            frame = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)

            # 分割
            results, output = segment_frame.segmentFrame(frame, segment_target_classes=target_classes, show_bboxes=True)

            output = cv2.cvtColor(output, cv2.COLOR_RGB2BGR)

            cv2.imshow('test?', output)

            video_writer.write(output)

            frame_index += 1
            print('第%d帧处理完毕' % (frame_index))

            if cv2.waitKey(10) & 0xFF == ord('q'):
                break

        cap.release()
        cv2.destroyAllWindows()

demo = Segment_Video()
demo.segment_det()

运行结束后,在保存成一个视频。效果如下,基本可以识别出猫,并分割出来。
image.png

相关文章
|
30天前
|
存储 机器学习/深度学习 人工智能
昇腾AI行业案例(六):基于 PraNet 的医疗影像分割
欢迎学习《基于 PraNet 的医疗影像分割》实验。在本实验中,你将深入了解如何运用计算机视觉(CV)领域的 AI 模型,搭建一个高效精准的医疗影像分割系统,专注于息肉分割任务,并利用开源数据集对模型效果加以验证。
32 1
|
2月前
|
机器学习/深度学习 存储 人工智能
EfficientTAM:Meta AI推出的视频对象分割和跟踪模型
EfficientTAM是Meta AI推出的轻量级视频对象分割和跟踪模型,旨在解决SAM 2模型在移动设备上部署时的高计算复杂度问题。该模型采用非层次化Vision Transformer(ViT)作为图像编码器,并引入高效记忆模块,以降低计算复杂度,同时保持高质量的分割结果。EfficientTAM在多个视频分割基准测试中表现出与SAM 2相当的性能,具有更快的处理速度和更少的参数,特别适用于移动设备上的视频对象分割应用。
78 9
EfficientTAM:Meta AI推出的视频对象分割和跟踪模型
|
2月前
|
人工智能 自然语言处理 搜索推荐
Open Notebook:开源 AI 笔记工具,支持多种文件格式,自动转播客和生成总结,集成搜索引擎等功能
Open Notebook 是一款开源的 AI 笔记工具,支持多格式笔记管理,并能自动将笔记转换为博客或播客,适用于学术研究、教育、企业知识管理等多个场景。
203 0
Open Notebook:开源 AI 笔记工具,支持多种文件格式,自动转播客和生成总结,集成搜索引擎等功能
|
2月前
|
人工智能 安全 图形学
【AI落地应用实战】篡改检测技术前沿探索——从基于检测分割到大模型
在数字化洪流席卷全球的当下,视觉内容已成为信息交流与传播的核心媒介,然而,随着PS技术和AIGC技术的飞速发展,图像篡改给视觉内容安全带来了前所未有的挑战。 本文将探讨篡改检测技术的现实挑战,分享篡改检测技术前沿和最新应用成果。
|
5月前
|
机器学习/深度学习 人工智能 PyTorch
AI计算机视觉笔记三十二:LPRNet车牌识别
LPRNet是一种基于Pytorch的高性能、轻量级车牌识别框架,适用于中国及其他国家的车牌识别。该网络无需对字符进行预分割,采用端到端的轻量化设计,结合了squeezenet和inception的思想。其创新点在于去除了RNN,仅使用CNN与CTC Loss,并通过特定的卷积模块提取上下文信息。环境配置包括使用CPU开发板和Autodl训练环境。训练和测试过程需搭建虚拟环境并安装相关依赖,执行训练和测试脚本时可能遇到若干错误,需相应调整代码以确保正确运行。使用官方模型可获得较高的识别准确率,自行训练时建议增加训练轮数以提升效果。
|
5月前
|
人工智能 开发工具 计算机视觉
AI计算机视觉笔记三十:yolov8_obb旋转框训练
本文介绍了如何使用AUTODL环境搭建YOLOv8-obb的训练流程。首先创建虚拟环境并激活,然后通过指定清华源安装ultralytics库。接着下载YOLOv8源码,并使用指定命令开始训练,过程中可能会下载yolov8n.pt文件。训练完成后,可使用相应命令进行预测测试。
|
5月前
|
人工智能 并行计算 测试技术
AI计算机视觉笔记三十一:基于UNetMultiLane的多车道线等识别
该项目基于开源数据集 VIL100 实现了 UNetMultiLane,用于多车道线及车道线类型的识别。数据集中标注了六个车道的车道线及其类型。项目详细记录了从环境搭建到模型训练与测试的全过程,并提供了在 CPU 上进行训练和 ONNX 转换的代码示例。训练过程约需 4 小时完成 50 个 epoch。此外,还实现了视频检测功能,可在视频中实时识别车道线及其类型。
|
28天前
|
人工智能 算法 前端开发
OmAgent:轻松构建在终端设备上运行的 AI 应用,赋能手机、穿戴设备、摄像头等多种设备
OmAgent 是 Om AI 与浙江大学联合开源的多模态语言代理框架,支持多设备连接、高效模型集成,助力开发者快速构建复杂的多模态代理应用。
189 72
OmAgent:轻松构建在终端设备上运行的 AI 应用,赋能手机、穿戴设备、摄像头等多种设备
|
14天前
|
人工智能 自然语言处理 搜索推荐
【上篇】-分两篇步骤介绍-如何用topview生成和自定义数字人-关于AI的使用和应用-如何生成数字人-优雅草卓伊凡-如何生成AI数字人
【上篇】-分两篇步骤介绍-如何用topview生成和自定义数字人-关于AI的使用和应用-如何生成数字人-优雅草卓伊凡-如何生成AI数字人
89 24
【上篇】-分两篇步骤介绍-如何用topview生成和自定义数字人-关于AI的使用和应用-如何生成数字人-优雅草卓伊凡-如何生成AI数字人
|
9天前
|
机器学习/深度学习 存储 人工智能
MNN-LLM App:在手机上离线运行大模型,阿里巴巴开源基于 MNN-LLM 框架开发的手机 AI 助手应用
MNN-LLM App 是阿里巴巴基于 MNN-LLM 框架开发的 Android 应用,支持多模态交互、多种主流模型选择、离线运行及性能优化。
762 14
MNN-LLM App:在手机上离线运行大模型,阿里巴巴开源基于 MNN-LLM 框架开发的手机 AI 助手应用

热门文章

最新文章