首页 > 其他分享 >Intel One API黑客松比赛 ———Unet尝试图像分割

Intel One API黑客松比赛 ———Unet尝试图像分割

时间:2023-09-02 16:01:03浏览次数:43  
标签:Intel nn skip self feature channels Unet API

感谢Intel提供这一次机会,我能够很幸运的参与进来,并且提高自己的编程技术。


在这次比赛的题目是:

预期解决方案::
1. 使用英特尔® AI 分析工具套件中的适当组件开发一个深度学习模型,用于准确、快速检测并对道路上的对象进行分割。:
2. 使用包括挑战赛指定的真实场景(如各种天气条件、光线条件和道路环境)的数据集测试模型。:
3. 尝试进行模型优化,以实现低延迟,以支持自动驾驶车辆进行实时对象检测。:
4. 鼓励参赛团队使用英特尔CPU或英特尔GPU完成项目。


下面我介绍一下我的工作内容。

一. 模型介绍

Unet是一种用于图像分割的卷积神经网络,它在医学图像分割领域得到了广泛的应用。


Unet的网络结构由对称的编码器和解码器组成,其中编码器通过卷积和池化操作逐渐降低特征图的分辨率,提取图像的高层次特征;解码器则通过上采样和卷积操作逐渐恢复特征图的分辨率,并将编码器提取的特征与解码器的输出进行拼接,从而生成最终的分割结果。Unet还引入了跳跃连接(skip connection)机制,使得解码器能够直接利用编码器中的低层次特征,从而提高分割效果。


以下是使用Pytorch实现Unet的示例代码:

import torch

import torch.nn as nn


class DoubleConv(nn.Module):

    def __init__(self, in_channels, out_channels):

        super().__init__()

        self.conv = nn.Sequential(

            nn.Conv2d(in_channels, out_channels, kernel_size=3, padding=1),

            nn.BatchNorm2d(out_channels),

            nn.ReLU(inplace=True),

            nn.Conv2d(out_channels, out_channels, kernel_size=3, padding=1),

            nn.BatchNorm2d(out_channels),

            nn.ReLU(inplace=True)

        )


    def forward(self, x):

        return self.conv(x)


