Bootstrap

(目标检测)①数据集的建立(拍摄收集、数据集标注)

目录

一、拍摄收集

(一)视频拍摄        

(二)将MP4文件截取出图片

二、数据集标注

1、打开图片所在的文件夹

2、修改输出文件夹 

3、图片标注


 

        这一系列的博客将会帮助我自己(和大家)认识并熟悉——如何使用YOLO训练自定义的数据集,同时如何部署到Windows以及Linux上,下面有请我的检测目标——拉拉猪!

        在建立数据集之前,我从网络上收集了一些资料——关于如何建立一个有效的数据集,比如图像数据集的数量,检测目标的位置、大小、方向,甚至是光线、背景等等其他因素的影响,手机出来的资料我总结如下:

  1. 从不同的背景中拍摄不同角度方向的目标图像:图像数据集中,检测的对象必须至少有一个相似的差不多相同的形状、侧面的对象、相对大小、旋转角度、倾斜、照明……
  2. 保证采集的数据的质量,大小最好和使用场景的尺寸接近,尽量在该场景下采集数据的多样性,尽量采集自然场景下的各种各样的照片
  3. 数据集的数量越多越好(1000+/2000+),普遍来说,应该是有2000+,训练迭代2000+或更多
  4. 数据集中既要包括想要检测的物体,也要包括不想检测的物体,但是标注的话只标注想要检测的物体
  5. 如果是多个类检测的话,那么各个目标检测的类在你的数据中出现的次数差不多
  6. 目标所被标记部分是按照你希望如何被检测到的方式去标记(比如只检测一半、可重叠区域、比整个物体大一点……)
  7. 确保要检测的每个对象在训练集中都被标记
  8. 制作数据集你可以通过爬虫的方式来获取图像,也可以拍摄一段视频然后截取包含目标的图像
  9. 可以通过图像增强的方法来提升数据集的数量

感谢在收集资料中遇到的文档:
深度学习目标检测YOLO对于数据集的要求_柠檬树的橘子的博客-CSDN博客_yolo数据集要求文章目录前言一、目标检测对训练数据集的要求前言提示:之前在做深度学习的时候,发现如果想要训练自己的数据集,那么数据集的准备对检测结果有很大的影响。刚好最近看YOLO的帮助文档,发现有一些对数据集的要求和建议,这里就记录一下。一、目标检测对训练数据集的要求YOLO帮助文档确保要检测的每个对象在训练集中都被标记。数据集中的每个对象都应该被标记。在大多数训练问题中,你的数据集中有错误的标签。对于每个你想要检测的对象-在训练数据集中必须至少有一个相似的对象有差不多相同的:形状,侧面的对象,相对大小,https://blog.csdn.net/qq_41308881/article/details/110525477

【YOLO学习笔记——数据集】之一YOLO数据集制作1(含LabelImg工具讲解)_水亦心的博客-CSDN博客_yolo数据集制作前言如果你有什么问题,希望跟我能够一起交流,除了通过博客交流外,欢迎你加入我的QQ群,一起交流有关于机器学习、深度学习、计算机视觉有关内容。目前我并未确定具体的研究方向,所以现在 处于广泛涉猎阶段,希望我们能够一起沟通。下图是我的群二维码:一、综述YOLO有自己训练好的数据集,在YOLO v2 中,数据集可检测的类别达9000种以上,但是9000毕竟不是全部,它能涵盖大部分的物体识...https://blog.csdn.net/shuiyixin/article/details/82623613以及知乎上的相关回答……

一、拍摄收集

(一)视频拍摄        

        从以上的方面中考虑,我希望制作一个数据集:(由于是一个比较简单的目标——图像的数据量在600张左右

  • 背景一(桌面上):光线不太强、拍摄较近、拍摄各个角度(60s-60张)
  • 背景二(拿手上):光纤适合、拍摄各个角度(60s-60张)
  • 背景三(被子上):光纤不太强(有阴影)、拍摄各个角度、远近结合(60s-60张)
  • 背景四(有一个差不多的物体在旁边):拍摄各个角度(60s-60张)
  • 背景五:强光照射、拍摄各个角度(60s-60张)
  • 背景六:弱光微射、拍摄各个角度(60s-60张)
  • 背景七(稍微变形):拍摄各个角度(60s-60张)
  • 背景八(粉色背景):拍摄各个角度(60s-60张)
  • 背景九(键盘上):拍摄较远、拍摄各个角度(60s-60张)

         于是,我用手机拍摄了拉拉猪的一系列的视频:

(二)将MP4文件截取出图片

        需要注意的是:名字要从1开始一直往后,如果不是自己截取的图片,那么可以通过看图软件对文件名批量修改名称(网上说:2345看图王可以)

import cv2
import os

# 视频的帧数为30,那么60s的视频一共有1800帧,选择60张照片,则选择每隔30帧选一张

path_video = "E:/work/VOC2021/videos/拉拉猪 ("
form = ").mp4"
save_pictures = "E:/work/VOC2021/JPEGImages/"

count = 0
for num in range(1,10):
    # 视频数量一共是9个
    path_cv = path_video + str(num) + form
    vc = cv2.VideoCapture(path_cv)
    
    i = 0
    while vc.isOpened():
        rval, img = vc.read()
        
        frame_count = vc.get(cv2.CAP_PROP_FRAME_COUNT)  # 视频文件的帧数
        frame_fps = vc.get(cv2.CAP_PROP_FPS)  # 视频文件的帧率
        
        if i==frame_count:  
            break
        else:
            i=i+1
            if i % int(frame_count/60) == 0:  #选取60照片
                count = count + 1
                # 图片命名及保存路径
                filename=str(count)+".jpg"
                cv2.imwrite(save_pictures+filename,img)
            
    print("第{}个视频截取图片完毕!".format(num))
        
    # 释放资源
    vc.release()
    cv2.destroyAllWindows()        

注意:图片保存的位置不能有中文字符,否则生成的图片将找不到!!!

最后的结果如下:

然后建立如下所示的文件目录结构:

VOC:Visual Object Classes

二、数据集标注

接下来就是对541张照片进行图片标注了,这一步一张图片都不能少,我们所用的软件是LabelImg

 软件分享:

链接:https://pan.baidu.com/s/1jrWfEACNLSHfscCAU6KgXw 
提取码:8888 
--来自百度网盘超级会员V2的分享

界面:

1、打开图片所在的文件夹

 

2、修改输出文件夹 

 

3、图片标注

输入法切换为英文,按下“W”,会出现如下的十字

 然后按住鼠标左键拖动,直到将目标包括在内(选取的区域尽可能包含),然后输入目标的类别:lalazhu

 

 这个时候右上角将会产生一个类别:

 然后点击:Save  (保存该图片)—— Next Image  (开始下一张图片的标注)

 然后重复操作:按下“W”,鼠标选择,save,next image

 直到标注完成!

文件夹显示如下:

其中的第一张的图片标注:

<annotation>
	<folder>JPEGImages</folder>
	<filename>1.jpg</filename>
	<path>E:\work\VOC2021\JPEGImages\1.jpg</path>
	<source>
		<database>Unknown</database>
	</source>
	<size>
		<width>1920</width>
		<height>1080</height>
		<depth>3</depth>
	</size>
	<segmented>0</segmented>
	<object>
		<name>lalazhu</name>
		<pose>Unspecified</pose>
		<truncated>0</truncated>
		<difficult>0</difficult>
		<bndbox>
			<xmin>334</xmin>
			<ymin>326</ymin>
			<xmax>1623</xmax>
			<ymax>855</ymax>
		</bndbox>
	</object>
</annotation>

 

 

;