一、前言

踩了三天的坑,终于成功配置好YOLOV7的分割部分了,泪目。网上的教程太少了,一开始卡在detetron2的安装问题上,然后卡在数据集的制作上,最后靠查github的Issues然后去找数据集的规律才最终配置成功,现在来分享一下这几天的配置成果。

以下为我这个新手踩坑YOLOV7分割的全过程(对应的python版本为3.8.13)。

二、配置过程

1、在GitHub上下载YOLOV7源码,按照源码中的requirment.txt文件进行配置:

pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple

2、下载yolov7-u7分支的文件(在左上角,点击一下main就能看到相应的分支)

3、安装detectron2,我的配置是cuda11.1、torch1.8.0+cu111、torchvision0.9.0+cu111、torchaudio0.8.0,另外还安装了VS2017;配置好torch之后开始按步骤安装detectron2,具体安装教程参考博客:

(29条消息) win+cuda10.2+VS2019+detectron2配置_爱画画的猴子的博客-CSDN博客

注:我尝试过了1.8.1和1.8.2的对应的gpu版本(cu102),都在安装的时候报错:RuntimeError: Error compiling objects for extension,然后安装了1.8.0版本成功了,但是却是cpu版本的,看了一下10.2没有1.8.0的gpu版,所以最后还是选择多装了一个cuda11.1,然后尝试了11.1对应的torch1.8.0+cu111版本,终于没有报错了。(如果不知道win10怎么同时容纳两个cuda版本的请上百度查,已经有很多教程了)

4、pycharm点文件-打开,选择到yolov7-u7的源码文件夹中的seg文件夹,然后点确定,配置好解释器,然后按照pycharm提示缺什么包就补什么包;设置到不再提示缺少依赖包之后就可以开始制作数据集了

三、数据集制作

数据集我这里制作的是COCO数据集。首先下载labelme进行数据标注制作(不会用的去百度,多的是教程),然后文件夹中会生成图片和json文件,在json文件中提取类别(需要按照类别制作编号,比如类别一编号为0,类别二编号为1......)、不规则标注坐标信息,然后把提取的信息放到txt文件中。下面分享具体的步骤:

1、先参照博客(29条消息) yolov5ds训练步骤_孟孟单单的博客-CSDN博客的第2点准备数据集中要求的文件排布进行设置(这个博客下载的文件中放到自己的数据集文件夹后记得把所有文件夹中的说明.md文件给删掉,否则添加在添加绝对路径的时候会出错),制作的png格式的label图片可以另外存在seg/labels/train1和seg/labels/val1中,其中seg/labels/train以及seg/labels/val两个文件夹需要留空,后面用来放txt文件

(虽然我感觉好像用不到这些png格式的标注图,只用到了jpg原图和txt标注文件;我使用json_to_dataset.exe文件的时候老报错,自己改了源码也还是不行,最后用了别的博客的代码把png标注图片做出来了,最后发现好像用不上,暴风哭泣;如果有会用png标注图片的老哥愿意分享的话请在评论区告诉我在哪能用上,谢谢!)

2、利用json文件制作txt文件(需要先把原图放到imgs文件夹下、把json文件放到jsons文件夹下,然后再使用以下代码文件进行制作),代码如下:

import json
import os
import cv2img_path = r".\imgs"
path = r".\jsons"
txt_path = r".\txts"
if os.path.exists(txt_path) == False:os.mkdir(txt_path)for i in os.listdir(path):img = cv2.imread(img_path + '\\' + i.split('.')[0] + '.bmp')print(img_path + '\\' + i.split('.')[0] + '.bmp')width = img.shape[1]height = img.shape[0]with open(path + '\\' + i, encoding='utf-8') as a:# 读取文件result = json.load(a)# 获取姓名#print(result.get("shapes")[0].get('points'))label = result.get("shapes")[0].get('label')print(label)point = result.get("shapes")[0].get('points')print(txt_path + '\\' + i.split(".")[0] + '.txt')f = open(txt_path + '\\' + i.split(".")[0] + '.txt', "w")f.close()f = open(txt_path + '\\' + i.split(".")[0] + '.txt', "a")if label == 'gray':f.write('0')elif label == 'white':f.write('1')elif label == 'black':f.write('2')for i in range(0, len(point)):for j in range(0, len(point[i])):dw = 1. / (width)dh = 1. / (height)if j == 0:f.write(' ' + str(point[i][j] * dw))elif j == 1:f.write(' ' + str(point[i][j] * dh))else:print("坐标出错了")f.close()

