yoloV3 Tensorflow版训练自己数据集

yoloV3 Tensorflow版训练自己数据集

  • 终于有人放出了 yoloV3 Tensorflow 版本
    • 项目结构
    • 简单测试
    • 训练数据集

终于有人放出了 yoloV3 Tensorflow 版本

项目地址 :https://github.com/Deep-Learning-Studyroom/yolo_v3_tensorflow.git
论文地址 :https://pjreddie.com/media/files/papers/YOLOv3.pdf

项目同时支持CPU和GPU可选用进行识别项目

项目结构

下载好的git包括以下几个主要文件

–checkpoint #存放已训练好的权重文件 注:后面自己训练的权重也会放到这个文件下。
–core #yolov3 核心文件
–data #包含了一个测试数据集和为训练用的准备文件,后面细说。
–doc #包含依赖文件描述和一些图表
–scripts #训练中要用到的一些脚本文件
convert_weight.py
nms_demo.py #图片版本测试
video_demo.py #视频/摄像头 版本测试
quick_train.py #开始训练

简单测试

这里使用项目自带的图片文件和mp4文件简单测试性能
修改并执行 nms_demo.py 或 python video_demo.py 文件
classes = utils.read_coco_names(’./data/coco.names’) #指定使用的分类种类文件
input_tensor, output_tensors = utils.read_pb_return_tensors(gpu_nms_graph, “./checkpoint/yolov3_gpu_nms.pb”,
[“Placeholder:0”, “concat_10:0”, “concat_11:0”,
“concat_12:0”]) #指定所要加载的预训练权重文件

下载地址 :https://github.com/YunYang1994/tensorflow-yolov3/releases/download/v1.0/yolov3.weights
CSDN下载:https://download.csdn.net/download/weixin_41819529/10968952

下载后只有一个weights,放到checkpoint文件夹中,在terminal执行

python convert_weight.py --convert --freeze

即可生成/checkpoint/yolov3_gpu_nms.pb /checkpoint/yolov3_cpu_nms.pb

我这里简单修改了下用来批量处理图片数据

IMAGE_H, IMAGE_W = 416, 416
with tf.Session(graph=gpu_nms_graph) as sess:
    path = 'data/demo_data/testimg/'
    imgNames = os.walk(path)
    for imgname in imgNames:
        for name in imgname[2]:
            img = Image.open(path+name)
            img_resized = np.array(img.resize(size=(IMAGE_H, IMAGE_W)), dtype=np.float32)
            img_resized = img_resized / 255.
            boxes, scores, labels = sess.run(output_tensors, feed_dict={input_tensor: np.expand_dims(img_resized, axis=0)})
            image = utils.draw_boxes(name,img, boxes, scores, labels, classes, [IMAGE_H, IMAGE_W], show=True)

可以看到处理速度还是非常的快,下面进行训练

训练数据集

项目给了一个训练Demo

地址 :https://github.com/YunYang1994/raccoon_dataset.git

下载使用或者使用项目 scripts 中 make_raccoon_tfrecords.sh 脚本会自动下载

1、项目图片准备
2、项目训练需要准备3个文本文件,分别为

dataset.txt: 用来描述你准备的训练集和测试集图片信息,文件内容格式为

xxx/xxx.jpg 18.19 6.32 424.13 421.83 20 323.86 2.65 640.0 421.94 20
#image_path x_min y_min x_max y_max class_id x_min y_min … class_id

anchors.txt:先按照项目中给的值来做后面会调整

0.10,0.13, 0.16,0.30, 0.33,0.23, 0.40,0.61, 0.62,0.45, 0.69,0.59, 0.76,0.60, 0.86,0.68, 0.91,0.76

class.names:你要分几个类就写几个

person bicycle car … toothbrush

3、分出训练数据和测试数据

修改 dataset.txt 为两个文件 一个是train.txt 存放训练数据 一个是test.txt 存放测试数据
Demo中存放数据比例为 9:1 , 200个数据训练180 测试20

4、转成tensorflow专门的tfrecord格式

python core/convert_tfrecord.py --dataset_txt ./raccoon_dataset/train.txt --tfrecord_path_prefix ./raccoon_dataset/raccoon_train
python core/convert_tfrecord.py --dataset_txt ./raccoon_dataset/test.txt --tfrecord_path_prefix ./raccoon_dataset/raccoon_test

此步骤生成两个.tfrecords文件

5、python show_input_image.py

展示了10个转换的图片

6、python kmeans.py

我理解为通过kmeans算法重新优化anchors值
因为我的训练图片都是截图所以可以看到重新生成的anchors里面都是1

7、python convert_weight.py --convert

读取并转化yolo3的预训练weights文件

8、python quick_train.py

开始训练 ,200个图左右的大概3个小时,默认是2500次训练过程
在训练的过程中可以通过tensorboard --logdir ./data 来查看状态,chrome打不开的话把主机名换成localhost

9、使用

python convert_weight.py -cf ./checkpoint/yolov3.ckpt-2500 -nc 1 -ap ./data/raccoon_anchors.txt --freeze

来固化ckpt文件,使其变成一个文件
以为我后面要使用tensorflow serving所以我直接用save model来生成pb文件了

10、然后就可以愉快的使用了

11、官方讨论群

https://github.com/YunYang1994/tensorflow-yolov3/issues/39

你可能感兴趣的:(yoloV3 Tensorflow版训练自己数据集)