tensorflow下YOLO v1的代码

【整理自用】

1. 环境:tensorflow-gpu=1.13.1,及其自带的CUDA10.0和cudnn;spyder=4.1.1(不确定)

2.代码来源:https://github.com/hizhangp/yolo_tensorflow.git

tensorflow下YOLO v1的代码_第1张图片

注:需要自己添加数据data文件夹

 tensorflow下YOLO v1的代码_第2张图片

(1)weights文件夹中需要另外下载权重文件:YOLO_small.ckpt;

(a)下载链接:​​​​​​LS_learner

YOLO_small.ckpt下载:
链接:https://pan.baidu.com/s/15pxR29zsiEpRnQ4y3sjLag
提取码:pf4j
yolo_weights.h5下载:
链接:https://pan.baidu.com/s/10DiVRyul_n8ZHX2NEm5uBw
提取码:gqjb

(b) 另外当train.py运行结束后(训练完成后),在 yolo_tensorflowdatapascal_vocoutput文件夹中最后一个文件夹中的最末三个文件(是训练好的模型),也需要复制到weights文件中,并增添.ckpt.

tensorflow下YOLO v1的代码_第3张图片tensorflow下YOLO v1的代码_第4张图片

注意:权重文件.ckpt往往是别人训练好了的,即对种类的个数有了事先的固定,如本代码中用的VOC2007训练集相关的权重文件,则一定要有20个种类,否则会报错。如,在最后的全连接层输出时产生shape上的不匹配。

附上查看.ckpt文件的代码:

from tensorflow.python.tools.inspect_checkpoint import print_tensors_in_checkpoint_filesavedir='H:/temp/detective/yolov1_tensorflow/data/weights/YOLO_small.ckpt'print_tensors_in_checkpoint_file(savedir, False, True) #查看全部内容from tensorflow.python import pywrap_tensorflowpath = 'H:/temp/detective/yolov1_tensorflow/data/weights/YOLO_small.ckpt'reader = pywrap_tensorflow.NewCheckpointReader(path)param_dict = reader.get_variable_to_shape_map() '''for key, val in param_dict.items():    if key=='yolo/fc_36/weights':        val[1] = 1470        print (key, val)#查看某个参数的name和shape'''for key, val in param_dict.items():    print (key, val)#查看全部参数的name和shape

 (2)pascla_voc文件夹中主要是output文件夹(按日期保存每一次训练模型的结果)和VOCdevkit文件夹(训练需要用到的数据)。

a83be6df17814638b21c9b052c8774a8.png​解压到VOCdevkit文件夹,同名子文件夹会自动合并,即训练用的所有图片和检验、及测试用的图片总和。

【通过制作自己的训练集来感受过程:

(a)只考虑目标检测(不考虑分割之类的),只需要Annotations,ImageSets,JPEGImage三个文件夹,及一个文本文件(空的,随便命名为output,暂时不明白原因)。

tensorflow下YOLO v1的代码_第5张图片

JPEGImage:保存.jpg文件,是代码需要的所有图像

Annotations:保存.xml文件,是对应图像中真实框的种类和位置等信息,具体操作见Window+Anaconda下安装labelImg

(a)创建虚拟环境:labelImg(没有任何如tensorflow等深度学习框架)

(b)进入环境后输入:

pip install -i https://pypi.tuna.tsinghua.edu.cn/simple PyQt5pip install -i https://pypi.tuna.tsinghua.edu.cn/simple pyqt5-toolspip install -i https://pypi.tuna.tsinghua.edu.cn/simple lxmlpip install -i https://pypi.tuna.tsinghua.edu.cn/simple labelImg

(c)输入labelImg打开软件,对 JPEGImage中的图像手动标记出边界框和对应类别,经该软件会自动生成标签文档存入Annotations中。

ImageSets:子文件夹Main,内有4个文本文件,保存着各个环节需要的图片名称,功能就是“划分数据集”

(a)下载:https://github.com/EddyGao/make_VOC2007

(b)进入/make_VOC2007/blob/master,运行make_main_txt.py,注意修改内容中的相关链接,会自动划分数据集并保存到ImageSets/Main中,如下图。

tensorflow下YOLO v1的代码_第6张图片​      tensorflow下YOLO v1的代码_第7张图片​   

3.代码部分

(1)一开始运行就出现了不明报错,在代码开头加入了

tf.reset_default_graph()
#tf.reset_default_graph函数用于清除默认图形堆栈并重置全局默认图形。无论重复运行多少次,产生的张量都不变(设置不变)

(1)config.py是参数设置,其中需要注意BATCH_SIZE的值,会直接影响到训练的次数和收敛。考虑电脑配置,略高可能会无法运行,考虑设置为1,主要是验证代码能否成功运行

a2473abceade46c6aa3f3305a5b0584c.png

(2)pascal_voc.py是处理图像和标签,有以下几处注意修改:

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAcGhpbGlwX3BvbmQ=,size_16,color_FFFFFF,t_70,g_se,x_16

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAcGhpbGlwX3BvbmQ=,size_16,color_FFFFFF,t_70,g_se,x_16

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAcGhpbGlwX3BvbmQ=,size_16,color_FFFFFF,t_70,g_se,x_16

(3) train.py中注意修改:

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAcGhpbGlwX3BvbmQ=,size_17,color_FFFFFF,t_70,g_se,x_16

log_str = '{} Epoch: {}, Step: {}, Learning rate: {},Loss: {:5.3f}
Speed: {:.3f}s/iter,Load: {:.3f}s/iter, Remain: {}'.format(                        datetime.datetime.now().strftime('%m-%d %H:%M:%S'),

你可能感兴趣的:(tensorflow,深度学习,人工智能)