3、生成到txts文件夹下的txt文件就可以移动到数据集的seg/label文件夹下了,然后使用代码把对应的txt文件放到train以及val文件夹下,把txt文件放到train文件夹下的代码如下(放到val的代码只需要把下面的代码中两个path中的'\train'改成'\val即可'):

import os
import shutilcheck_path = r'.\paper_data\seg\images\train'   #原图文件夹,用于列出原图的名字
src_path = r'.\paper_data\seg\labels'   #所有txt文件存放的位置
out_path = r'.\paper_data\seg\labels\train'   #txt存放的位置
if os.path.exists(out_path) == False:os.mkdir(out_path)for i in os.listdir(check_path):shutil.move(src_path + '\\' + i.split('.')[0] + '.txt', out_path)

4、最后一步,把det文件夹下的train.txt和val.txt全部复制粘贴到seg文件夹下,然后用系统自带的记事本批量替换路径,train.txt把det/images路径全部改到去seg/images/train路径中,val.txt把det/images路径全部改到去seg/images/val路径中。

到此,数据集就制作完成啦!

配上我的文件夹排布图片以便进行对比:

(注:不用担心为什么自己没有.cache文件,这个是yolov7代码运行训练文件的时候自己生成的,我们制作的时候有.txt文件就行了 )

三、开始训练

1、配置好models/segment/yolov7-seg.yaml文件:把nc改为自己的类别数+1,比如说我有三类(不包括背景),那我的数据就是nc=4

2、在seg/data文件夹下新建文件data.yaml,我的data.yaml配置如下:

train: C:/Users/hp/Desktop/deep-learning/test/YOLOV7/yolov7-u7/seg/paper_data/seg/train.txt
val: C:/Users/hp/Desktop/deep-learning/test/YOLOV7/yolov7-u7/seg/paper_data/seg/val.txt
test: C:/Users/hp/Desktop/deep-learning/test/YOLOV7/yolov7-u7/seg/paper_data/seg/val.txt
# number of classes
nc: 3
# class names
names:0: gray1: white2: black

3、配置seg/segment/train.py文件(注意看清楚,是segment文件夹下的train.py,而不是源文件夹seg下的train.py)中的parse_opt()函数:

1)--weights改为'yolov5s.pt',文件可以在github的yolov5源码项目下面下载:

ultralytics/yolov5: YOLOv5

