tensorflow对象检测模型训练

这个是去年5月左右做的行人检测,因为毕设有一部分需要用到这部分的模型,因此重新整理下。中间遇到了很多的坑,有些问题都忘记了,只标注记得的和训练的过程,这个是跟着贾志刚老师的课程学习的。在课程中没有将如何标注自己想要的对象,博文中与课程的区别是用LabelImage工具生成自己想要的对象,我自己训练的是标注“head”,有需要的话可以私聊我,找我拿训练好的“head”对象模型,由于电脑环境改过,文章中很多没有重新实现,只有大致的步骤,每一步的截图没有。

一、环境安装:

官方github:https://github.com/tensorflow/models.git

对象检测的官方安装教程:https://github.com/tensorflow/models/blob/master/research/object_detection/g3doc/installation.md

opencv安装包:https://github.com/opencv/opencv/archive/4.2.0.zip

protoc:https://github.com/protocolbuffers/protobuf/releases/download/v3.3.0/protoc-3.3.0-win32.zip

二、数据集的标记

说明:我自己的话。训练集是视频的前半部分,测试集是视频的后半部分,测试集和训练集一样也没事

图片得是jpg格式

2.1 标记图片的工具(用来标记图片中所需要的对象,生成相应的xml文件):

labelImg:https://github.com/tzutalin/labelImg.git 

下载后直接解压运行 python3 labelImg.py(到这里还不需要用到)

2.2 读取视频的每一帧,并把得到的每张图像作为训练集和测试集

生成的图片位置可以随意放,只要自己了解就要了,也可以直接放在JPEGImage目录下(下面会提到),代码如下:

import cv2 as cv
import os

def video2ims(src,train_path="train_images",test_path="test_images",factor=2):
    os.mkdir(train_path)
    os.mkdir(test_path)
    frame=0
    cap = cv.VideoCapture(src)
    counts = int(cap.get(cv.CAP_PROP_FRAME_COUNT))
    w = int(cap.get(cv.CAP_PROP_FRAME_WIDTH))
    h = int(cap.get(cv.CAP_PROP_FRAME_HEIGHT))
    print("number of frames : %d"%counts)
    while True:
        ret,im = cap.read()
        if ret is True:
            if frame <3600:
                path=train_path
            else:
                path = test_path
            frame += 1
            im = cv.resize(im,(w//factor,h//factor))
            cv.imwrite(os.path.join(path,str(frame)+".jpg"),im)
        else:
            break
    cap.release()

if __name__=="__main__":
    video2ims("")

2.3 Pascal VOC2012数据集格式:

# 建议把所有的数据都放在同一个文件夹下

创建一下结构的文件夹目录(只创建需要的)

VOC2012
 |
 |————————Annotations(用于存放xml)
 |   
 |        
 |
 |————————ImageSets
 |          |
 |          | ——————————Main(用于存放某些txt)
 |          |
 |          |
 |
 |————————JPEGImage(全部的图像文件)
 |
 |

2.4 生成xml文件

使用“2.1”的工具LabelImage工具生成xml文件(使用方法很简单,就不演示了。注意,在这里生成的文件存放的目录要放在Annotations里面,不要随意放在任意一个文件夹里面,不然到时候训练的时候会出错,之前就跳过这个坑,主要是LabelImage这个工具生成的xml文件中的<path>标签是绝对路径的,不然改的话很麻烦)

2.5 在Main目录下创建两个txt文件

一个是训练集,一个是测试集。命名格式也要注意,“_”之前是训练对象的名称,后面部分别改(不然就直接像如下创建两个文件就好了,免得出啥错)。

内容的话,第一列表示jpg文件的名字,第二列表示图片中是否有检测的对象,0表示没有,1表示有。

 

 

 

 三、训练模型

 3.1 生成tf record(训练集和验证集)

在自己的目录下创建个文件夹,在里面创建一个pascal_label_map.pbtxt文件,内容如下(因为我只检测头部分,所以name是head,也是上面生成xml文件标注的名称):

 

进入tensorflow安装目录下的object_detection目录下,如:“C:\TensorFlow\models-master\research”

(其中,pascal_label_map.pbtxt是上一步创建的那个文件的路径,output_path是输出的record文件路径)

 最后,在这一步一共有三个文件,如图:

 

 3.2迁移学习配置

在项目根目录创建一个文件夹(用来训练模型的)里面创建两个文件夹data和models,其中,models里面创建两个文件夹,eval和train,data里面放的是3.1那三个文件。

下载 ssd_mobilenet: http://download.tensorflow.org/models/object_detection/ssd_mobilenet_v2_coco_2018_03_29.tar.gz 到这个目录下,并解压(不用放到上面创建的文件夹中,随意放都可以)

复制“C:\TensorFlow\models-master\research\object_detection\samples\configs\ssd_mobilenet_v2_coco.config”这个文件到这个目录下的models中,并做如下修改:

第156行修改,这个是下载的那个PATH_TO_BE_CONFIGED修改成解压后的那个路径

 

 

 

这里修改成的就是3.1步骤中的那三个文件

 

3.3 开始训练模型

--pipline_fconfig_path是3.2步骤中我们修改的那个config文件,model_dir是3.2步骤中创建的那个train目录,num_train_steps步长可以设置小点,越大的话训练越久,模型越好,在训练的时候可能出现问题,请查看之前的记录“https://blog.csdn.net/qq_37960222/article/details/90442456

在浏览器中输入localhost:6006可以查看训练的情况 

下图是训练好的模型的文件夹:

3.4 ckpt文件导出 

官方文档:https://github.com/tensorflow/models/blob/master/research/object_detection/g3doc/exporting_models.md

  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值