源码下载:https://gitee.com/zhankun3280/my_yolov5-6.0

1、依赖环境

  • ubuntu 18.04
  • python 3.6.9
  • opencv 4.5.0
  • pytorch 1.9.0
  • torchvision 0.10.0

2、准备数据集

链接: https://pan.baidu.com/s/1TqCX5nRPXIZ1jbyaye3e3A 密码: 9fr6

3、训练数据相关工作

(1)解压数据集,放在yolov5-6.0根目录下
(2)删除ImageSets文件夹下的内容,在/ImageSets文件夹下新建Main文件夹
(3)数据集分类,运行test.py(注意路径正确)。会在/ImageSets/Main文件夹下生成四个txt文件,trainval.txt、test.txt、train.txt、val.txt。

# coding:utf-8import os
import random
import argparseparser = argparse.ArgumentParser()
#xml文件的地址,根据自己的数据进行修改 xml一般存放在Annotations下
parser.add_argument('--xml_path', default='./Annotations', type=str, help='input xml label path')
#数据集的划分,地址选择自己数据下的ImageSets/Main
parser.add_argument('--txt_path', default='./ImageSets/Main', type=str, help='output txt label path')
opt = parser.parse_args()trainval_percent = 1.0
train_percent = 0.9
xmlfilepath = opt.xml_path
txtsavepath = opt.txt_path
total_xml = os.listdir(xmlfilepath)
if not os.path.exists(txtsavepath):os.makedirs(txtsavepath)num = len(total_xml)
list_index = range(num)
tv = int(num * trainval_percent)
tr = int(tv * train_percent)
trainval = random.sample(list_index, tv)
train = random.sample(trainval, tr)file_trainval = open(txtsavepath + '/trainval.txt', 'w')
file_test = open(txtsavepath + '/test.txt', 'w')
file_train = open(txtsavepath + '/train.txt', 'w')
file_val = open(txtsavepath + '/val.txt', 'w')for i in list_index:name = total_xml[i][:-4] + '\n'if i in trainval:file_trainval.write(name)if i in train:file_train.write(name)else:file_val.write(name)else:file_test.write(name)file_trainval.close()
file_train.close()
file_val.close()
file_test.close()

(4)在data文件夹下新建labels文件夹,然后在yolov5-6.0文件夹下新建my_labels.py文件,并运行(注意路径,注意数据集类别)。会在data文件夹下生成三个txt文件,train.txt、val.txt、test.txt。

# -*- coding: utf-8 -*-
import xml.etree.ElementTree as ET
import os
from os import getcwdsets = ['train', 'val', 'test']
classes = ['missing_hole','mouse_bite', 'open_circuit', 'short', 'spur', 'spurious_copper']  #自己训练的类别abs_path = os.getcwd()
print(abs_path)def convert(size, box):dw = 1. / (size[0])dh = 1. / (size[1])x = (box[0] + box[1]) / 2.0 - 1y = (box[2] + box[3]) / 2.0 - 1w = box[1] - box[0]h = box[3] - box[2]x = x * dww = w * dwy = y * dhh = h * dhreturn x, y, w, hdef convert_annotation(image_id):in_file = open ('/home/lyp/Downloads/yolo/yolov5-opencv-dnn-cpp-main/yolov5-6.0/data/Annotations/%s.xml' % (image_id), encoding='UTF-8')out_file = open('/home/lyp/Downloads/yolo/yolov5-opencv-dnn-cpp-main/yolov5-6.0/data/labels/%s.txt' % (image_id), 'w')tree = ET.parse(in_file)root = tree.getroot()size = root.find('size')w = int(size.find('width').text)h = int(size.find('height').text)for obj in root.iter('object'):# difficult = obj.find('difficult').textif obj.find('difficult'):difficult = float(obj.find('difficult').text)else:difficult = 0cls = obj.find('name').textif cls not in classes or int(difficult) == 1:continuecls_id = classes.index(cls)xmlbox = obj.find('bndbox')b = (float(xmlbox.find('xmin').text), float(xmlbox.find('xmax').text), float(xmlbox.find('ymin').text),float(xmlbox.find('ymax').text))b1, b2, b3, b4 = b# 标注越界修正if b2 > w:b2 = wif b4 > h:b4 = hb = (b1, b2, b3, b4)bb = convert((w, h), b)out_file.write(str(cls_id) + " " + " ".join([str(a) for a in bb]) + '\n')wd = getcwd()
for image_set in sets:if not os.path.exists('/home/lyp/Downloads/yolo/yolov5-opencv-dnn-cpp-main/yolov5-6.0/data/labels/'):os.makedirs('/home/lyp/Downloads/yolo/yolov5-opencv-dnn-cpp-main/yolov5-6.0/data/labels/')image_ids = open('/home/lyp/Downloads/yolo/yolov5-opencv-dnn-cpp-main/yolov5-6.0/data/ImageSets/Main/%s.txt' % (image_set)).read().strip().split()list_file = open('/home/lyp/Downloads/yolo/yolov5-opencv-dnn-cpp-main/yolov5-6.0/data/%s.txt' % (image_set), 'w')for image_id in image_ids:list_file.write(abs_path +  '/data/images/%s.jpg\n' % (image_id))convert_annotation(image_id)list_file.close()

