项目地址 :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