TensorFlow2学习24、YoloV3目标检测使用探索

一、简介Yolo

Yolo是一个实时目标检测,全称 You only look once。在Pascal Titan X处理图片可达30FPS,在COCO目标检测测试指标 平均准确度mAP达到 57.9%。

演示视频:

在这里插入图片描述

与其它目标检测算法的比较:

在这里插入图片描述

在COCO数据集上的表现:

在这里插入图片描述

实现原理

从R-CNN到FasterR-CNN利用分类器或定位器来执行检测,将模型用于多个位置和比例,高分值的区域作为检测区域。
YoloV3使用了不同的策略,将单一的神经网络应用于整个图片。神经网络将图片分成若干区域,对每个区域进行预测和评分。边界框由预测的概率值加权而来。

与基于分类器的系统相比,Yolo模型有几个优点:它在测试整个图像,因此它的预测可以感知整个图像区域;它用单一的网络评估来预测,不像R-CNN这样的系统需要数千张单一的图像。这使得它非常快,比R-CNN快1000倍,比Faster R-CNN快100倍。

YoloV3 使用了一些技巧来改进训练和提高性能,包括:多尺度预测、更好的分类器等。
https://pjreddie.com/darknet/yolo/
https://www.bilibili.com/video/av38639970/
https://machinelearningmastery.com/how-to-perform-object-detection-with-yolov3-in-keras/
https://github.com/calmisential/YOLOv3_TensorFlow2
https://github.com/zzh8829/yolov3-tf2
https://github.com/syou2020/tensorflow2.0-yolo3

二、下载官方程序运行测试

1. 基本使用

git clone https://github.com/pjreddie/darknet
cd darknet
make
wget https://pjreddie.com/media/files/yolov3.weights
./darknet detect cfg/yolov3.cfg yolov3.weights data/dog.jpg

在这里插入图片描述

darknet程序没有显示图片功能,图片生成在predictions.png,可以手工打开查看:
在这里插入图片描述

2. 其它命令:

# detect是命令的缩写,完整写法:
./darknet detector test cfg/coco.data cfg/yolov3.cfg yolov3.weights data/dog.jpg
# 检测多个图片,手工挨个输入图片地址
./darknet detect cfg/yolov3.cfg yolov3.weights
# 改变测试阈值
./darknet detect cfg/yolov3.cfg yolov3.weights data/dog.jpg -thresh 0

3. yolov3有个精简版的模型:

wget https://pjreddie.com/media/files/yolov3-tiny.weights
./darknet detect cfg/yolov3-tiny.cfg yolov3-tiny.weights data/dog.jpg

4. 使用摄像头

需要使用OpenCV和CUDA重新编译Darknet。编译时修改Makefile文件,将下面内容修改:

GPU=1
OPENCV=1

官方文档位置:https://pjreddie.com/darknet/install/#cuda

执行检测命令:

./darknet detector demo cfg/coco.data cfg/yolov3.cfg yolov3.weights

对一个视频文件进行测试

./darknet detector demo cfg/coco.data cfg/yolov3.cfg yolov3.weights <video file>

5. 训练VOC数据集

PASCAL VOC挑战赛 (The PASCAL Visual Object Classes )是一个世界级的计算机视觉挑战赛, PASCAL全称:Pattern Analysis, Statical Modeling and Computational Learning,是一个由欧盟资助的网络组织。很多模型都基于此数据集推出.比如目标检测领域的yolo,ssd等等。
训练的过程在这里大致写一些,本文内容来自官网,下面代码未测试。

# 获取数据集
wget https://pjreddie.com/media/files/VOCtrainval_11-May-2012.tar
wget https://pjreddie.com/media/files/VOCtrainval_06-Nov-2007.tar
wget https://pjreddie.com/media/files/VOCtest_06-Nov-2007.tar
tar xf VOCtrainval_11-May-2012.tar
tar xf VOCtrainval_06-Nov-2007.tar
tar xf VOCtest_06-Nov-2007.tar
wget https://pjreddie.com/media/files/voc_label.py
python voc_label.py
ls
2007_test.txt   VOCdevkit
2007_train.txt  voc_label.py
2007_val.txt    VOCtest_06-Nov-2007.tar
2012_train.txt  VOCtrainval_06-Nov-2007.tar
2012_val.txt    VOCtrainval_11-May-2012.tar
cat 2007_train.txt 2007_val.txt 2012_*.txt > train.txt

修改cfg/voc.data,把path-to-voc改为自己的VOC数据集地址

  1 classes= 20
  2 train  = <path-to-voc>/train.txt
  3 valid  = <path-to-voc>2007_test.txt
  4 names = data/voc.names
  5 backup = backup

下载预训练权重

wget https://pjreddie.com/media/files/darknet53.conv.74

训练模型

./darknet detector train cfg/voc.data cfg/yolov3-voc.cfg darknet53.conv.74

6. 训练COCO数据集

cp scripts/get_coco_dataset.sh data
cd data
bash get_coco_dataset.sh

修改cfg/coco.data,把path-to-coco改为自己的coco数据集地址。

  1 classes= 80
  2 train  = <path-to-coco>/trainvalno5k.txt
  3 valid  = <path-to-coco>/5k.txt
  4 names = data/coco.names
  5 backup = backup

修改cfg/yolo.cfg:

[net]
# Testing
# batch=1
# subdivisions=1
# Training
batch=64
subdivisions=8
....

训练:

./darknet detector train cfg/coco.data cfg/yolov3.cfg darknet53.conv.74

可以在多个GPU上执行:

./darknet detector train cfg/coco.data cfg/yolov3.cfg darknet53.conv.74 -gpus 0,1,2,3

7. 训练OpenImages数据集

wget https://pjreddie.com/media/files/yolov3-openimages.weights

./darknet detector test cfg/openimages.data cfg/yolov3-openimages.cfg yolov3-openimages.weights

Yolov3版权信息:

@article{yolov3,
  title={YOLOv3: An Incremental Improvement},
  author={Redmon, Joseph and Farhadi, Ali},
  journal = {arXiv},
  year={2018}
}

猜你喜欢

转载自blog.csdn.net/xundh/article/details/103590950