【机器学习实战高阶】基于深度学习的图像分割

news2025/1/22 20:36:23

在这里插入图片描述

机器学习项目图像分割

你可能已经注意到,大脑如何快速高效地识别并分类眼睛感知到的事物。大脑以某种方式进行训练,以便能够从微观层面分析所有内容。这种能力有助于我们从一篮子橙子中分辨出一个苹果。

计算机视觉是计算机科学的一个领域,它使计算机能够识别和处理视频和图像中的物体,就像人类一样。尽管计算机视觉看似并不是一个非常新的概念,但它可以追溯到20世纪60年代末,当时第一台数字图像扫描仪问世,该扫描仪将图像转换为数字网格。

图像分割示例

什么是图像分割?

你可能听说过物体检测和图像定位。当图像中只有一个物体时,我们使用图像定位技术在该物体周围绘制一个边界框。在物体检测的情况下,它会提供标签和边界框,因此我们可以预测物体的位置和类别。

图像分割可以提供关于图像形状的更详细的微观信息,因此是物体检测概念的延伸。

我们通过将图像分割成不同颜色的区域来区分物体,这有助于在更细微的层面上区分不同的物体。
在这里插入图片描述

图像分割的类型

图像分割大致可以分为两种类型:
在这里插入图片描述

  1. 语义分割
    语义分割是将图像像素分割成它们各自的类别。例如,在上图中,猫与黄色相关联,因此所有与猫相关的像素都被标记为黄色。同一类别的多个物体被视为一个实体,因此用相同颜色表示。

  2. 实例分割
    实例分割更为细致,通常在处理多个物体时使用。不同之处在于,检测到的物体被用一种颜色标记,因此所有与该物体相关的像素都被赋予相同的颜色。同一类别的多个物体被视为不同的实体,因此用不同的颜色表示。

图像分割应用
  1. 自动驾驶汽车
    图像分割可以用于自动驾驶汽车中,以轻松区分各种物体,如交通信号灯、指示牌、行人和汽车。这有助于驾驶指令算法在生成下一步指令之前更好地评估周围环境。
    居中的图片: Alt

  2. 电路板缺陷检测
    公司需要承担缺陷设备的责任。如果用一个带有图像分割模型的相机不断扫描最终产品的缺陷,可以节省大量时间和金钱来修复有缺陷的设备。
    在这里插入图片描述

  3. 面部检测
    如今,我们注意到大多数手机的摄像头都支持人像模式。人像模式实际上是图像分割技术的结果。此外,当面部可以从嘈杂的物体中区分出来时,安全监控将更加有效。

  4. 医学成像
    图像分割可以用于从医学报告中提取临床相关的信息。例如,图像分割可以用于分割肿瘤。
    在这里插入图片描述

Mask R-CNN

我们将使用Mask R-CNN架构进行图像分割。它是Faster R-CNN模型的扩展,后者常用于物体检测任务。

Mask R-CNN可以返回二进制物体掩码,除了类别标签和物体边界框之外。Mask R-CNN擅长像素级别的分割。

Mask R-CNN的工作原理

Mask R-CNN使用与其前身Faster R-CNN类似的架构,并且还利用全卷积网络进行像素级别的分割。

  1. 特征提取
    我们使用ResNet 101架构从输入图像中提取特征。结果是得到特征图,这些特征图被传输到Region Proposal Network(RPN)。

  2. 区域提议网络(RPN)
    在获得特征图之后,确定边界框候选区域,因此RPN提取RoI(感兴趣区域)。

  3. RoI Pool层
    Faster R-CNN使用RoI Pool层来计算从提取的提议中得出的特征,以便推断物体的类别和边界框坐标。

  4. RoI Align层
    由于RoI坐标量化导致在获取感兴趣区域时出现对齐问题。由于像素级别的分割需要精确度,因此Faster R-CNN的作者巧妙地通过实现RoI Align来解决这个问题。
    在这里插入图片描述

    掩码是通过一个小的全连接网络应用于每个RoI,该网络以像素对像素的方式预测分割掩码。

构建图像分割项目的步骤

下载图像分割项目代码

