如何使用pspnet训练出仪表的指针和表盘
第一步先打标,打标之前先安装labelme,这里我用的labelme版本是3.16.7

pip install labelme==3.16.7

然后在终端桥labelme 打开labelme的界面
如下:

把表盘的部分和指针的部分分别用pan和zhen来表示,我标注了1700多张图片数据,然后需要把json文件和图片整理成voc的数据格式。这是一段 json_to_dataset.py的文件,在很多github仓库中都能找到,我用的代码地址是这个github
代码如下:

import argparse
import base64
import json
import os
import os.path as osp
import warningsimport numpy as np
import PIL.Image
import yaml
from labelme import utils'''
我使用的labelme版本是3.16.7,建议使用该版本的labelme,有些版本的labelme会发生错误
此处生成的标签图是8位彩色图,每个像素点的值就是这个像素点所属的种类
'''
if __name__ == '__main__':jpgs_path = "datasets/JPEGImages"pngs_path = "datasets/SegmentationClass"#classes = ["_background_","aeroplane", "bicycle", "bird", "boat", "bottle", "bus", "car", "cat", "chair", "cow", "diningtable", "dog", "horse", "motorbike", "person", "pottedplant", "sheep", "sofa", "train", "tvmonitor"]classes = ["_background_","pan","zhen"]count = os.listdir("./datasets/before/") for i in range(0, len(count)):path = os.path.join("./datasets/before", count[i])if os.path.isfile(path) and path.endswith('json'):data = json.load(open(path))if data['imageData']:imageData = data['imageData']else:imagePath = os.path.join(os.path.dirname(path), data['imagePath'])with open(imagePath, 'rb') as f:imageData = f.read()imageData = base64.b64encode(imageData).decode('utf-8')img = utils.img_b64_to_arr(imageData)label_name_to_value = {'_background_': 0}for shape in data['shapes']:label_name = shape['label']if label_name in label_name_to_value:label_value = label_name_to_value[label_name]else:label_value = len(label_name_to_value)label_name_to_value[label_name] = label_value# label_values must be denselabel_values, label_names = [], []for ln, lv in sorted(label_name_to_value.items(), key=lambda x: x[1]):label_values.append(lv)label_names.append(ln)assert label_values == list(range(len(label_values)))lbl = utils.shapes_to_label(img.shape, data['shapes'], label_name_to_value)PIL.Image.fromarray(img).save(osp.join(jpgs_path, count[i].split(".")[0]+'.jpg'))new = np.zeros([np.shape(img)[0],np.shape(img)[1]])for name in label_names:index_json = label_names.index(name)index_all = classes.index(name)new = new + index_all*(np.array(lbl) == index_json)utils.lblsave(osp.join(pngs_path, count[i].split(".")[0]+'.png'), new)print('Saved ' + count[i].split(".")[0] + '.jpg and ' + count[i].split(".")[0] + '.png')

处理成voc的数据格式以后,第二步我们需要对数据进行分类,分为训练集和验证集。
分类的代码如下

import os
import random
random.seed(0)segfilepath=r'./datasets/VOC2007/SegmentationClass'
saveBasePath=r"./datasets/VOC2007/ImageSets/Segmentation/"#----------------------------------------------------------------------#
#   想要增加测试集修改trainval_percent
#   修改train_percent用于改变验证集的比例
#----------------------------------------------------------------------#
trainval_percent=1
train_percent=0.9temp_seg = os.listdir(segfilepath)
total_seg = []
for seg in temp_seg:if seg.endswith(".png"):total_seg.append(seg)num=len(total_seg)
list=range(num)
tv=int(num*trainval_percent)
tr=int(tv*train_percent)
trainval= random.sample(list,tv)
train=random.sample(trainval,tr)  print("train and val size",tv)
print("traub suze",tr)
ftrainval = open(os.path.join(saveBasePath,'trainval.txt'), 'w')
ftest = open(os.path.join(saveBasePath,'test.txt'), 'w')
ftrain = open(os.path.join(saveBasePath,'train.txt'), 'w')
fval = open(os.path.join(saveBasePath,'val.txt'), 'w')  for i  in list:  name=total_seg[i][:-4]+'\n'  if i in trainval:  ftrainval.write(name)  if i in train:  ftrain.write(name)  else:  fval.write(name)  else:  ftest.write(name)  ftrainval.close()
ftrain.close()
fval.close()
ftest .close()

接着按着voc的数据目录格式把训练的数据丢进去
数据目录格式,然后替换掉原来工程的

然后执行训练就可以了

python train.py

训练过程如图所示,收敛就好

