IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 人工智能 -> 图像分割入门 -> 正文阅读

[人工智能]图像分割入门

图像分割

分类

  • 图像分割
  • 图像语义分割
  • 图像实例分割
  • 图像全景分割
  • 视频目标分割
  • 视频实例分割

语义分割

目的

  • 像素级分类

语义分割算法的基本流程

  • 输入:图像(RGB)
  • 算法:深度学习模型
  • 输出:分类结果(与输入大小一致的单通道图)
  • 训练过程 :
    • 输入: image + label
    • 前向:out = model(image)
    • 计算损失 :loss = loss_func(out,label)
    • 反向:loss.backward()
    • 更新权重:optimizer.minimize(loss)

分割网络的评价指标

mIoU

mAcc

代码

环境:Paddle 1.8.4,Python 3.7

BasicModel

import paddle
import paddle.fluid as fluid
from paddle.fluid.dygraph import to_variable
from paddle.fluid.dygraph import Conv2D
from paddle.fluid.dygraph import Pool2D
import numpy as np

np.set_printoptions(precision=2)


class BasicModel(fluid.dygraph.Layer):
    def __init__(self, num_classes=59):
        super(BasicModel, self).__init__()
        self.pool = Pool2D(pool_size=2, pool_stride=2)
        self.conv = Conv2D(num_channels=3, num_filters=num_classes, filter_size=1)

    def forward(self, inputs):
        x = self.pool(inputs)
        x = fluid.layers.interpolate(x, out_shape=inputs.shape[2::])
        x = self.conv(x)
        return x


def main():
    place = paddle.fluid.CPUPlace()
    # place = paddle.fluid.CUDAPlace(0)
    with fluid.dygraph.guard(place):
        model = BasicModel(num_classes=59)
        model.eval()  # model.train()
        input_data = np.random.rand(1, 3, 8, 8).astype(np.float32)
        print('input data shape', input_data.shape)
        input_data = to_variable(input_data)  # 转成tensor
        output_data = model(input_data)
        output_data = output_data.numpy()  # 转成numpyarray方便观察
        print('output data shape', output_data.shape)


if __name__ == "__main__":
    main()

BasicDataLoader

import os
import random
import numpy as np
import cv2
import paddle.fluid as fluid

class Transform(object):
    def __init__(selfm,size = 256):
        self.size  = size
    def __call__(self,input,label):
        input = cv2.resize(input,(self.size),(self.size),interpolation=cv2.INTER_LINEAR)
        label = cv2.resize(label,(self.size),(self,size),interpolation=cv2.INTER_NEAREST)
        return input,label
class BasicDataLoader(object):
    def __init__(self,
                 image_folder,
                 image_list_file,
                 transform=None,
                 shuffle=True):
        self.image_folder=image_folder
        self.image_list_file=image_list_file
        self.transform=transform
        self.shuffle=shuffle
        
        self.data_list = self.read_list()
    def read_list(self):
        data_list = []
        with open(self.image_lise_file) as infile:
            for line in infile:
                data_path = os.path.join(self.image_folder,line.split()[0])
                label_path = os.path.join(self.image_folder,line.split()[1])
    		   data_list.append((data_path,label_path))
        random.shuffle(data_list)
        return data_list
    def pregrocess(self,data,label):
        h,w,c = data.shape
        h_gt,w_gt = label.shape
        if self.transform:
            data,label = self.transform(data,label)
        label = label[:,:,:np.newaxis]
            
    def __len__(self):
        return len(self.data_list)
    def __call__(self):
        for data_path,label_path in self.data_list:
            data = cv2.imread(data_path,cv2_IMREAD_COLOR)
            data = cv2.cvtColor(data,cv2.COLOR_BGR2RGB) 
            label = cv2.imread(label_path,cv2_IMREAD_GRAYSCALE)
            print(data.shape,label.shape)
            data,label = self.preprocess(data,label)
            yield data,label
            
def main()
	batch_size =5
    place = fluid.CPUPlace(0)
    with fluid.dygraph.guard(place):
        transform = Transform(256)
        basic_dataloader = BasicDataLodaer(image_folder='./'
                                           image_list_file='./.txt'
                                           transform=transform,
                                           shuffle=True
        	)
        dataloader = fluid.io.DataLoader.from_generator(capacity=1,use_multiprocess = False)
        dataloader.set_sample_generator(basic_dataloader,
                                        batch_size=batch_size,
                                        places = place)
        num_epoch = 2
        for epoch in range(1,num_epoch+1):
            print(f'Epoch[{epoch}/num_epoch]:')
            for idx,(data,label) in enumerate(dataloader):
                print(f'Iter {idx},Data shape:{data.shape},label shape: {label.shape}')

if __main__ =="__main__"
	main()
  人工智能 最新文章
2022吴恩达机器学习课程——第二课(神经网
第十五章 规则学习
FixMatch: Simplifying Semi-Supervised Le
数据挖掘Java——Kmeans算法的实现
大脑皮层的分割方法
【翻译】GPT-3是如何工作的
论文笔记:TEACHTEXT: CrossModal Generaliz
python从零学(六)
详解Python 3.x 导入(import)
【答读者问27】backtrader不支持最新版本的
上一篇文章      下一篇文章      查看所有文章
加:2021-11-16 18:49:57  更:2021-11-16 18:52:00 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/27 6:15:37-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码