请下载图像分割项目的源代码:图像分割与机器学习

  1. 克隆Mask R-CNN Github仓库
    首先,我们下载将要实现的模型架构。直接下载:https://download.csdn.net/download/jrckkyy/90291632

  2. 库依赖
    为了使其正常工作,我们需要某些库,你可能还没有安装所有必要的库。
    以下是你需要的库列表:

    • numpy
    • scipy
    • pillow
    • cython
    • matplotlib
    • scikit-image
    • tensorflow
    • keras
    • opencv-python
    • h5py
    • imgaug
    • ipython

    :如果你在Windows上无法成功安装‘pycocotools’,可以尝试安装这个版本,它在我这里工作得很好。

  3. 预训练权重
    由于训练模型需要数小时甚至几天,因此现在很难训练模型。因此,我们将使用预训练模型来对我们输入的图像进行预测。

    从github下载预训练模型

    跟随这个链接,你会看到Mask-RCNN的发布列表。你可以尝试最新版本,但由于有不一致的问题,我使用了Mask R-CNN 2.0。你可以直接下载h5文件并将其保存到我们在第一步中克隆的Mask R-CNN仓库的samples文件夹中。

  4. 创建新的Jupyter Notebook
    到目前为止,我们已经组装好了引擎,现在是时候利用我们引擎的力量,一路驶向分割后的图像了。

    我们将在Mask R-CNN仓库的samples文件夹中创建一个新的Jupyter Notebook,你可以使用其他IDE,但Jupyter Notebook可以方便地逐个执行代码单元。

    如果你没有强大的系统,可以使用Google Colab来运行代码,但请确保正确上传仓库和h5文件。

  5. 导入必要的库

    # 导入必要的库
    import os
    import sys
    import random
    import math
    import numpy as np
    import skimage.io
    import matplotlib
    import matplotlib.pyplot as plt
    
    # 获取根目录
    ROOT_DIR = os.path.abspath("../")
    
    # 忽略警告
    import warnings
    warnings.filterwarnings("ignore")
    
    # 导入Mask RCNN
    sys.path.append(ROOT_DIR)  # 将库的本地版本添加到路径中
    from mrcnn import utils
    import mrcnn.model as modellib
    from mrcnn import visualize
    
    # 进入coco目录
    sys.path.append(os.path.join(ROOT_DIR, "samples/coco/"))  
    
    # 导入coco.py
    import coco
    
    # 在Jupyter Notebook中显示图像
    %matplotlib inline
    

    注1:如果你在定位目录时感到困惑或卡住,可以输入print(ROOT_DIR)来查看你引用的目录。
    注2:你可能会遇到与‘pycocotools’相关的错误。如果你在Windows上无法成功安装‘pycocotools’,可以尝试安装这个版本,它在我这里工作得很好。

  6. 预训练权重的路径

    # 保存日志和训练模型的目录
    MODEL_DIR = os.path.join(ROOT_DIR, "logs")
    
    # 预训练权重文件的本地路径
    COCO_MODEL_PATH = os.path.join('', "mask_rcnn_coco.h5")
    
    # 要进行检测的图像目录
    DIR_IMAGE = os.path.join(ROOT_DIR, "images")
    
  7. 推理类以推断Mask R-CNN模型

    class InferenceConfig(coco.CocoConfig):
        # 将batch size设置为1,因为我们每次仅处理一张图像。batch size = GPU_COUNT * IMAGES_PER_GPU
        GPU_COUNT = 1
        IMAGES_PER_GPU = 1
    
    config = InferenceConfig()
    config.display()
    

    输出

    config
    

    你看到的是我们将要使用的Mask R-CNN模型的规格。主干是resnet101,它有助于从图像中提取特征。

    下一个重要的观察点是掩码形状,为28×28,因为它是在COCO数据集上训练的,我们总共有81个类别。

    这意味着有81种可能的预测类别,物体可以属于其中的一种。
    在这里插入图片描述

  8. 加载权重

    # 在推理模式下创建模型对象
    model = modellib.MaskRCNN(mode="inference", model_dir='mask_rcnn_coco.h5', config=config)
    
    # 加载在MS-COCO上训练的权重
    model.load_weights('mask_rcnn_coco.h5', by_name=True)
    
  9. 加载图像以测试模型

    # 读取图像
    image = skimage.io.imread('../images/4410436637_7b0ca36ee7_z.jpg')
    
    # 显示原始图像
    plt.figure(figsize=(12,10))
    skimage.io.imshow(image)
    

    输出

    选择的图像
    

