YOLOv3行人检测

本脚本集合主要是针对YOLOv3的两个主流版本(AlexeyAB/darknet & pjreddie/darknet),本身不包含YOLOv3的代码和配置文件,但是根据指引可以完成一个效果较好的行人检测系统。

目前主要是以下几个功能:

将YOLOv3常用的网址和资料归纳整理了一下;

提供代码,帮助从VOC2007/VOC2012/COCO等数据集中提取出person类图片,并转换标注。这里提取VOC数据集时默认保留了全部difficult=1的图片,效果会更好,具体请参见Issue #1200;

提供代码,帮助计算mAP正确率;

建议使用tee指令保存训练日志,可使用本文提供的脚本实现训练过程可视化;

效果对比

YOLO_mine(基于AB版本,只检测行人)

YOLO_pj(pj版本,所有类别全检测)

文件结构

yolo_person_detect

|

│ README.md

├─make_yolo_dataset

│ │ helmet_to_yolo.py # 某次比赛用到的转换代码

│ │ show_voc_xml.py # 可视化VOC数据集

│ │ show_yolo_label.py # 可视化YOLO数据集

│ │ xml2json.py #

│ │ coco_to_yolo.py # COCO --> YOLO

│ │

│ ├─YOLO_VOC2007 # VOC2007

│ │ extract_person.py # 从VOC2007数据集中提取person图片

│ │ voc_label.py # 将提取到的person图片转为YOLO格式

│ │

│ └─YOLO_VOC2007_2012 # VOC2007 + VOC2012

│ extract_person_2007.py

│ extract_person_2012.py

│ voc_label.py

├─yolo_compute_mAP_on_VOC2007 # 在VOC2007上测试性能

│ reval_voc_py3.py

│ voc_eval_py3.py

└─yolo_loss_analyse

│ analyse.py # 训练过程可视化代码

│ result.png # 可视化训练过程

└─loss

train7-loss.txt # 示例训练日志

官方Demo运行

下载源代码、预训练权重

git clone https://github.com/AlexeyAB/darknet.git

cd darknet/

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

vim Makefile

make

注意:OpenCV版本号亲测3.40可用,但是3.41不可用,可参见YOLOv3的Darknet在OpenCV下编译出错填坑

试运行图片检测demo

./darknet detect cfg/yolov3.cfg yolov3.weights data/dog.jpg

试运行视频检测demo

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

数据集准备

处理时,默认所有的train = train+val,不区分二者,2007单独还有个test

0、下载VOC2007+2012数据集

下载数据集

wget

wget

wget

解压缩

tar xvf VOCtrainval_06-Nov-2007.tar

tar xvf VOCtest_06-Nov-2007.tar

tar xvf VOCtrainval_11-May-2012.tar

1、通过extract_person.py提取含人数据

分别运行2007和2012的提取代码

2、通过voc_label.py转化voc数据格式为yolo支持的格式

会在脚本所在文件夹产生相应的txt文本,存储数据集地址信息:

2007_train.txt

2007_test.txt

2012_train.txt

可根据情况进行配置,比如说不想要测试集,那就整合下训练集、测试集:

cat 2007_train.txt 2012_train.txt > train.txt

配置文件

0、下载源代码,下载预训练权重

git clone https://github.com/AlexeyAB/darknet.git

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

1、配置Makefile

2、配置cfg/voc.data

classes= 1

train = /home/pascal/person_data2/train.txt

valid = /home/pascal/person_data2/2007_test.txt

names = data/voc.names

backup = backup

3、配置data/voc.names

person

4、新建backup文件夹

mkdir backup

5、配置cfg/yolov3-voc.cfg

batch, sub按需修改

一共三个YOLO层,均需要修改:

classes=1

filters=183*(1+1+4)=18

# filters=(classes + coords + 1)*

6、make编译

7、开始训练,并留下日志

./darknet detector train cfg/voc.data cfg/yolov3-voc.cfg ../darknet53.conv.74 -gpus 0,1 | tee -a helmet1.txt

8、恢复训练

./darknet detector train cfg/voc.data cfg/yolov3-voc.cfg backup/yolov3-voc.backup -gpus 0,1 | tee -a train7.log