(5)在models文件夹下新建文件my_pcb.yaml(注意修改类别数量nc)

# YOLOv5 												

基于yolov5-6.0版本的PCB板缺陷检测(Python/C++部署)相关推荐

  1. 基于深度学习的智能PCB板缺陷检测系统(Python+清新界面+数据集)

    摘要:智能PCB板缺陷检测系统用于智能检测工业印刷电路板(PCB)常见缺陷,自动化标注.记录和保存缺陷位置和类型,以辅助电路板的质检.本文详细介绍智能PCB板缺陷检测系统,在介绍算法原理的同时,给出P ...

  2. PCB板缺陷检测机器视觉识别算法 yolo

    PCB板缺陷检测机器视觉识别算法通过python+yolo系列网络深度学习模型对PCB电路板外观实时监测,当模型算法监测到有缺陷的PCB板时立即抓拍存档.Python是一种由Guido van Ros ...

  3. YOLOv5实战之PCB板缺陷检测

    在前面的文章中已经详细介绍了在本机上安装YOLOv5的教程,安装YOLOv5可参考前面的文章YOLOv5训练自己的数据集(超详细)https://blog.csdn.net/qq_40716944/a ...

  4. 基于YOLOv5的PCB板缺陷检测

    一.数据集介绍 印刷电路板(PCB)瑕疵数据集:数据下载链接,是一个公共的合成PCB数据集,由北京大学发布,其中包含1386张图像以及6种缺陷(缺失孔,鼠标咬伤,开路,短路,杂散,伪铜),用于检测,分 ...

  5. 基于yolov5的Android版本目标检测app开发(部署安卓手机)

    基于yolov5的Android版本目标检测app开发(部署安卓手机) 0.项目开发需求 (1)开发app部署到安卓手机 (2)支持VOC数据集上所有的目标检测 1.开发环境搭建 windows10+ ...

  6. flyme最新7基于android,终于来了,魅族开始基于Android 7.0版本的Flyme内测

    拼 命 加 载 中 ... 在大部分厂商已经跟进基于Android 7.0的版本时,作为国内最著名的定制ROM之一的Flyme还停留在基于Android 6.0的版本,在系统更新速度上落后了很多.不过 ...

  7. yolov5 6.0版本->onnx->ncnn +安卓部署 附加ncnn环境配置 保姆级详细教程

    目标检测:yolov5 6.0版本 ncnn环境安装 至 +安卓部署 一条龙教程 文章目录 背景 一.准备阶段 1.参考文章 #2.流程 二.pt模型->onnx 三.Windows下ncnn环 ...

  8. 基于Hadoop2.2.0版本分布式云盘的设计与实现

    基于Hadoop2.2.0版本分布式云盘的设计与实现 一.前言 在学习了hadoop2.2一个月以来,我重点是在学习hadoop2.2的HDFS.即是hadoop的分布式系统,看了很久的源代码看的我真 ...

  9. PCB板常用检测方法

    本文来介绍PCB板常用检测方法 1.PCB板人工目测 使用放大镜或校准的显微镜,利用操作人员视觉检查来确定电路板合不合格,并确定什么时候需进行校正操作,它是最传统的检测方法.它的主 要优点是低的预先成 ...

最新文章

  1. (自兴人工智能)python字符串
  2. Sharepoint 2007 用代码聚合所有子网站文章 (populating data sources in code)
  3. 计算TPCC值的例子
  4. Java正成为COBOL的一部分-它将成为COBOL的一部分吗?
  5. linux的sonar安装,Linux安装sonar
  6. Java笔记-Java中桥接模式
  7. 【Elasticsearch】Elasticsearch analyzer 分词器
  8. 在JS中使用Ajax
  9. python学习day1:初识python
  10. 线程池及其实现文章一
  11. 【LeetCode】【字符串】题号:*557. 反转字符串中的单词 III
  12. Visual Studio Code (vscode)配置LaTeX最详细版(vscode下载安装+基本设置+内外pdf查看器设置+个人配置代码)
  13. android程序设计排序方法,Android编程实现对文件夹里文件排序的方法
  14. 计算机专业装win几,低配电脑装win10还是win7系统比较合适
  15. Arduino NBIoT使用方法一
  16. 移动宽带套餐介绍_中国移动宽带最新套餐介绍
  17. OfficeOnline和OpenOffice对比
  18. project 2016 显示、取消任务序号
  19. Python-Python 2 和Python3
  20. js生成二维码以及插入图片

热门文章

  1. 企业邮箱域名怎么选?公司邮箱格式怎么写?
  2. zabbix + nexmo = 电话告警
  3. c语言编写坦克大战设计报告,c语言编写坦克大战源代码
  4. 苹果系统怎么链接共享服务器,mac连接共享服务器设置
  5. Mac安装软件提示“已损坏,无法打开”的解决办法
  6. windows计算机搜索记录,win7清除文件搜索记录及电脑数据恢复教程
  7. AutoCad 新建或打开对话框 经常变为命令提示行的解决办法!
  8. BAT解密:互联网技术发展之路(1) - 技术发展的驱动力
  9. 269个JavaScript工具函数,助你提升工作效率(上)
  10. 【开关电源五】电源拓扑之全桥、半桥、推挽