在这里插入图片描述

  1. 将图像发送到模型以生成预测结果

    # 运行检测
    results = model.detect([image], verbose=1)
    
  2. 将结果掩码应用到图像中

    # 可视化结果
    r = results[0]
    visualize.display_instances(image, r['rois'], r['masks'], r['class_ids'],
    

    这是你一直在迫切等待的时刻,以下是输出结果

    图像分割输出
    

    好的!我们成功地分割了图像,并且可以看到我们的代码表现非常出色。如果你成功完成了这一步,那就恭喜你!

  3. 检测到的物体数量
    现在,如果你想知道我们成功检测到的物体数量,只需输入以下代码:

    # 获取掩码
    mask = r['masks']
    mask = mask.astype(int)
    mask.shape
    

    输出

    (426, 640, 7)
    

在这里插入图片描述

从这里我们可以看到,模型在图像中共检测到了7个物体。
参考资料
资料名称链接
Image Segmentation with Machine Learninghttp://www.example.com/image-segmentation-with-machine-learning
Introduction to Mask R-CNNhttps://www.example.com/introduction-to-mask-r-cnn
Semantic Segmentation in Computer Visionhttps://www.example.com/semantic-segmentation-in-computer-vision
Instance Segmentation in Computer Visionhttps://www.example.com/instance-segmentation-in-computer-vision
ResNet Architecturehttps://www.example.com/resnet-architecture
Faster R-CNN Explainedhttps://www.example.com/faster-r-cnn-explained
RoI Pooling vs RoI Alignhttps://www.example.com/roi-pooling-vs-roi-align
COCO Datasethttps://cocodataset.org/
TensorFlow Official Documentationhttps://www.tensorflow.org/
Keras Official Documentationhttps://keras.io/
OpenCV Official Documentationhttps://opencv.org/
GitHub - Matterport/Mask_RCNNhttps://github.com/matterport/Mask_RCNN
Cornell University - Computer Visionhttp://www.cs.cornell.edu/courses/cs5670/2020sp/
Stanford University - CS231nhttp://cs231n.stanford.edu/
PyCocotools Installation Guidehttps://www.example.com/pycocotools-installation-guide

总结

希望我们能够引导你解决你的第一个图像分割问题。我们讨论了整个过程,如果你对细节感兴趣,互联网上有大量的相关信息可供查阅。

我们建议你阅读并理解各种架构,包括我们实现的Mask R-CNN。这将帮助你更好地分析问题,并激发你提出新的想法来解决复杂问题。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2280549.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Elasticsearch 】 聚合分析:桶聚合

🧑 博主简介:CSDN博客专家,历代文学网(PC端可以访问:https://literature.sinhy.com/#/?__c1000,移动端可微信小程序搜索“历代文学”)总架构师,15年工作经验,精通Java编…

Skyeye 云 VUE 版本 v3.15.5 发布

Skyeye 云智能制造,采用 Springboot winUI 的低代码平台、移动端采用 UNI-APP。包含 30 多个应用模块、50 多种电子流程,CRM、PM、ERP、MES、ADM、EHR、笔记、知识库、项目、门店、商城、财务、多班次考勤、薪资、招聘、云售后、论坛、公告、问卷、报表…

TCP如何保证安全可靠?

TCP如何保证安全可靠? TCP(传输控制协议)是一种面向连接的、可靠的传输层协议。为了保证数据传输的安全性和可靠性,TCP 采用了多种机制,包括确认和重传、数据校验、数据分片和排序、流量控制以及拥塞控制。 1. 确认和…

高等数学学习笔记 ☞ 定积分的积分方法

1. 定积分的换元积分法 1. 换元积分公式:设函数在闭区间上连续,令,若满足: ①:当时,;当时,。 此时的大小关系不一定,但与最好对应着写,否则就要留意变号的问…

Alluxio 联手 Solidigm 推出针对 AI 工作负载的高级缓存解决方案

作者:Wayne Gao, Yi Wang, Jie Chen, Sarika Mehta Alluxio 作为全球领先的 AI 缓存解决方案供应商, 提供针对 GPU 驱动 AI 负载的高速缓存。其可扩展架构支持数万个节点,能显著降低存储带宽的消耗。Alluxio 在解决 AI 存储挑战方面的前沿技…

Docker Load后存储的镜像及更改镜像存储目录的方法

Docker Load后存储的镜像及更改镜像存储目录的方法 Docker Load后存储的镜像更改镜像存储目录的方法脚本说明注意事项Docker作为一种开源的应用容器引擎,已经广泛应用于软件开发、测试和生产环境中。通过Docker,开发者可以将应用打包成镜像,轻松地进行分发和运行。而在某些场…

爬虫基础之爬取某站视频

目标网址:为了1/4螺口买小米SU7,开了一个月,它值吗?_哔哩哔哩_bilibili 本案例所使用到的模块 requests (发送HTTP请求)subprocess(执行系统命令)re (正则表达式操作)json (处理JSON数据) 需求分析: 视频的名称 F12 打开开发者工具 or 右击…

可视化-numpy实现线性回归和梯度下降法

代码如下: import numpy as np import matplotlib.pyplot as plt from mpl_toolkits.mplot3d import Axes3D from matplotlib.patches import Patch# 生成二维输入数据 np.random.seed(0) X1 2 * np.random.rand(100, 1) # 第一个特征 X2 3 * np.random.rand(10…

计算机网络 (53)互联网使用的安全协议

一、SSL/TLS协议 概述: SSL(Secure Sockets Layer)安全套接层和TLS(Transport Layer Security)传输层安全协议是工作在OSI模型应用层的安全协议。SSL由Netscape于1994年开发,广泛应用于基于万维网的各种网络…

在视频汇聚平台EasyNVR平台中使用RTSP拉流的具体步骤

之前有用户反馈,在EasyNVR平台中添加Pull时使用海康设备的RTSP流地址无法播放。经过研发的优化及一系列严谨的验证流程,我们已确认优化后的EasyNVR平台,通过Pull方式添加海康设备的RTSP流已经能够正常播放。以下是具体的操作步骤:…

在Linux环境中使用Qt访问USB摄像头的解决方法

一、Cheese方法 1、将虚拟机关机,点击左上角的虚拟机设置,将显示所有USB输入设备选上,点击确定。 2、 打开虚拟机,在终端输入以下命令安装所需的软件包: sudo apt update sudo apt install cheese v4l-utils 确保摄…

Qt——网络编程

和多线程类似, Qt 为了支持跨平台, 对网络编程的 API 也进行了重新封装。 在进行网络编程之前, 需要在项目中的 .pro 文件中添加 network 模块,添加之后运行一下,使其包含的头文件能够被加载进Qt Creator。 Qt本身是一个非常庞大,包罗万象的…

docker 安装 mysql 详解

在平常的开发工作中,我们经常需要用到 mysql 数据库。那么在docker容器中,应该怎么安装mysql数据库呢。简单来说,第一步:拉取镜像;第二步:创建挂载目录并设置 my.conf;第三步:启动容…

no persistent volumes available for this claim and no storage class is set

目录标题 问题1问题描述**问题原因****解决步骤****1. 检查 PVC 的配置****2. 设置 StorageClass****创建默认 StorageClass****修改 PVC 的 StorageClass** **3. 创建匹配的 PV****4. 验证 PVC 是否绑定成功** **最佳实践** 问题2问题描述**问题原因****解决方案****1. 删除现…

2024微短剧行业生态洞察报告汇总PDF洞察(附原数据表)

原文链接: https://tecdat.cn/?p39072 本报告合集洞察从多个维度全面解读微短剧行业。在行业发展层面,市场规模与用户规模双增长,创造大量高收入就业岗位并带动产业链升级。内容创作上,精品化、品牌化趋势凸显,题材走…

【22】Word:小李-高新技术企业政策❗

目录 题目​ NO1.2 NO3 NO4 NO5.6 NO7.8 NO9.10 若文章中存在删除空白行等要求,可以到最后来完成。注意最后一定要检查此部分!注意:大多是和事例一样即可,不用一摸一样,但也不要差太多。 题目 NO1.2 F12Fn&a…

SQLmap 自动注入 -02

1: 如果想获得SQL 数据库的信息,可以加入参数: -dbs sqlmap -u "http://192.168.56.133/mutillidae/index.php?pageuser-info.php&usernamexiaosheng&passwordabc&user-info-php-submit-buttonViewAccountDetails" --batch -p username -dbs…

视频m3u8形式播放 -- python and html

hls hls官网地址 创建项目 ts为视频片段 m3u8文件内容 html <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /><meta name"viewport" content"widthdevice-width, initial-scale1.0" …

C#中的语句

C#提供了各式各样的语句&#xff0c;大多数是由C和C发展而来&#xff0c;当然&#xff0c;在C#中做了相应修改。语句和表达式一样&#xff0c;都是C#程序的基本组成部分&#xff0c;在本文我们来一起学习C#语句。 1.语句 语句是构造所有C#程序的过程构造块。在语句中可以声明…

【2024年CSDN平台总结:新生与成长之路】

&#x1f4ab;引言 2024年已经过去&#xff0c;回顾这一年&#xff0c;所有的经历依然历历在目。以“经验”为动力&#xff0c;我正迈向2025年。回顾自己在CSDN平台上的创作之路&#xff0c;收获满满、成长颇多&#xff0c;也有许多宝贵的感悟。接下来&#xff0c;我将分享这一…