9、单张图片测试(需要将batch、subvision均修改为1)

./darknet detector test cfg/voc.data cfg/yolov3-voc.cfg backup/yolov3-voc_final.weights test_data/p0.jpg

10、性能检测

计算mAp

./darknet detector map cfg/voc.data cfg/yolov3-voc.cfg backup/yolov3-voc_80172.weights

计算recall(2097张的结果)

./darknet detector recall cfg/voc.data cfg/yolov3-voc.cfg backup/yolov3-voc_final.weights

VOC2007test

mkdir results

#(PJ版本需要这一步)

# (会在/results生成默认的comp4_det_test_person.txt,这是在VOC2007 test上的结果)

./darknet detector valid cfg/voc.data cfg/yolov3-voc.cfg backup/yolov3-voc_final.weights -gpu 0,1

#在 https://github.com/AlexeyAB/darknet/tree/master/scripts 下载voc_eval_py3.py reval_voc_py3.py ,在./执行

python reval_voc_py3.py output_dir='./'

训练常用指令

训练:加上了tee指令把训练日志保存到txt文本

./darknet detector train cfg/voc.data cfg/yolov3-voc.cfg darknet53.conv.74 -gpus 0,1 |tee -a train7.txt

恢复训练

./darknet detector train cfg/voc.data cfg/yolov3-voc.cfg backup/yolov3-voc.backup -gpus 0,1 tee -a train7.txt

测试

./darknet detector test cfg/voc.data cfg/yolov3-voc.cfg backup/yolov3-voc_50000.weights ../test_data/p2.jpg

VOC数据集格式

以上述VOC2007+VOC2012数据集为例,以下均为处理过的数据集:

VOCdevkit/

├── VOC2007

│ ├── Annotations 原始的VOC标注信息

│ ├── ImageSets

│ │ └── MainVOC的类标签,和人为提取的样本索引

│ ├── JPEGImages 图片文件夹

│ └── labelsVOC-->YOLO格式的标注信息

└── VOC2012

├── Annotations

├── ImageSets

│ └── Main

├── JPEGImages

└── labels

VOC的xml格式

核心部分如下:

person

0

xxx

xxx

xxx

xxx

VOC的图片格式

行列分布同pillow.Image,先行后列

COCO数据集格式

数据集格式

COCO

├── annotations

├── filelist训练图片位置

└── train2017

├── JPEGImages图片

└── labels生成的YOLO格式标签

数据集统计

数据集

训练集(person)

测试集(person)

VOC2007

5011(2095)

4952(2097)

VOC2012

17125(4374)

未统计

COCO2017

118287(64115)

未统计

* 括号里面为person类图片数量

训练过程

数据集:VOC2007+VOC2012+COCO2017

硬件环境:GTX1080ti*2, Ubuntu16.04, CUDA9

训练迭代数:8w iters

配置:batch=64/16,总计8w次迭代,在原来的5w次之后,追加2w次0.001和1w次0.0001,0.00001

耗时:5h/万次迭代

结果:loss=0.98

map

p

r

f1

IOU

0.8552

0.85

0.84

0.84

69.4%

参考资料

