实验目标

能够对包装上的标签进行检测,找出其位置并进行分类。(由于拿到的标签数据与需要的不一致,该处主要讲解格式转化及其标注框转化的一点心得)

标注工具

之前使用的标注工具为labelImg保存的为xml格式,使用的是矩形框标注。拿到的数据是使用labelme标注的为json格式,其是通过多边形标注的,这其中需要进行转化。另外拿到的数据为675*1280尺寸的不支持YOLO的输入,将尺寸压缩的同时要注意标注框的坐标也要进行相应的转化。(YOLO中使用矩形框进行标注)

https://github.com/spytensor/prepare_detection_dataset


关键的转化函数部分

批量复制图片

#提取目录下所有图片,复制后保存到另一目录
from PIL import Image
import os.path
import glob
import shutilsaved_path = "./VOC2007/"
labelme_path = "./train_1280/"  #5.复制图片到 VOC2007/JPEGImages/下
image_files = glob.glob(labelme_path + "*.jpg")
print("copy image files to VOC007/Images/")
for image in image_files:shutil.copy(image,saved_path +"JPEGImages/")

批量更改图片尺寸

#提取目录下所有图片,更改尺寸后保存到另一目录
from PIL import Image
import os.path
import globdef convertjpg(jpgfile,outdir,width=416,height=416):img=Image.open(jpgfile)try:new_img=img.resize((width,height),Image.BILINEAR)   new_img.save(os.path.join(outdir,os.path.basename(jpgfile)))except Exception as e:print(e)for jpgfile in glob.glob("E:\\360MoveData\\Users\\Administrator\\Desktop\\TagDetect\\VOC2007\\JPEGImages\\*.jpg"):convertjpg(jpgfile,"E:\\360MoveData\\Users\\Administrator\\Desktop\\TagDetect\\VOC2007\\JPEGImages")

labelme转voc格式

import os
import numpy as np
import codecs
import json
from glob import glob
import cv2
import shutil
from sklearn.model_selection import train_test_split
#1.标签路径
labelme_path = "./train_1280/"              #原始labelme标注数据路径
saved_path = "./VOC2007/"                #保存路径#2.创建要求文件夹
if not os.path.exists(saved_path + "Annotations"):os.makedirs(saved_path + "Annotations")
if not os.path.exists(saved_path + "JPEGImages/"):os.makedirs(saved_path + "JPEGImages/")
if not os.path.exists(saved_path + "ImageSets/Main/"):os.makedirs(saved_path + "ImageSets/Main/")#3.获取待处理文件
files = glob(labelme_path + "*.json")
files = [i.split("/")[-1].split(".json")[0] for i in files]#4.读取标注信息并写入 xml
for json_file_ in files:json_filename = labelme_path + json_file_ + ".json"json_file = json.load(open(json_filename,"r",encoding="utf-8"))height, width, channels = cv2.imread(labelme_path + json_file_ +".jpg").shapewith codecs.open(saved_path + "Annotations/"+json_file_ + ".xml","w","utf-8") as xml:xml.write('<annotation>\n')xml.write('\t<folder>' + 'UAV_data' + '</folder>\n')xml.write('\t<filename>' + json_file_ + ".jpg" + '</filename>\n')xml.write('\t<source>\n')xml.write('\t\t<database>The UAV autolanding</database>\n')xml.write('\t\t<annotation>UAV AutoLanding</annotation>\n')xml.write('\t\t<image>flickr</image>\n')xml.write('\t\t<flickrid>NULL</flickrid>\n')xml.write('\t</source>\n')xml.write('\t<owner>\n')xml.write('\t\t<flickrid>NULL</flickrid>\n')xml.write('\t\t<name>Xiaotian</name>\n')xml.write('\t</owner>\n')xml.write('\t<size>\n')xml.write('\t\t<width>'+ str(width) + '</width>\n')xml.write('\t\t<height>'+ str(height) + '</height>\n')xml.write('\t\t<depth>' + str(channels) + '</depth>\n')xml.write('\t</size>\n')xml.write('\t\t<segmented>0</segmented>\n')for multi in json_file["shapes"]:points = np.array(multi["points"])xmin = int(min(points[:,0])*(416/675))xmax = int(max(points[:,0])*(416/675))ymin = int(min(points[:,1])*(416/1280))ymax = int(max(points[:,1])*(416/1280))label = multi["label"]if xmax <= xmin:passelif ymax <= ymin:passelse:xml.write('\t<object>\n')xml.write('\t\t<name>'+"tag"+'</name>\n')xml.write('\t\t<pose>Unspecified</pose>\n')xml.write('\t\t<truncated>1</truncated>\n')xml.write('\t\t<difficult>0</difficult>\n')xml.write('\t\t<bndbox>\n')xml.write('\t\t\t<xmin>' + str(xmin) + '</xmin>\n')xml.write('\t\t\t<ymin>' + str(ymin) + '</ymin>\n')xml.write('\t\t\t<xmax>' + str(xmax) + '</xmax>\n')xml.write('\t\t\t<ymax>' + str(ymax) + '</ymax>\n')xml.write('\t\t</bndbox>\n')xml.write('\t</object>\n')print(json_filename,xmin,ymin,xmax,ymax,label)xml.write('</annotation>')#5.复制图片到 VOC2007/JPEGImages/下
image_files = glob(labelme_path + "*.jpg")
print("copy image files to VOC007/JPEGImages/")
for image in image_files:shutil.copy(image,saved_path +"JPEGImages/")#6.split files for txt
txtsavepath = saved_path + "ImageSets/Main/"
ftrainval = open(txtsavepath+'/trainval.txt', 'w')
ftest = open(txtsavepath+'/test.txt', 'w')
ftrain = open(txtsavepath+'/train.txt', 'w')
fval = open(txtsavepath+'/val.txt', 'w')
total_files = glob("./VOC2007/Annotations/*.xml")
total_files = [i.split("/")[-1].split(".xml")[0] for i in total_files]
#test_filepath = ""
for file in total_files:ftrainval.write(file + "\n")
#test
#for file in os.listdir(test_filepath):
#    ftest.write(file.split(".jpg")[0] + "\n")
#split
train_files,val_files = train_test_split(total_files,test_size=0.15,random_state=42)
#train
for file in train_files:ftrain.write(file + "\n")
#val
for file in val_files:fval.write(file + "\n")ftrainval.close()
ftrain.close()
fval.close()
#ftest.close()

