tensorflow实现yolo

源码

运行yolo的demo

1 github下载YOLOv3的tensorflow实现代码
 git clone https://github.com/YunYang1994/tensorflow-yolov3.git
2 安装一些依赖
 cd tensorflow-yolov3-master
 pip install -r ./docs/requirements.txt
3 下载YOLOv3的初始权值放到checkpoint文件夹中

下载链接

4 将./checkpoint目录下的.ckpt转化成.pb文件
python convert_weight.py

在./checkpoint目录下的生成 XXX_demo.ckpt文件

python freeze_graph.py

在tensorflow-yolov3-master文件夹下生成.pb文件

5 运行测试代码

测试一张图片

python image_demo.py

测试一个视频

python video_demo.py

如果想要用本地摄像头视频,则更改video_demo.py代码,令video_path = 0

使用voc2007数据集训练模型

参考

1 下载数据集,存放在 data/dataset/VOC2007/文件夹下面

格式为:

VOC2007
Annotations
ImageSets
JPEGImages
Layout
Main
Segmentation

其中:
Annotations文件夹中存放的是.xml文件,每个xml文件都对应于JPEGImages文件夹的一张图片
在这里插入图片描述
ImageSets中有三个文件:
Layout存放的四个文件test.txt , train.txt, val.txt ,trainval.txt(这个稍后要用于第二步生成.txt,所以要注意一下路径,看有的博主说这四个文件是在Main下面,可以找一下自己文件夹具体存放地址)
在这里插入图片描述
其中内容格式为:
在这里插入图片描述
Main存放的是图像物体识别的数据,分为20类。
在这里插入图片描述
Segmentation存放的是可用于分割的数据,做检测识别也是用不到的.
JPEGImages文件夹里包含了训练图片和测试图片,混放在一起

2 生成索引.txt文件

修改tensorflow-yolov3-master/data/dataset/中voc_annotation.py文件
(1)修改类别在这里插入图片描述
(2)注意路径
这个为.xml的路径
在这里插入图片描述
这个为.txt路径(注意四个文件test.txt , train.txt, val.txt ,trainval.txt存放位置,因为博主是在Layout下面,有的是在Main下,注意修改)
在这里插入图片描述
这个为图片路径
在这里插入图片描述
最终生成文件路径在与voc_annotation.py相同的文件夹下面,即tensorflow-yolov3-master/data/dataset/文件夹下面,生成的文件格式为:
格式:图片路径(空格)矩形框左上和右下角坐标(空格)标签(空格)下一个矩形框位置+标签
在这里插入图片描述

3 修改配置文件

修改./core/config.py里的配置路径

__C.YOLO.CLASSES                = "./data/classes/voc.names"
__C.TRAIN.ANNOT_PATH            = "./data/dataset/2007_train.txt"
__C.TEST.ANNOT_PATH             = "./data/dataset/2007_test.txt"

4 训练

从coco数据集预训练结果进行迁移学习:

python convert_weight.py --train_from_coco
python train.py

如果数据量够,可以头训练,直接

python train.py

训练的结果为:
在这里插入图片描述在/checkpoint/文件下生成.ckpt文件

5 .ckpt转化成.pb文件

修改freeze_graph.py代码

pb_file = "./XXX.pb"      #.pb文件的路径
ckpt_file = "./checkpoint/yolov3_test_loss=3.2343.ckpt-37"   #上一步生成的.ckpt文件的路径(生成很多,选择一个最合适的)
6 测试

修改image_demo.py或者video_demo.py代码
将其中.pb文件换成自己生成的
在这里插入图片描述
同时将类别数目换成自己的数目
在这里插入图片描述
可以看到运行结果。

训练自己的数据集

1 制作自己的数据集

参考链接
在data/dataset/文件夹下面新建VOC2007文件夹,该文件夹下面有以下三个文件夹

  1. 处理JPEGSImages文件夹,重命名图片
    把你的图片放到JPEGSImages里面,在VOC2007里面,人家的图片文件名都是000001.jpg类似这样的,我们也统一格式,把我们的图片名字重命名成这样的,代码如下:
代码
  1. 处理Annatations文件夹,生成xml文件
    1)下载链接,博主有介绍如何使用
    2)注意修改保存的路径为Annatations文件夹,
  2. 生成ImageSets文件夹中的Main文件夹中的四个文件.
    test.txt是测试集,train.txt是训练集,val.txt是验证集,trainval.txt是训练和验证集.VOC2007中,trainval大概是整个数据集的50%,test也大概是整个数据集的50%;train大概是trainval的50%,val大概是trainval的50%,下面的代码生成这四个文件,百分比可以自己调整.
import os  
import random  
  
trainval_percent = 0.7  
train_percent = 0.5  
xmlfilepath = 'Annotations'  
txtsavepath = 'ImageSets\Main'  
total_xml = os.listdir(xmlfilepath)  
  
num=len(total_xml)  
list=range(num)  
tv=int(num*trainval_percent)  
tr=int(tv*train_percent)  
trainval= random.sample(list,tv)  
train=random.sample(trainval,tr)  
  
ftrainval = open('ImageSets/Main/trainval.txt', 'w')  
ftest = open('ImageSets/Main/test.txt', 'w')  
ftrain = open('ImageSets/Main/train.txt', 'w')  
fval = open('ImageSets/Main/val.txt', 'w')  
  
for i  in list:  
    name=total_xml[i][:-4]+'\n'  
    if i in trainval:  
        ftrainval.write(name)  
        if i in train:  
            ftrain.write(name)  
        else:  
            fval.write(name)  
    else:  
        ftest.write(name)  
  
ftrainval.close()  
ftrain.close()  
fval.close()  
ftest .close()  

到此数据集制作完成

2 生成索引.txt文件

参考上面使用voc2007数据集训练模型的步骤2,注意修改路径,因为上面博主四个test.txt , train.txt, val.txt ,trainval.txt是在Layout下,现在制作放在了Main下面,所以要修改路径。

3 步骤

之后步骤同上面使用voc2007数据集训练模型的步骤一样,不再重述。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值