目标检测-制作数据集

图像采集

可以自己拍照,或者是搜集网络图片,我都试了一下,感觉自己拍的更好一些,原因有二,一是自己拍的图片尺寸风格都一致,更好处理,二是网络上的图片五花八门,差异太大,对于初学者来说,这些图片的组合可能很难轻易训练出一个好的结果,新手很难在短时间内获得成就感。

图像预处理

图片批量改名

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#coding=utf-8
import os
import sys
def rename():
#path=input("请输入路径(例如D:\\picture):")
#name=input("请输入开头名:")
#startNumber=input("请输入开始数:")
#fileType=input("请输入后缀名(如 .jpg、.txt等等):")
path=r"C:\\Users\\Administrator\\Desktop\\pic"
name=""
startNumber="10000"
fileType=".jpg"
print("正在生成以"+name+startNumber+fileType+"迭代的文件名")
count=1
filelist=os.listdir(path)
for files in filelist:
Olddir=os.path.join(path,files)
if os.path.isdir(Olddir):
continue
Newdir=os.path.join(path,name+str(count+int(startNumber))+fileType)
os.rename(Olddir,Newdir)
count+=1
print("一共修改了"+str(count)+"个文件")

rename()

深度学习按像素来进行计算,在不明显失真的情况下,建议先压缩图片,可以大大提高计算速度,尤其是手机拍的图片,比如我的手机拍的照片尺寸40001800,我把它按比例调整到了800360

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#提取目录下所有图片,更改尺寸后保存到另一目录
from PIL import Image
import os.path
import glob
def convertjpg(jpgfile,outdir,width=800,height=360):
img=Image.open(jpgfile)
try:
if(img.width<img.height):#长宽颠倒的情况(手机横排竖排的区别)
img = img.transpose(Image.ROTATE_90)
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("C:\\Users\\Administrator\\Desktop\\pic\\*.jpg"):
convertjpg(jpgfile,"C:\\Users\\Administrator\\Desktop\\xml")

图像标注

所谓图像标注就是框出图像中的某个对象,并且标记这个对象应属于哪一类。

标注后生成的文件格式通常是xml(voc)或者txt(yolo),图片和标注文件的一一对应的批量集合,就是数据集。

标注软件可以使用labelimg,这篇文章写得还不错,可以参考一下,我的总结是:

安装:pip install labelimg -i http://mirrors.aliyun.com/pypi/simple

打开:cmd输入labelimg

标注(打框):英文输入法下按w

保存:软件左上角设置好保存目录,ctrl+s

下一张图:英文输入法下按d

切换导出格式和设置默认标签:

标注完后把图片整理到images文件夹,标注文件放到labels文件夹,再进行分割,目录结构如下

images
      train
      val
      test
labels
      train
      val

Done.


目标检测-制作数据集
https://xinhaojin.github.io/2021/04/12/目标检测-制作数据集/
作者
xinhaojin
发布于
2021年4月12日
许可协议