python行人检测_基于YOLOv3的行人检测相关推荐

  1. 【目标检测】基于yolov3的血细胞检测和计数(无bug教程+附代码+数据集)

    多的不说,少的不唠,先看检测效果图: 共检测三类:红细胞RBC.白细胞WBC.血小板Platelets Hello,大家好,我是augustqi.今天给大家带来的保姆级教程是:基于yolov3的血细胞 ...

  2. 【目标检测】基于yolov3交通标志检测和识别(附代码和数据集)

    Hello,大家好,我是augustqi.今天给大家分享的目标检测项目是:基于yolov3交通标志检测和识别(附代码和数据集)[目前yolov7都出来了,为什么要用2018年的yolov3呢?因为我想 ...

  3. 【目标检测】基于yolov3的红细胞检测、计数项目(附代码+数据集)

    先看训练得到的模型,在测试集上的检测效果: 大家好,我是augustqi.今天手把手带大家做一个深度学习实战项目:基于yolov3的红细胞检测.计数项目.yolov3模型的训练在Windows系统下进 ...

  4. python 圆形检测_基于opencv-python的圆形检测

    一.图像基本处理 通常我们获取到的原始图像包含了比较多的背景噪声,影响我们对目标的提取,因此在进行变换前,我们会采取一些预处理方法对图像进行增强,如: 1.灰度处理 2.边缘检测,常用Canny算子: ...

  5. java光流法运动目标检测_基于光流法运动目标检测和跟踪算法.PDF

    第,+ 卷第' 期 东 北 大 学 学 报 ( 自 然 科 学 版 ) 5# (! ,+ ,*#! ' ! " #' 年 ' 月 "#$%&'( #) *#%+,-'.+- ...

  6. 基于yolov3的行人目标检测算法在图像和视频中识别检测

    资源下载地址:https://download.csdn.net/download/sheziqiong/85772186 资源下载地址:https://download.csdn.net/downl ...

  7. 检测噪声大小的c语言程序,单片机课程设计(论文)_基于AT89C51的噪音检测自适应系统设计.doc...

    单片机课程设计(论文)_基于AT89C51的噪音检测自适应系统设计 摘 要 本文以AT89S52 单片机为控制核心,通过播音判断电路寻找广播间歇时段,实时采集噪声环境内的噪音信 号,根据A/ D 转换 ...

  8. cv2 python 获取斑马线_基于python的opencv图像处理实现对斑马线的检测示例

    基本思路 斑马线检测通过opencv图像处理来进行灰度值转换.高斯滤波去噪.阈值处理.腐蚀和膨胀后对图像进行轮廓检测,通过判断车辆和行人的位置,以及他们之间的距离信息,当车速到超过一定阈值时并且与行人 ...

  9. python 活体检测_基于Python+Keras+OpenCV实现实时人脸活体检测 | 文末送书

    你在互联网上找到的大多数人脸识别算法和研究论文都会遭受照片***.这些方法在检测和识别来自网络摄像头的图像.视频和视频流中的人脸方面是很是有效,可是他们没法区分现实生活中的面孔和照片上的面孔.这种没法 ...

最新文章

  1. 【洛谷】【动态规划+单调队列】P1725 琪露诺
  2. java mapper control_java spring boot中怎么编写mapper?怎么编写service和controller?
  3. 【模糊数学】编程实现文献“研究生招生中的模糊聚类分析方法”
  4. 葛优:你们有看过我的作品吗?| 今日趣图
  5. 创新设计模式:单例模式
  6. ajax如何做到异步交互,1.ajax简单实现异步交互
  7. asp人脸识别,asp刷脸识别接口代码,微信公众号人脸识别代码
  8. J2ME、J2SE、J2EE 小讲
  9. 如何把妹子拍得更好看?
  10. 世界各个国家及其国家代码
  11. Windows查看所有共享
  12. oracle的解除锁表
  13. Linux设置和取消定时关机,修改 linux 默认启动级别 设置系统时间   定时关机
  14. 868-超详细 DNS 协议解析
  15. 小心肝队-冲刺日志(第五天)
  16. pdcp层的作用_pdcp层的主要功能
  17. 消逝的Coin:Stratum协议劫持技术
  18. 人物 | 游戏安全“痴汉”——FairGuard CEO 陈士留创业起步史
  19. Linux c使用gumbo库解析页面表单信息(二)
  20. 编程练习:母牛的故事* 题解

热门文章

  1. Mac终端出现@bogon的解决办法(恢复以前方法)
  2. B站后端java_GitHub - javalovelinux/bilibili-vue: 前端vue+后端koa,全栈式开发bilibili首页...
  3. 为何“迷你本”退货率很高?
  4. 激光焊接3系铝合金的工艺分析
  5. linux命令:less和more
  6. STMcubeIDE学习汇总(五)----知识覆盖
  7. 虚拟机设置共享文件夹添加不显示
  8. GeoTools 笔记
  9. 最基本的TVS管系列型号,你了解吗?
  10. cloudxns 智能解析领域的一匹黑马