yolo-v3 tensorflow object detection训练自己的数据
最近看tensorflow的目标检测的yolo-v3模型,没法儿使用自己的数据进行训练测试。从GitHub中发现一个现成的 tensorflow-yolov3,作者是YunYang。现通过此框架,训练水果数据。
1. 快速开始
1.1 下载源码
git clone https://github.com/YunYang1994/tensorflow-yolov3.git
1.2 依赖package安装
进入tensorflow-yolov3-master目录
pip install -r ./docs/requirements.txt
安装目录里,看tensorflow是gpu版本,本人的训练环境不支持,所以用默认的cpu 1.15版本。其他包如果已存在,忽略即可。
1.3 运行示例demo
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 #有的包可能没有包含在requirements.txt,且开发者环境中没有安装。根据错误提示,进行pip安装即可;我的缺少easydict
python freeze_graph.py
1)运行convert_weight.py的打印截图
得到pb模型文件(存在项目根目录),测试给定的图片,验证效果:
python image_demo.py
python video_demo.py # if use camera, set video_path = 0
与我自己用tensorflow自带模型ssd_mobilenet_v1_coco训练的数据,测试结果比,好。
2. 训练自己的数据(还是原作者的例子)
需求如下两个文件:
- dataset.txt
xxx/xxx.jpg 18.19,6.32,424.13,421.83,20 323.86,2.65,640.0,421.94,20
xxx/xxx.jpg 48,240,195,371,11 8,12,352,498,14
# image_path x_min, y_min, x_max, y_max, class_id x_min, y_min ,..., class_id
# make sure that x_max < width and y_max < height
- class.names
person
bicycle
car
...
toothbrush
2.1 训练VOC数据集
1) 下载VOC PASCAL 训练集和测试集
$ wget http://host.robots.ox.ac.uk/pascal/VOC/voc2007/VOCtrainval_06-Nov-2007.tar
$ wget http://host.robots.ox.ac.uk/pascal/VOC/voc2012/VOCtrainval_11-May-2012.tar
$ wget http://host.robots.ox.ac.uk/pascal/VOC/voc2007/VOCtest_06-Nov-2007.tar
2) 解压上面三个压缩包到新建的目录,并且重命名,内容包含如下结构:
VOC # path: /home/yang/dataset/VOC;这个改成自己的目录即可
├── test
| └──VOCdevkit
| └──VOC2007 (from VOCtest_06-Nov-2007.tar)
└── train
└──VOCdevkit
└──VOC2007 (from VOCtrainval_06-Nov-2007.tar)
└──VOC2012 (from VOCtrainval_11-May-2012.tar)
$ python scripts/voc_annotation.py --data_path /home/yang/test/VOC #改成自己的目录
3) 编辑core/config.py文件,确保有如下必要的配置
__C.YOLO.CLASSES = "./data/classes/voc.names"
__C.TRAIN.ANNOT_PATH = "./data/dataset/voc_train.txt"
__C.TEST.ANNOT_PATH = "./data/dataset/voc_test.txt"
作者提供了两种训练方式:
(1) train from scratch
$ python train.py
$ tensorboard --logdir ./data
(2) train from COCO weights(作者推荐)
$ 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 --train_from_coco
$ python train.py
2.2 VOC 数据集评估
$ python evaluate.py
#评估前,需要修改已经训练的模型文件。core/config.py
#__C.TEST.WEIGHT_FILE = "./checkpoint/yolov3_test_loss=7.7447.ckpt-32"
$ cd mAP
$ python main.py -na