飞桨PaddleSeg--语义分割识别天空

  • 制作数据集
  • 数据预处理
    • 文件夹结构
    • 原图以及标注图处理
    • 修改像素值
  • 配置文件修改
  • 训练验证以及推理
  • 结束

PaddleSeg地址:https://github.com/PaddlePaddle/PaddleSeg/blob/release/2.2/README_CN.md

制作数据集

这一步先略过,一般可以用labelme完成,这个在paddle的readme中有介绍
我使用的是另一个语义分割开源项目中的数据集 (701张图片)

数据预处理

根据paddleSeg的要求,将图片进行以下处理

文件夹结构

将701张图片和701张label图片放在两个文件夹中,训练集验证集测试集的划分通过 train.txt val.txt test.txt实现,最终文件结构如下:
在data/NewCamVid下:
├── images
│ ├── Seq05VD_f05040.png
│ ├── Seq05VD_f05070.png
│ ├──Seq05VD_f05100.png
│ ├── …
├── labels
│ ├── Seq05VD_f05040_L.png
│ ├── Seq05VD_f05070_L.png
│ ├──Seq05VD_f05100_L.png
│ ├── …
├── labels.txt
├── test.txt
├── train.txt
└── val.txt
test.txt, train.txt,val.txt三个文件的内容参照官网要求

原图以及标注图处理

首先修改原图的图片格式为jpg
(这一点不确定是不是必要,为了避免出错,我根据官网的示例,将原图从png转换成jpg)

接下来,修改标注图的像素值和通道数

修改像素值

根据要求只需要识别出天空,因此将原数据的天空部分修改为(1,1,1)其余部分修改成(0,0,0)
代码如下

# @*@ #huaiZ
import cv2 as cv
import os
from loguru import logger
import argparse
import math
import multiprocessingdef change_label(save_folder, img_list):for img_path in img_list:filename = os.path.basename(img_path)logger.debug(f"deal with images: {img_path}")img = cv.imread(img_path)height, width, ch = img.shapefor x in range(height):for y in range(width):if all(img[x, y] == [128, 128, 128]):img[x, y] = [1, 1, 1]else:img[x, y] = [0,0,0]assert cv.imwrite(os.path.join(save_folder, filename), img), "failed with save new images"logger.debug(f"new image's position: {os.path.join(save_folder, filename)}")if __name__ == '__main__':parser = argparse.ArgumentParser()parser.add_argument("--input", default=False, help="要改变的图片文件夹路径")parser.add_argument("--output", default=False, help="存放新的图片文件夹路径")args = parser.parse_args()folder_path = args.inputsave_folder = args.outputimg_list = []for file in os.listdir(folder_path):img_path = os.path.join(folder_path, file)img_list.append(img_path)pList = []thead_num = 5length = len(img_list)for i in range(thead_num):item_list = img_list[math.floor(i / thead_num * length):math.floor((i + 1) / thead_num * length)]p = multiprocessing.Process(target=change_label, args=(save_folder, item_list,))pList.append(p)p.start()for p in pList:p.join()

再将标签数据集转换成单通道即灰度图

import cv2
import osfolder = r"原图文件夹的路径"
save_folder = '保存灰度图的路径'
for file in os.listdir(folder):img = cv2.imread(os.path.join(folder, file), cv2.IMREAD_UNCHANGED)# 查看原始图像shape = img.shapeprint(f"before shape:{shape}")img_gray = cv2.cvtColor(img, cv2.COLOR_RGB2GRAY)cv2.imwrite(os.path.join(save_folder, file),img_gray)print(f"after shape:{img_gray.shape}")

这样数据集基本准备完毕了

配置文件修改

将configs/quick_start/bisenet_optic_disc_512x512_1k.yml复制一份,并重命名
将其中有关配置修改,对应自己的数据集:

batch_size: 4
iters: 1000train_dataset:type: Datasetdataset_root: data/NewCamVidtrain_path: data/NewCamVid/train.txtnum_classes: 2transforms:- type: Resizetarget_size: [512, 512]- type: RandomHorizontalFlip- type: Normalizemode: trainval_dataset:type: Datasetdataset_root: data/NewCamVidval_path: data/NewCamVid/val.txtnum_classes: 2transforms:- type: Resizetarget_size: [512, 512]- type: Normalizemode: valoptimizer:type: sgdmomentum: 0.9weight_decay: 4.0e-5lr_scheduler:type: PolynomialDecaylearning_rate: 0.01end_lr: 0power: 0.9loss:types:- type: CrossEntropyLosscoef: [1, 1, 1, 1, 1]model:type: BiSeNetV2pretrained: Null

接下来就可以开始训练了,这部分内容和官网的基本一致,我贴一下训练验证的指令吧

训练验证以及推理

export CUDA_VISIBLE_DEVICES=0 # 设置1张可用的卡

训练指令

python train.py --config configs/quick_start/bisenet_new_camvid_512x512_1k.yml \
--do_eval \
--use_vdl \
--save_interval 500 \
--save_dir my_output

等待训练完成后

验证指令

python val.py \--config configs/quick_start/bisenet_new_camvid_512x512_1k.yml \--model_path my_output/best_model/model.pdparams

部分结果如下