训练结果

本次训练采用的为yolov3-keras版的代码,没有加载预训练的权重,迭代步数为3000,训练数据为243,测试数据159

YOLOv3-Tiny检测包装标签相关推荐

  1. YOLOV3目标检测模型训练实例

    YOLOV3目标检测 从零开始学习使用keras-yolov3进行图片的目标检测,比较详细地记录了准备以及训练过程,提供一个信号灯的目标检测模型训练实例,并提供相关代码与训练集. DEMO测试 YOL ...

  2. 【yolov3目标检测】(3) opencv+yolov3 检测交通路况,附python完整代码

    各位同学好,今天和大家分享一下如何使用 opencv 调用 yolov3 模型,加载网络权重,很方便地实现 yolov3 目标检测.先放张图看效果. 使用的网上找的行车记录仪视频做测试,数据集采用CO ...

  3. 使用PyTorch从零开始实现YOLO-V3目标检测算法 (一)

    原文:https://blog.csdn.net/u011520516/article/details/80222743 点击查看博客原文 标检测是深度学习近期发展过程中受益最多的领域.随着技术的进步 ...

  4. 使用pytorch从零开始实现YOLO-V3目标检测算法 (二)

    原文:https://blog.csdn.net/u011520516/article/details/80212960 博客翻译 这是从零开始实现YOLO v3检测器的教程的第2部分.在上一节中,我 ...

  5. 使用PyTorch从零开始实现YOLO-V3目标检测算法 (四)

    原文:https://blog.csdn.net/u011520516/article/details/80228130 点击查看博客原文 这是从零开始实现YOLO v3检测器的教程的第4部分,在上一 ...

  6. 使用PyTorch从零开始实现YOLO-V3目标检测算法 (三)

    原文:https://blog.csdn.net/u011520516/article/details/80216009 点击查看博客原文 这是从零开始实现YOLO v3检测器的教程的第3部分.第二部 ...

  7. 深度学习和目标检测系列教程 15-300:在 Python 中使用 OpenCV 执行 YOLOv3 对象检测

    @Author:Runsen 上次讲了yolov3,这是使用yolov3的模型通过opencv的摄像头来执行YOLOv3 对象检测. 导入所需模块: import cv2 import numpy a ...

  8. python label显示图片_高大上的YOLOV3对象检测算法,使用python也可轻松实现

    继续我们的目标检测算法的分享,前期我们介绍了SSD目标检测算法的python实现以及Faster-RCNN目标检测算法的python实现以及yolo目标检测算法的darknet的window环境安装, ...

  9. YOLOv3目标检测算法——通俗易懂的解析

    目录 YOLOv3目标检测算法 前沿 一.YOLOv3 二.损失函数 YOLOv3目标检测算法 前沿 前两篇文章我们讲了下关于YOLOv1和YOLOv2的原理,有不懂的小伙伴可以回到前面再看看: YO ...

  10. Pyqt搭建YOLOV3目标检测界面(超详细+源代码)

    Pyqt搭建YOLOV3目标检测界面(超详细+源代码) 2022.5.25更新 2021.11.23 更新 2021.11.22 更新 实现效果如下所示,可以检测图片.视频以及摄像头实时检测. 0.准 ...

最新文章

  1. Nodejs Express dockerfile最佳实践
  2. 给QTreeWidget添加右键菜单功能
  3. C# 读取Excel文件,并写入word模板文档
  4. C语言满分:L1-061 新胖子公式 (10分)
  5. java操作word文档,深度解析,值得收藏
  6. vue ref 属性
  7. 网信集团:一直在正常运营 高管被带走消息不实
  8. 如果访问设备屏幕宽度小于1024,跳转到移动端
  9. MySQL经典书籍推荐
  10. PyAudio库简介
  11. win7下keil4开发s3c2440裸机的开发环境搭建
  12. 离散数学学习笔记——集合的符号表示
  13. 简易数据分析 04 | Web Scraper 初尝--抓取豆瓣高分电影
  14. UnityVR-初识Unity-实践-制作一个工程场景
  15. linux系统怎么下载
  16. 目前市场上最好用的时序数据库是什么?
  17. 爆料:曹旭东创立自动驾驶公司Momenta 首次公开项目细节
  18. 电机磁链和反电势系数关系
  19. multisim元件库介绍
  20. css发光js特效文字动画

热门文章

  1. 高通android 7.0彩信发送过程中使用到的google pdu
  2. 网络爬虫系列(一):chrome抓包分析
  3. linux vbox 不能使用scsi_id 查看uuid,51CTO博客-专业IT技术博客创作平台-技术成就梦想...
  4. 币圈投资比人生风险还大吗?
  5. 解决python各种包版本不匹配的通用方法
  6. 2023免费的苹果手机备份app软件iMazing
  7. 汇编串操作指令std 和 cld
  8. 台式计算机控制面板里没有无线网络,为何台式电脑里没有无线wifi这一选项
  9. 《中医基础理论学习》--绪论
  10. python字典保存星座性格特点并输出