win10 YOLOv3-tf
win10 YOLOv3-tf 训练自己的数据集
1.获取项目https://github.com/YunYang1994/tensorflow-yolov3
2.运行demo(查看自己配置的环境是否符合)
3.制作训练数据集
注:经过实际操作发现yolov3的darknet版本(C/C++)相比与github上的tensorflow版本实用性更强,且用起来更方便,但是在windows下配置起来可能比tf版本麻烦一些,不过还是推荐使用,详细配置及训练过程见:
https://blog.csdn.net/longlong068/article/details/105088304
注:如果觉得windows下配置环境太过繁琐或者自己的电脑没有较高算力的GPU,可以采用谷歌Colab提供的免费云GPU服务来训练自己的数据集,具体操作见:谷歌Colab训练自己YOLOv3数据集
获取yolov3-tensorflow的项目
-
在window10 下配置对应需要的环境,采用tensorflow-gpu=1.11.0,及下载相应项目所需的包,推荐新建conda环境。(前提是安装了anaconda)
#运行CMD 创建单独的conda环境 conda create -n tf1.11 python=3.6.5 #激活conda环境 activate tf1.11 #在环境下安装对应的包 用conda或者pip都可以 conda install tensorflow-gpu==1.11.0
conda install除了会下载指定包外,还会下载其他附带包,如果不需要可以采用pip下载单个包,但是pip和conda下载都很慢,conda安装可以先采用conda config配置一下清华源。
注:如果要用tensoflow-gpu,要事先下载cuda和cudnn。cuda和cudnn的安装配置见之前:https://blog.csdn.net/longlong068/article/details/105087705。
-
检查tensorflow-gpu是否正常运行
#在配置的tf1.11环境下 import tensorflow as tf print(tf.test.is_gpu_available()) >> True
运行demo
此项目下给出了image_demo,可以使自己在整体了解一下yolov3模型和检测一下自己的环境可行性。
-
下载已经训练好的权重文件和权重文件格式转换
$ cd checkpoint $ wget https://github.com/YunYang1994/tensorflow-yolov3/releases/download/v1.0/yolov3_coco.tar.gz $ tar -xvf yolov3_coco.tar.gz $ cd .. $ python convert_weight.py $ python freeze_graph.py
以上为运行demo之前需要做的操作,因为这个demo不包括模型的训练,模型的权重文件采用事先训练好的coco数据集权重,需要下载权重文件并放到checkpoin文件下,可在项目github上下载。下载完权重后,运行convert_weight.py和freeze_graph.py后,在目录下会生成yolov3c_coco.pb文件,如下。
-
运行image_demo.py或video_demo.py文件
$ python image_demo.py $ python video_demo.py # if use camera, set video_path = 0
直接运行image_demo.py文件,其中demo的部分代码如下:
import cv2 import numpy as np import core.utils as utils import tensorflow as tf from PIL import Image return_elements = ["input/input_data:0", "pred_sbbox/concat_2:0", "pred_mbbox/concat_2:0", "pred_lbbox/concat_2:0"] pb_file = "./yolov3_coco.pb" image_path = "./docs/images/road.jpeg" num_classes = 80 input_size = 416 graph = tf.Graph()
其中需要关注有pb_file(即上一步产生的.pb文件),image_path(所检测的图片路径),num_class因为采用了coco数据集训练所得权重所以此处为80,此后如果要训练自己的数据集,并用此demo来以图像的形式显示出来,需要对以上三个参数进行修改。
制作自己的训练数据集
此项目的作者给的训练模型是基于VOC数据格式的,所以在训练自己的数据集之前要按一定的形式制作自己的数据集,VOC数据集的文件结构如下:
VOCdevkit
└─VOC2007
├─ImageSets # 存放数据集列表文件 主要关注其下的Main文件
├─Annotations # 存放图片标签,xml 格式
├─JPEGImages # 存放图片,训练集和测试集的原图片都放在这里
├─SegmentationClass
└─SegmentationObject
其中ImageSets
├─Main #主要关注Main 存放含有划分的训练集、测试集的文件名的多个txt文件
├─Layout
└─Segmentation
-
按以上图创建一样结构的VOCdevkit文件夹,将要进行训练测试的原图片(不需要考虑图片是否要画框和输入图片的分辨率,此yolov3-tf模型会将不同分辨率的图片进行resize)放入JPEGImages文件下,图片最好采用以下命名格式:
-
采用labelimg工具进行画框生成xml文件,并设置将生成的xml文件放到Annotations文件下。labelimg下载地址:链接:https://pan.baidu.com/s/1o41wwXzHEm2kZgz52A37BA
提取码:flwm -
划分训练集和测试集,在ImageSets\Main下生成train.txt和test.txt文件(包含相应划分数据集文件名的txt)。
可采用以下程序进行划分,此划分部分代码及流程都参考博主:
https://blog.csdn.net/qq_38441692/article/details/103652760,在此进行感谢。
划分数据集代码如下 在VOCdekit\VOC2007(即Annotations的上级目录)下运行spilt.py
import os import random import sys if len(sys.argv) < 2: print