class Unet(nn.Module):

    def __init__(self, in_channels=3, out_channels=1, features=[64, 128, 256, 512]):

        super().__init__()

        self.ups = nn.ModuleList()

        self.downs = nn.ModuleList()

        self.pool = nn.MaxPool2d(kernel_size=2, stride=2)


        # 编码器

        for feature in features:

            self.downs.append(DoubleConv(in_channels, feature))

            in_channels = feature

        # 解码器

        for feature in reversed(features):

            self.ups.append(nn.ConvTranspose2d(feature*2, feature, kernel_size=2, stride=2))

            self.ups.append(DoubleConv(feature*2, feature))


        self.bottleneck = DoubleConv(features[-1], features[-1]*2)

        self.final_conv = nn.Conv2d(features[0], out_channels, kernel_size=1)


    def forward(self, x):

        skip_connections = []

        for down in self.downs:

            x = down(x)

            skip_connections.append(x)

            x = self.pool(x)


        x = self.bottleneck(x)

        skip_connections = skip_connections[::-1]


        for idx in range(0, len(self.ups), 2):

            x = self.ups[idx](x)

            skip_connection = skip_connections[idx//2]

            if x.shape != skip_connection.shape:

                x = nn.functional.interpolate(x, size=skip_connection.shape[2:], mode='bilinear', align_corners=True)

            concat_skip = torch.cat((skip_connection, x), dim=1)

            x = self.ups[idx+1](concat_skip)


        return self.final_conv(x)


二. 数据集介绍

Cityscapes数据集是一个用于场景理解的开放式数据集,其中包含来自德国50个城市的精细注释图像。该数据集包含大量的高分辨率图像,以及像汽车、行人、建筑物等多种对象。


三. 我的创新之处。

引入跳跃连接机制:Unet引入了跳跃连接(skip connection)机制,使得解码器能够直接利用编码器中的低层次特征,从而提高分割效果。

使用更多的数据增强方法:在cityscapes数据集上进行图像分割任务时,Unet使用了更多的数据增强方法,如随机水平翻转、随机缩放、随机裁剪等,从而提高了模型的泛化能力。

使用更多的特征通道数:Unet在cityscapes数据集上使用了更多的特征通道数,从而增加了模型的表达能力。

使用更深的网络结构:Unet在cityscapes数据集上使用了更深的网络结构,从而增加了模型的容量和表达能力。

在模型训练方面,使用了数据增强技术,如随机裁剪、旋转和翻转等。同时,采用了交叉熵损失函数和随机梯度下降优化器进行模型训练。


模型分割效果良好,在正常光照条件下测试如下:

Intel One API黑客松比赛 ———Unet尝试图像分割_编码器


四.英特尔架构使用。

我在本次比赛中,第一次学会使用了Intel的ai 套件结构分析,对于模型的训练加速起到了很大的帮助。


总的来说,Unet是一种高效准确的图像分割模型,它在Cityscapes数据集上表现出色。再一次感谢Intel主办方提供的这一次机会,我学到了很多,我也学会了很多。


标签:Intel,nn,skip,self,feature,channels,Unet,API
From: https://blog.51cto.com/u_11876380/7333317

相关文章

  • 如何设计安全的 Web API
    如何设计安全的WebAPI?当我们向用户开放WebAPI访问时,我们需要确保每个API调用都经过身份验证。这意味着用户必须是他们声称的人。在这篇文章中,我们探讨了两种常见的方法:1.基于令牌的身份验证2.HMAC(基于哈希的消息认证码)认证下图说明了它们的工作原理。基于Token......
  • Linux中进程相关的API
    在Linux中,进程控制相关的API非常多。以下是一些常用的进程控制相关的系统调用(syscalls)和库函数:创建和终止进程:fork():创建一个新进程,这是创建新进程的最常用方法。vfork():类似于fork(),但有一些差异,主要用于exec调用之前。exec():系列函数(如execl(),execp(),execle()......
  • springboot 引入swagger3.0 knife4j API
    1.引入依赖pom<properties><swagger-version>3.0.0</swagger-version><swagger-knife4j>3.0.3</swagger-knife4j></properties><parent><groupId>org.springframework.boot</groupId><artifactId>......
  • fastapi 的 TestClient 的 delete 方法如何传递请求体?
    在FastAPI的TestClient中,delete方法通常不适用于传递请求体(payload)。DELETE请求通常不允许发送请求体。不过,根据HTTP规范,您可以通过在URL中包含查询参数或使用params参数来传递参数。以下是使用FastAPI的TestClient进行DELETE请求时传递参数的示例:fromfastapi.testclientimportT......
  • fastAdmin api方法解析
    准备工作:1.fastAdmin伪静态设置参考:ThinkPHPURL重写:https://www.kancloud.cn/manual/thinkphp5/177576Nginx:/conf/vhosts/hostname.conf2.FeHelper插件安装参考:Web开发者助手FeHelper:https://www.baidufe.com/fehelper/index/index.html一、api方法解析1.api/controller/Demo.p......
  • 前后端开发、测试都在用的API管理平台:Apipost
    Apipost是一个非常实用的工具,它可以帮助前后端开发人员和测试人员等多个岗位的人员提高工作效率。无论你是前端、后端还是测试人员,都有好的使用体验。后端人员可以在Apipost中接口调试,生成接口文档、前端可以在ApipostMock数据,测试则可以进行API测试、接口自动化测试。那么Apipo......
  • 【团队协作】都2022年了,前后端合作开发还不使用Apifox?
    文章目录前言一、Apifox介绍二、安装使用三、创建接口文档......
  • 京东API接口解析,实现按关键字搜索商品
    京东开放平台提供了丰富的API接口,用于查询商品、用户、订单等信息。以下是一个基本的示例,解析并实现按关键字搜索商品的API接口。需要访问京东开放平台并注册一个开发者账号。注册完成后,你需要创建一个应用并获取到API的权限。在获取到API权限后,你可以在开发者的控制台中找到API的......
  • 使用API调用获取商品数据的完整方案
    在电子商务应用程序中,商品详情接口是不可或缺的一部分。它用于从电商平台或自己的数据库中获取商品数据,并将其提供给应用程序的其他部分使用。本文将详细介绍如何设计一个完整的商品详情接口方案,其中包括使用API调用来获取商品数据的过程。我们将使用Python语言示例代码来阐述该过......
  • 简单三步搞定 ChatGPT API 调用,轻松畅聊机器人!
    ChatGPTAPI是什么ChatGPT已经成为了很多人日常工作的一部分,帮你写周报,做翻译,查资料。但是,有很多事情是网页版的ChatGPT做不到的。比如,我想要做一个关于Apifox的知识的问答机器人,能在企业微信里访问。这个时候,我就需要用到ChatGPTAPI了。ChatGPTAPI是一种由OpenAI提供......