记录-SSD Inception V2的训练,测试,验证步骤(写给自己看,不作解释)

使用的工具

tensorflow-gpu 1.12.0 + GPU + CUDA,CUDNN(需对应)其他的依赖包看需求安装

1.配置环境

先配置一个合适的环境,我是新建的一个环境,名称为py36
之后的所有步骤都在这个环境中进行,但因为不是默认进入的环境,需要先在命令行输入conda activate py36

2.下载Tensorflow object detection API

https://github.com/tensorflow/models

从github上下载项目(右上角“Clone or download”-“DownloadZIP”),下载到本地目录(避免中文),解压。
我的位置在E盘

3.Protobuf 安装与配置

已经配好,不作描述

4.电脑环境变量的配置

在 ‘此电脑’-‘属性’- ‘高级系统设置’ -‘环境变量’-‘系统变量’ 中新建名为‘PYTHONPATH’的变量,将models/research/ 及 models/research/slim 两个文件夹的完整目录添加,分号隔开,效果如下图:
环境变量

5.测试环境

在命令行运行,进入以下地址:
cd E:\MobileNet-SSD-models-master\research\object_detection\builders
之后再运行python model_builder_test.py
没有报错说明环境配置成功

以上步骤参考博文链接 + pycocotools安装

6.准备数据集

拍图,使用LabelImg人工标注,一般在人工标注阶段我会将图片和xml文件分为两个文件夹分别保存,以备后续数据集的制作。
将数据集分为训练集,测试集和验证集三个部分,使用以下代码

6.1 生成test,trainval,train,val.txt文件并存出xml文件

"""
实现test,trainval,train,val.txt的生成
"""
# -*- coding: utf -*-
import os
import random
import math
fo1=open('E:/MobileNet-SSD-models-master/VOC2007/ImageSets/Main/test.txt','w')
# fo2=open('E:/tensorflow-serving-yolov3-master/VOC/train/VOC2007/ImageSets/Main/trainval.txt','w')
fo3=open('E:/MobileNet-SSD-models-master/VOC2007/ImageSets/Main/train.txt','w')
fo4=open('E:/MobileNet-SSD-models-master/VOC2007/ImageSets/Main/val.txt','w')
filepath='E:/MobileNet-SSD-models-master/VOC2007/Annotations'
filelist=os.listdir(filepath)
file_name=[]
for w in filelist:
    file_name.append(w.replace('.xml',''))
file_num=len(file_name)
trainval_num=0.8
train_num=0.9
#trainval
trainval_list=random.sample(range(file_num),math.floor(trainval_num*file_num))
test_list=(list(set(range(file_num)).difference(set(trainval_list))))
random.shuffle(test_list)
#train
train_list=random.sample(range(file_num),math.floor(train_num*file_num))
#test
test_list = list(set(range(file_num)).difference(set(train_list)))
#val
val_list=list(set(trainval_list).difference(set(train_list)))
random.shuffle(val_list)
#put in txt
# for i in trainval_list:
#     fo2.write(file_name[i]+'\n')
for i in test_list:
    fo1.write(file_name[i]+'\n')
for i in train_list:
    fo3.write(file_name[i]+'\n')
for i in val_list:
    fo4.write(file_name[i]+'\n')
fo1.close()
# fo2.close()
fo3.close()
fo4.close()

6.2 新建三个存放图片文件的文件夹
将所有图片文件按照6.1分出的txt里的图片名称分类

# 用程序分出三个文件夹为train,test,trainval,存放各自的xml文件

import os
import shutil
#三个文件夹要运行三次这个程序,对应修改f和des_path
f = open(r"E:/MobileNet-SSD-models-master/VOC2007/annotations/validation/val.txt")
line = f.readline()
src_path = 'E:/MobileNet-SSD-models-master/VOC2007/images/'
des_path =  'E:/MobileNet-SSD-models-master/VOC2007/val_images/'

while line:
    line = line.replace('\r','').replace('\n','')
    # print(line)
    strjpg = str(line)
    strjpg = strjpg + ".jpg"
    print(strjpg)
    for filename in os.listdir(src_path):  # 遍历每张图片
        if filename == strjpg:
            shutil.move(src_path + filename,
                        des_path +  filename)
    line = f.readline()
f.close()

6.3 将xml转为csv
代码详见

E:\MobileNet-SSD-models-master\VOC2007\xml_to_csv.py

运行:python xml_to_csv.py

6.4 将csv转为TFRecords格式
代码详见

E:\MobileNet-SSD-models-master\VOC2007\generate_tfrecord.py

运行:

python generate_tfrecord.py --csv_input=data/train_labels_0.csv --output_path=data/voc_2007_train_000.tfrecord

python generate_tfrecord.py --csv_input=data/test_labels_0.csv --output_path=data/voc_2007_test_000.tfrecord

python generate_tfrecord.py --csv_input=data/val_labels_0.csv --output_path=data/voc_2007_val_000.tfrecord

6.5 新建label_map.pbtxt文件
我的地址:

E:\MobileNet-SSD-models-master\VOC2007\data\label_map.pbtxt

按照自己的标签修改

item {
    
    
  id: 1
  name: 'tv'
}

item {
    
    
  id: 2
  name: 'vehicle'
}

7.训练前的准备工作

下预训练模型 —— 链接在这里(model zoo)
这个模型需要和后续训练的网络名称对应,下载后解压在这里插入图片描述
最后得到的东西:
在这里插入图片描述
关于pb文件的生成:
代码详见:

E:/MobileNet-SSD-models-master/VOC2007/export_inference_graph.py

运行:

python E:/MobileNet-SSD-models-master/VOC2007/export_inference_graph.py  --input_type=image_tensor --pipeline_config_path=E:/MobileNet-SSD-models-master/VOC2007/data/ssd_inception_v2_coco.config --trained_checkpoint_prefix=E:/MobileNet-SSD-models-master/VOC2007/data/model_inception/model.ckpt-100000  --output_directory=E:/MobileNet-SSD-models-master/VOC2007/data/saved_model_inception

配置config文件:

这个文件十分重要,在后续的训练中最主要用到的就是它,需要修改训练参数也是在这里修改。

地址如下:

E:/MobileNet-SSD-models-master/VOC2007/data/ssd_inception_v2_coco.config

1、搜索其中的 PATH_TO_BE_CONFIGURED ,将对应的路径改为自己的路径;
2、将 num_classes 按照实际情况更改;
3、修改batch_size
4、fine_tune_checkpoint: “…”
from_detection_checkpoint: true

8.训练

python E:/MobileNet-SSD-models-master/VOC2007/train.py --logtostderr  --train_dir=E:/MobileNet-SSD-models-master/VOC2007/data/training_inception  --pipeline_config_path=E:/MobileNet-SSD-models-master/VOC2007/data/ssd_inception_v2_coco.config

9.验证

python E:/MobileNet-SSD-models-master/VOC2007/eval.py  --logtostderr  --checkpoint_dir=E:/MobileNet-SSD-models-master/VOC2007/data/saved_model_inception  --eval_dir=E:/MobileNet-SSD-models-master/VOC2007/data/eval_dir_inception   --pipeline_config_path=E:/MobileNet-SSD-models-master/VOC2007/data/ssd_inception_v2_coco.config

10.测试

cd E:\MobileNet-SSD-models-master\research\object_detection
python test_inception_ssd.py

猜你喜欢

转载自blog.csdn.net/weixin_42299076/article/details/107499335
今日推荐