YOLOV7分割新手WIN10踩坑过程相关推荐

  1. 总结!一个产品新手的踩坑记

    本文讲的是总结!一个产品新手的踩坑记, 加入产品大家庭正好三个月了,在大佬们面前不敢造次,于是,觉得可以拿出来分享的,便是在这段春夏交替之光里,亲脚踩的一些坑,以及在坑里获得的一些小发现.所幸的是,在 ...

  2. HBase眼高手低从Shell到IDEA编程、心路笔记、踩坑过程

    HBase眼高手低从Shell到IDEA编程.心路笔记.踩坑过程 HBase眼高手低 通过shell操作Hbase Foundation 在terminal中输入hbase,就可以查看hbase命令的 ...

  3. java 做项目踩坑,web项目踩坑过程

    sql函数设计: 一开始本来是直接用Java的jdbc直接传输操作语句的.但后来学了存储过程发现存储过程可以提高不少的效率.就重构了自己对数据库的操作代码.包括:开启,查找,修改,关闭. 开启:直接使 ...

  4. win10系统用户:如何获得超级管理员权限(vue开发之Win10踩坑)

    作为win10系统的使用者Permission denied:cmd没权限.git没权限.npm没权限.delete文件夹也没权限.等等等:要权限没权限?或每次只给一次性权限?开发之痛,十指共愤! 如 ...

  5. Detectron2 win10踩坑记录

    Detectron2 win10踩坑记录 安装CUDA clone到本地 修改cocoeval.cpp第483行(不同版本行数不一样) 创建虚拟环境 安装pycocotools 安装VS2019或者生 ...

  6. centos 8 使用 nmcli 配置网桥Bridge(最后有踩坑过程)

    文章最后有踩坑过程,前面先写正常流程. 背景:最近想在自己笔记本上搭建openstack集群,再在集群上面上面跑K8S. 首先需要准备两个网络供虚拟机使用,一个网络用于连接互联网用来在线安装各种服务和 ...

  7. 记录一次C语言调用go生成的动态库的踩坑过程

    记录一次C语言调用go生成的动态库的踩坑过程 问题现象 由于某些特殊原因,需要在C语言中调用go语言生成的so,本来挺顺利,一切都运行的很好.突然某一天,不知道怎么回事,再一个新程序中无法正常运行了, ...

  8. FastDFS 的安装、使用、踩坑过程

    FastDFS 的一系列踩坑 1. 什么是 FastDFS 2. 为什么要使用 FastDFS 3. FastDFS 安装[CentOS] 3.1 Tracker 安装 3.2 Storage 安装 ...

  9. superset安装踩坑过程总结

    搭建这个superset花了我两天的时间,作为一个小白翻遍了全网,但其实都是些很小的问题,感谢网上大腿们的无私贡献,才得以成功,真的自学太难了-- Windows10,64bit 先避坑(我前面花了1 ...

最新文章

  1. 哪些品牌开始连接鸿蒙系统,华为鸿蒙系统硬件生态品牌升级为 HarmonyOS Connect
  2. 《LeetCode力扣练习》剑指 Offer 06. 从尾到头打印链表 Java
  3. python安装sqlite3_Python安装sqlite3
  4. dataset中的数据批量导入oracle数据库,c#如何将dataset中的数据批量导入oracle数据库...
  5. [转]KVM 虚拟机详细说明
  6. JQuery函数在IE浏览器中测试的注意事项
  7. 带你走近AngularJS - 基本功能介绍
  8. selenium java项目_1)selenium+ java集成,待深度项目流程应用
  9. Android 8.0 学习(12)---init.rc语法及解析过程总结
  10. 大公司里学做人,小公司里学做事。
  11. 1D和2D条码生成、检测、识别控件Barcode Xpress
  12. 【练习】Java实现的杨辉三角形控制台输出
  13. STDN:Scale-Transferrable Object Detection 论文解析
  14. 安装mysql的zip包
  15. 每个程序员都应该知道的事情
  16. scrapy--dytt(电影天堂)
  17. kubernetes Downward API
  18. 解决IIS无响应假死状态
  19. Java字节流读取shp_shp系列(四)——利用C++进行Shx文件的读(打开)
  20. (4)量子态矢与算子(算符)

热门文章

  1. Rokid从音箱产品到行业赋能:四年谋局,一鸣惊人
  2. jersey 简单使用
  3. 简洁但功能强大的EditPlus
  4. js与html和css的关系
  5. Validation 使用
  6. 阿里P7架构师到底有多难?
  7. P2006 赵神牛的游戏
  8. HUAWEI nova 青春版“大尺度”内存,手机再满都不怕
  9. Python数据分析实例,利用Pandas建立流域三层蒸发和蓄满产流模型
  10. 使用php的GD库拼接图片