利用语义分割算法做指针式仪表的读数识别相关推荐

  1. 实时语义分割算法大盘点

    本文转载自计算机视觉工坊 语义分割论文 语义图像分割是计算机视觉中发展最快的领域之一,有着广泛的应用.在许多领域,如机器人和自动驾驶汽车,语义图像分割是至关重要的,因为它提供了必要的上下文,以采取行动 ...

  2. 语义分割算法总结(一)

    注: 在本文中经常会提到输出数据的维度,为了防止读者产生错误的理解,在本文的开头做一下说明. 如上图,原始图像大小为5*5,经过一次卷积后,图像变为3*3.那就是5*5的输入,经过一个卷积层后,输出的 ...

  3. 语义分割算法性能比较_语义分割江湖那些事儿

    今天的分享者是旷视余昌黔,来自旷视研究院 Detection 组,他将向我们分享旷视研究院 Detection 组近两年持续在做的 Semantic Segmentation 相关工作,代表性成果主要 ...

  4. 基于迁移学习的语义分割算法分享与代码复现

    摘要:语义分割的数据集是比较大的,因此训练的时候需要非常强大的硬件支持. 本文分享自华为云社区<[云驻共创]基于迁移学习的语义分割算法分享>,原文作者:启明. 此篇文章是分享两篇基于迁移学 ...

  5. FCN与U-Net语义分割算法

    FCN与U-Net语义分割算法 图像语义分割(Semantic Segmentation)是图像处理和是机器视觉技术中关于图像理解的重要一环,也是 AI 领域中一个重要的分支.语义分割即是对图像中每一 ...

  6. 道路场景语义分割算法

    道路场景语义分割算法 输入输出接口 Input: (1)左右两个摄像头采集的实时图像视频分辨率(整型int) (2)左右两个摄像头采集的实时图像视频格式 (RGB,YUV,MP4等) (3)摄像头标定 ...

  7. 汇总|实时性语义分割算法(全)

    我们在上篇--汇总|实时性语义分割算法(上篇)中,已经总结了[1]~[12],这里我们继续. [13]用于实时语义分割的双向分割网络 <BiSeNet: Bilateral Segmentati ...

  8. DL之SegNet:SegNet图像分割/语义分割算法的简介(论文介绍)、架构详解、案例应用等配图集合之详细攻略

    DL之SegNet:SegNet图像分割/语义分割算法的简介(论文介绍).架构详解.案例应用等配图集合之详细攻略 导读 基于CNN的神经网络SegNet算法可进行高精度地识别行驶环境. 目录 SegN ...

  9. CV之IS:计算机视觉之图像分割(Image Segmentation)/语义分割算法的简介、使用方法、案例应用之详细攻略

    CV之IS:计算机视觉之图像分割(Image Segmentation)/语义分割算法的简介.使用方法.案例应用之详细攻略 目录 图像分割算法的简介 1.常用的数据集 2.图像分割的评价指标

最新文章

  1. Python 编程语言的核心是什么?
  2. 浅谈ASP.net中的DataSet对象
  3. 【云计算虚拟化】Docker的基本命令使用
  4. [转]VirtualBox 复制VDI 并能创建新的虚拟机
  5. postman安装_Postman插件的应用与实战(二)
  6. Git上传代码到coding.net
  7. Win7下Maven的安装与配置
  8. spring cloud gateway Unhandled failure: Only one connection receive subscriber allowed.
  9. VIM快捷键(转载)
  10. Linux中eclipse配置Maven,eclipse maven选项怎么配置settings
  11. 【图像处理算法】Hough变换
  12. 计算机二级vb基础教程,2017计算机二级考试内容VB
  13. Java面向对象 - String类
  14. php随笔_PHP随笔 - 风清扬-深圳的个人页面 - OSCHINA - 中文开源技术交流社区
  15. 如何解决:微云下载文件总是下载失败
  16. CAD图导入SU中一次成面的方法
  17. [论文阅读] Adversarial Learning for Semi-Supervised Semantic Segmentation
  18. 算法创作 | 一元二次方程求解问题解决方法
  19. or1k启动文件分析
  20. 【参考】vintage、迁移率、滚动率、入催率等概念——看完你就懂了

热门文章

  1. 机器学习(六)——高斯判别法(GDA)
  2. 【聆思CSK6 视觉AI开发套件试用】AI控制直流电机转速接口打通
  3. android x86 v2ex,v2ex签到脚本改进 - 就爱阅读网
  4. Zabbix图形显示中乱码解决(拓展)
  5. [matlab] 7.快速搜索随机树(RRT---Rapidly-exploring Random Trees) 路径规划
  6. Zeus资源调度系统介绍
  7. AI厂工什么时候开始赛博搬砖?
  8. 【OCR】文字检测:传统算法、CTPN、EAST
  9. 无线蓝牙耳机什么牌子好一点?2022年蓝牙耳机推荐
  10. Zabbix-01简单导入MIB文件并测试