在mac上用自己的数据训练YOLOv3的准备工作

1 准备数据集

1.1利用python爬虫收集图片

百度一下,用靠谱的爬虫方法,从网络上快速收集符合你要求的图片。

1.2数据增强

借助keras,对数据做旋转、平移等操作,以增大样本数量。

2 图片预处理

2.1 统一尺寸大小(yolo可不用)

yolov3有自带的统一大小的步骤。这部分可以不用。其他网络按需选择。

import cv2
import os

fullfilename=[]
filepath = "F:/PycharmProjects/image"   # 不能包含中文路径
filepath1 = "F:/PycharmProjects/resize"
for filename in os.listdir(filepath):
    print(filename)
    print(os.path.join(filepath, filename))
    filelist = os.path.join(filepath, filename)
    fullfilename.append(filelist)

i = 1
for imagename in fullfilename:
    img = cv2.imread(imagename)
    img = cv2.resize(img, (416, 416))   
    resizename = str(i)+'.jpg'          # 命名形式为1,2,3...当然啦也可以根据你喜好自己改
    isExists = os.path.exists(filepath1)
    if not isExists:
        os.makedirs(filepath1)
        print('mkdir resizename accomploshed')
    savename = filepath1+'/'+resizename
    cv2.imwrite(savename, img)
    print('{} is resized'.format(savename))
    i = i+1

2.2重命名、图片格式等调整

爬虫的数据可能比较脏乱,清洗时候也做个重命名吧,这样更美观一些。也可以借助脚本。

3 标注数据

3.1安装标注工具

labelImg: https://github.com/tzutalin/labelImg,按照上面的指引安装。

在macOS系统上,比较麻烦,如果按github上面安装各自报错,那就尝试下面简单方法:

1、先安装好pyqt5

2、打开终端,直接 pip install labelImg (注意I大写)

3、直接在终端运行labelImg即可。

3.2 labelImg的使用(Mac系统,for YOLOv3)

打开界面自然就会用了,傻瓜式操作!

掌握快捷键,事半功倍:

在mac上用自己的数据训练YOLOv3的准备工作_第1张图片

4 生成投喂YOLO的训练文档

在这里:https://github.com/AlexeyAB/Yolo_mark/tree/master/x64/Release/data/img可以查看到符合训练要求的示例。

在mac上用自己的数据训练YOLOv3的准备工作_第2张图片

它们的内容分别是:

在mac上用自己的数据训练YOLOv3的准备工作_第3张图片

在mac上用自己的数据训练YOLOv3的准备工作_第4张图片

在mac上用自己的数据训练YOLOv3的准备工作_第5张图片

在img文件夹中,每张图片都有一个同名的txt,用来表示这图片本里object的信息。

在mac上用自己的数据训练YOLOv3的准备工作_第6张图片

这些其实labelImg都已经帮助生成好了。重头戏就是生成train.txt。

为了快捷操作,用python脚本来批量操作,直接生成train.txt。使用下面脚本时,注意修改文件路径。

# -*- coding:utf8 -*-
#!/usr/bin/python3.6
import os


class BatchRename():
    def __init__(self):
        self.path = 'F:/PycharmProjects/resize'  #这里写你的图片数据的路径

    def rename(self):
        f = open(r'F:/PycharmProjects/resize/train.txt', 'a')
        filelist = os.listdir(self.path)
        total_num = len(filelist)
        i = 1

        for item in filelist:
            if item.endswith('.jpg'):
                src = os.path.join(os.path.abspath(self.path), item)
                str1 = str(i)
                dst = os.path.join(os.path.abspath(self.path), str1.zfill(6) + '.jpg')
                try:
                    os.rename(src, dst)
                    print('converting %s to %s ...' % (src, dst))

                    # 写入 txt 文本中的名称形式,前面加上绝对路径
                    f.write('/home/chris/darknet/trainData/haishen/VOC2007/JPEGImages/' + str1.zfill(6) + '.jpg' + '\n')
                    i = i + 1
                except:
                    continue
        print('total %d to rename & converted %d jpgs' % (total_num, i))


if __name__ == '__main__':
    demo = BatchRename()
    demo.rename()


如果是网络上下载的VOC格式xml,可以用脚本方便地转化为txt。自行百度一下吧~

后面就可以按照yolo的官方教程来了。

你可能感兴趣的:(深度学习,yolo,yolov3,mac,训练)