26/26 [==============================] - 1s 41ms/step - batch_cost: 0.0411 - reader cost: 0.0037
2021-07-30 16:50:53 [INFO]  [EVAL] #Images: 26 mIoU: 0.9275 Acc: 0.9813 Kappa: 0.9233
2021-07-30 16:50:53 [INFO]  [EVAL] Class IoU:
[0.9784 0.8766]
2021-07-30 16:50:53 [INFO]  [EVAL] Class Acc:
[0.9893 0.9329]

预测指令

python predict.py \--config configs/quick_start/bisenet_new_camvid_512x512_1k.yml \--model_path my_output/best_model/model.pdparams \--image_path data/NewCamVid/images/0016E5_06960.jpg \--save_dir my_output/result

输出的结果如下:


叠加图

导出模型什么的官方都有介绍,我就不赘述了

结束

接下来研究怎么将模型转化成tflite部署到android上

使用飞桨PaddleSeg实现语义分割识别天空(一)相关推荐

  1. 飞桨PaddleSeg助力中国商飞航材自动化无损检测

    点击左上方蓝字关注我们 航空制造产业作为国家十三五规划和"中国制造2025"的重点发展领域之一,已经成为国家战略性产业,对于提升整体工业实力具有重大意义.而质检保障着制造的安全,飞 ...

  2. 使用飞桨完成手写数字识别模型

    手写数字识别任务 数字识别是计算机从纸质文档.照片或其他来源接收.理解并识别可读的数字的能力,目前比较受关注的是手写数字识别.手写数字识别是一个典型的图像分类问题,已经被广泛应用于汇款单号识别.手写邮 ...

  3. 拯救脂肪肝第一步!以飞桨3D医疗影像分割方案MedicalSeg自主诊断脂肪肝

    项目背景 现在人们的日常生活方式和饮食结构发生了巨大的变化,大概就是吃好了,动少了.体内的过量的甘油三酯无法代谢,最终聚集在肝细胞内,导致人体中正常肝脏逐步变成脂肪肝.长期患有脂肪肝可能会导致肝硬化, ...

  4. 基于飞桨实现项目1 车牌识别

    文章目录 1 项目介绍 2 环境配置 3 数据集 3.1 CCPD02020介绍 3.2 解压数据集 3.3 提取文本检测数据集 3.4 提取文本识别数据集 4 模型 4.1 下载模型 4.2 文本检 ...

  5. Android 使用百度飞桨做OCR的本地识别

    在项目过程中,由于调用接口识别比较费时间,后来采用了飞桨开源模型来做本地的OCR识别,它的SDK使用完全免费,无有效期限制. 我们这里使用的是OCRV3的包,只是在扫描过程中使用了下OCR的识别 按d ...

  6. 基于百度飞桨PaddleOCR的图片文字识别

    PaddleOCR项目源码:https://github.com/PaddlePaddle/PaddleOCR 飞桨开源文字识别模型套件PaddleOCR,目标是打造丰富.领先.实用的文本识别模型/工 ...

  7. 基于飞桨实现手写数字识别2

    参考课程笔记:https://aistudio.baidu.com/aistudio/projectdetail/728143 上篇https://mp.csdn.net/console/editor ...

  8. 飞桨day-01手写数字识别实践(使用卷积神经网络)

    day-01高层API手写数字识别实践(使用卷积神经网络) AI Studio项目地址:https://aistudio.baidu.com/aistudio/projectdetail/150477 ...

  9. 农耕不再靠“天意”,中科赛诺用百度飞桨打造智能“地脸识别”

    民以食为天,食以农为本,而农业的根本,在于农田. 有这样一群人,和农田打了一辈子交道.张磊是一名农场主,每到冬天,他家上千亩农田都会种上冬小麦.播种后的一周里他每天都要走上几万步路巡视农田查看小麦的出 ...

最新文章

  1. 改变mac中launchpad图标大小
  2. android--------WebView实现 Html5 视频标签加载
  3. 解决Linux 无法使用userdel 删除用户和组的问题
  4. Class 17 - 1 动态渲染页面爬取 — Selenium使用
  5. JUnit5 快速指南
  6. 使用Github(创建仓库、仓库主页说明)
  7. sql 数字转换为16进制数函数
  8. 【Python】IDLE工具
  9. 利用汇编与机器码定位崩溃点
  10. python分解word文档为多个_用python批量处理word文档
  11. 面试技巧,如何通过索引说数据库优化能力
  12. C语言怎样求矩阵上三角乘积,C语言经典算法 - 上三角、下三角、对称矩阵
  13. pkg学习--使用pkg打包应用
  14. html reset 无效,HTML中的input type=reset标签失效(不起作用)的可能原因。
  15. Pandas的列表值处理技巧,避免过多循环加快处理速度
  16. SAP跨公司销售经典场景
  17. 《大数据处理技术Spark》--林子雨
  18. 中国是时候在东亚做老大了?
  19. 数据可视化应用到营销中的5个超酷案例
  20. 应用 2:缓兵之计 ——延时队列

热门文章

  1. 使用sklearn进行kmeans实战
  2. 穷举法解决鸡兔同笼问题
  3. 最新最全论文合集——3D重建
  4. 推荐4个绝对不能错过的大数据可视化系统!
  5. OA办公系统的安装与部署步骤
  6. [每天读一点英文]Obama就职典礼演说gnuhpc标注版
  7. swif 嵌套数据自带解析
  8. LVGL官方文档-7.11.0-4-Porting-Display interface
  9. pytorch 定义dice_coeff, SoftDiceLoss,BCELoss2d损失函数
  10. oracle19c集群重启,Oracle 19c集群重装