• FCN中制作自己的数据集并进行训练


    目录

    1.FCN论文详解

    2.FCN项目实战(使用PASCAL VOC 2012数据集)

    3.图像数据集的收集

    4.工具的选择

    (1)工具一

    (2)工具二

    (3)工具三

    5. 数据集文件的位置

     6.训练数据集


    1.FCN论文详解

    https://mydreamambitious.blog.csdn.net/article/details/125966298

    2.FCN项目实战(使用PASCAL VOC 2012数据集)

    https://mydreamambitious.blog.csdn.net/article/details/125774545

    注:

    深度学习领域语义分割常用数据集:深度学习领域语义分割常用数据集:PASCAL VOC 2007 ,2012 NYUDv2 SUNRGBD CityScapes CamVid SIFT-Flow 7大数据集介绍_Keep_Trying_Go的博客-CSDN博客

    3.图像数据集的收集

    这里提供自己通过下载的图片制作的训练数据集,只有39张图片,读者首先可以使用这份数据集进行训练,没有问题之后跟着这个再制作自己的数据集(数据集的收集自己也可以从生活中收集,也不一定非要从网上下载,这样也许更有意义)。

    链接https://pan.baidu.com/s/1hUZYmy0iQ5dG4dbDD69ZwA 
    提取码:25d6

    4.工具的选择

    (1)工具一

    labelme是一种多边形标注工具,可以准确的将轮廓标注出来,常用于分割。

    labelme:这个款工具我没有使用过,其实这个使用方式和下面要介绍的labelImg使用方式一样。

    安装:pip install labelme

    打开:直接在下载的环境中输入:labelme

    参考链接:https://blog.csdn.net/weixin_44245653/article/details/119150966

    (2)工具二

    labelimg,是一种矩形标注工具,常用于目标识别和目标检测,可直接生成yolo读取的txt标签格式,但其只能进行矩形框标注。既然这个工具主要用于图像识别和目标检测,那么为什么可以用来制作分割数据集呢,主要是这里可以制作PASCAL VOC数据集,但是在最后不会生成标签文件,所以这款工具主要用于我们这个实战项目中生成.xml文件。

    安装:pip install labelImg
    打开:直接在下载的环境中输入:labelImg

    首先打开工具:

     

    点击保存之后会产生.xml 文件:

     关于这款工具的简单使用就是这样,更多的可以参考B站视频学习。

    (3)工具三

    1. 安装:
    2. 第一步:pip install paddlepaddle -i https://pypi.tuna.tsinghua.edu.cn/simple
    3. 第二步:pip install eiseg -i https://pypi.tuna.tsinghua.edu.cn/simple
    打开:eiseg

    也许在安装完成之后打开会报这个错。

    AttributeError: module 'cv2' has no attribute 'gapi_wip_gst_GStreamerPipeline'
    

    解决方法:

    pip install --user --upgrade opencv-python -i https://pypi.tuna.tsinghua.edu.cn/simple
    

     第一步首先加载模型参数:

    模型类型适用场景模型结构模型下载地址
    高精度模型通用场景的图像标注HRNet18_OCR64static_hrnet18_ocr64_cocolvis
    轻量化模型通用场景的图像标注HRNet18s_OCR48static_hrnet18s_ocr48_cocolvis
    高精度模型通用图像标注EdgeFlowstatic_edgeflow_cocolvis
    高精度模型人像场景标注HRNet18_OCR64static_hrnet18_ocr64_human
    轻量化模型人像场景标注HRNet18s_OCR48static_hrnet18s_ocr48_human

    注:这里加载的模型根据自己标注的数据集情况来,比如适用的是什么场景的。

     第二步打开文件:

    第三步添加标签:

     

     第四步选择保存的数据格式:JSON或者COCO

    选择JSON就会每一张图片保存一个JSON文件,COCO数据格式只会保存在一个JSON文件中。 

    第五步点击目标即可进行图像标注(只需点击图像中的目标即可):

     

     

    虽然我们要的是这样灰度的图,但是直接这样看不是很好,所以我们将其添加调色板:

    1. import os
    2. import cv2
    3. import numpy as np
    4. from PIL import Image
    5. def palette():
    6. #获取当前目录
    7. root=os.getcwd()
    8. #灰度图的位置
    9. imgFile=root+'\\img'
    10. #将所有的灰度图添加调色板
    11. for i,img in enumerate(os.listdir(imgFile)):
    12. filename, _ = os.path.splitext(img)
    13. #这个地方需要将图片路径添加完整,不然后面读取图片文件不存在
    14. img='img/'+img
    15. img = cv2.imread(img, cv2.IMREAD_GRAYSCALE)
    16. save_path=root+'\\imgPalette\\'+filename+'.png'
    17. img = Image.fromarray(img) # 将图像从numpy的数据格式转为PIL中的图像格式
    18. palette = []
    19. for i in range(256):
    20. palette.extend((i, i, i))
    21. #这里设置21个颜色,其中背景为黑色,总共21个类别(包括背景)
    22. palette[:3 * 21] = np.array([[0, 0,0],[0,255,255],[0, 128, 0],[128, 128, 0],[0, 0, 128],
    23. [128, 0, 128],[0, 128, 128],[128, 128, 128],[64, 0, 0],[192, 0, 0],
    24. [64, 128, 0],[192, 128, 0],[64, 0, 128],[192, 0, 128],[64, 128, 128],
    25. [192, 128, 128],[0, 64, 0],[128, 64, 0],[0, 192, 0],[128, 192, 0],[0, 64, 128]
    26. ], dtype='uint8').flatten()
    27. img.putpalette(palette)
    28. # print(np.shape(palette)) 输出(768,)
    29. img.save(save_path)
    30. if __name__ == '__main__':
    31. print('Pycharm')
    32. palette()

    代码参考:https://blog.csdn.net/weixin_39886251/article/details/111704330

    工具选择的同时数据集的标注也完成了,即可进行下面的数据集存放的文件位置。 

    5. 数据集文件的位置

    反正数据集不管怎么存放,都要根据程序的操作来,并不是说一定要和我的这个一样,你可以对程序进行修改(如果有什么报错,不要害怕,跟着错误的提示继续修改)。

     

     

    注:如果对于上面的文件放置位置不是很明白,可以自己下载那个PASCAL VOC 2012数据集,自己查看一下这个数据集的文件位置是怎么放的(其实自己可以修改程序,不一定非要按这样的格式来做)。 

    深度学习领域语义分割常用数据集:深度学习领域语义分割常用数据集:PASCAL VOC 2007 ,2012 NYUDv2 SUNRGBD CityScapes CamVid SIFT-Flow 7大数据集介绍_Keep_Trying_Go的博客-CSDN博客 

     6.训练数据集

    train.py文件中的一些地方需要修改:数据集的位置,类别数。其他的根据自己的需要进行修改。

    1. #数据集文件的位置
    2. parser.add_argument("--data-path", default="data/Mydata/", help="VOCdevkit root")
    3. #数据集的类别数
    4. parser.add_argument("--num-classes", default=1, type=int)
    5. #是否使用辅助分支
    6. parser.add_argument("--aux", default=True, type=bool, help="auxilier loss")
    7. #默认使用CPU设备
    8. parser.add_argument("--device", default="cuda", help="training device")
    9. #使用的batchsize大小
    10. parser.add_argument("-b", "--batch-size", default=4, type=int)
    11. #迭代的数量
    12. parser.add_argument("--epochs", default=30, type=int, metavar="N",
    13. help="number of total epochs to train")
    14. #训练的学习率
    15. parser.add_argument('--lr', default=0.0001, type=float, help='initial learning rate')
    16. #训练的动量
    17. parser.add_argument('--momentum', default=0.9, type=float, metavar='M',
    18. help='momentum')
    19. #权重延迟
    20. parser.add_argument('--wd', '--weight-decay', default=1e-4, type=float,
    21. metavar='W', help='weight decay (default: 1e-4)',
    22. dest='weight_decay')
    23. #训练多少个epoch打印一次
    24. parser.add_argument('--print-freq', default=10, type=int, help='print frequency')
    25. #当训练出现中断时,重新加载从上一次中断的权重文件开始训练
    26. parser.add_argument('--resume', default='', help='resume from checkpoint')
    27. #开始训练的epoch
    28. parser.add_argument('--start-epoch', default=0, type=int, metavar='N',
    29. help='start epoch')
    30. # Mixed precision training parameters
    31. parser.add_argument("--amp", default=False, type=bool,
    32. help="Use torch.cuda.amp for mixed precision training")

     进行预测的文件predict.py:

  • 相关阅读:
    Python之并发编程(线程)
    c/c++开发时的VsCode插件
    一个优秀的程序员应该养成哪些好的习惯?
    DATA AI Summit 2022提及到的对 aggregate 的优化
    内核错误怎么解决?Win11系统内核错误解决方法
    js 数组中去重的五种方法
    react组件间通信之context
    《HTML+CSS+JavaScript》之第14章 文本样式
    HarmonyOS/OpenHarmony应用开发-DevEco Studio新建项目的整体说明
    原子搜索算法改进的深度极限学习机DELM的分类
  • 原文地址:https://blog.csdn.net/Keep_Trying_Go/article/details/126075642