目标监测yolov3


原文链接: 目标监测yolov3

yolov4 https://github.com/AlexeyAB/darknet

Yolov3 训练脚本bin/ITRI_ADAT/darknet at master · jklhj222/bin

yolo golang lib

https://github.com/wattanakorn495/go-yolo-webrtc

https://github.com/PengyiZhang/SlimYOLOv3
YoloV3 教程 - 知乎
golang darknet
YOLOv3: 训练自己的数据 - 微风❤水墨 - CSDN博客

深度学习笔记(四)---YOLO目标检测 - 一一
关于yolov3的网络结构理解 - weixin_40003920的博客
darknet-yolov3训练自己的数据集(超详细)voc转yolo格式 - AnswerThe - 博客园

重新训练

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

继续训练

./darknet detector train cfg/voc.data cfg/yolov3-voc.cfg backup/yolov3-voc.backup -gpus 0,1

1538 ./darknet detector valid cfg/voc.data cfg/yolov3-voc.cfg cfg/yolov3-voc_1226.weights
1548 ./darknet detector recall cfg/voc.data cfg/yolov3-voc.cfg cfg/yolov3-voc_1226.weights
1662 cd work_wpj
1663 cd darknet/
1664 cd cfg
1665 ll
1666 vi yolov3-voc.cfg
1667 cd ..
1668 ./darknet detector valid cfg/voc.data cfg/yolov3-voc.cfg cfg/yolov3-voc.weights
1669 ./darknet detector valid cfg/voc.data cfg/yolov3-voc.cfg cfg/yolov3-voc_1226.weights
1670 cd work_wpj
1671 ./darknet classifier valid cfg/voc.data cfg/yolov3-voc.cfg cfg/yolov3-voc.weights
1672 cd darknet/
1673 ./darknet classifier valid cfg/voc.data cfg/yolov3-voc.cfg cfg/yolov3-voc.weights
1674 cd cfg/
1675 ll
1676 ./darknet classifier valid cfg/voc.data cfg/yolov3-voc.cfg cfg/yolov3-voc_1226.weights
1677 cd ..
1678 ./darknet classifier valid cfg/voc.data cfg/yolov3-voc.cfg cfg/yolov3-voc_1226.weights
1679 cd data/

1771 ./darknet detector train cfg/voc.data cfg/yolov3-voc.cfg darknet53.conv.74 -gpus 0,1
1772 python voc_label.py
1773 cd /usr/local/cuda/lib64/
1774 ll
1775 cd /etc
1776 ll
1777 cd ld.so.conf.d/
1778 ll
1779 vi cuda.conf
1780 ll
1781 sudo cuda.conf
1782 sudo gedit cuda.conf
1783 ll
1784 sudo ldconfig
1785 sudo ln -sf /usr/local/lib/libcudnn.so.7.1.3 /usr/local/lib/libcudnn.so.7
1786 sudo ldconfig
1787 sudo ./darknet detector train cfg/voc.data cfg/yolov3-voc.cfg darknet53.conv.74 -gpus 0,1
1788 nvcc --version
1789 sudo ./darknet detector train cfg/voc.data cfg/yolov3-voc.cfg darknet53.conv.74 -gpus 0,1
1790 nvidia-smi
1791 sudo ./darknet detector train cfg/voc.data cfg/yolov3-voc.cfg darknet53.conv.74
1792 nvidia-smi
1793 sudo ./darknet detector train cfg/voc.data cfg/yolov3-voc.cfg darknet53.conv.74
1794 nvidia-smi
1795 sudo ./darknet detector train cfg/voc.data cfg/yolov3-voc.cfg darknet53.conv.74
1796 nvidia-smi

训练

10.开始训练

./darknet detector train cfg/voc.data cfg/yolov3-voc.cfg scripts/darknet53.conv.74 -gpus 0,1

#注意文件路径
11.测试识别。训练后会在backup文件夹下生成权重文件,利用生成的权重文件进行测试

./darknet detector test cfg/voc.data cfg/yolov3-voc.cfg backup/yolov3-voc_600.weights data/210.jpg

./darknet detect cfg/yolov3.cfg yolov3.weights data/dog.jpg #默认使用第1块GPU

./darknet detect cfg/yolov3.cfg yolov3.weights -i 1 data/dog.jpg # -i 1:使用第2块GPU
./darknet -nogpu detect cfg/yolov3.cfg yolov3.weights data/dog.jpg #-nogpu:不使用GPU

使用yolov3-tiny 检测

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

模型对应关系

  1. TF之YOLO:将weights文件转换为tensorflow需要的h5文件的几种分类
    解决问题
    将weights文件转换为tensorflow需要的h5文件的几种分类
    python yad2k.py tiny-yolo-5clesses.cfg tiny-yolo-5clesses_100.weights model_data/tiny-yolo-5cl.h5
  2. 由于想把yolo生成的模型移植到android手机上,所以需要将生成的权重文件转化为.pb格式
    生成.pb文件
    将darknet中你用到的cfg和生成的.weights文件拷贝到darkflow的根目录,然后输入一下命令

flow --model (你用到的).cfg --load (你生成的).weights --savepb

2.2 安装步骤
【(1) 获取图像检测训练模型

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

【(3) 修改Makefile文件 GPU参数配置】】

# 使用GPU,设为1
GPU=1
# 启用CUDNN,设为1
CUDNN=1

【(4) 编译】

make
make clean(清除编译)

(5) 获取训练模型权重】

weights 下载

#!/bin/bash

# make '/weights' directory if it does not exist and cd into it
mkdir -p weights && cd weights

# copy darknet weight files, continue '-c' if partially downloaded
wget -c https://pjreddie.com/media/files/yolov3.weights
wget -c https://pjreddie.com/media/files/yolov3-tiny.weights
wget -c https://pjreddie.com/media/files/yolov3-spp.weights

# yolov3 pytorch weights
# download from Google Drive: https://drive.google.com/drive/folders/1uxgUBemJVw9wZsdpboYbzUN4bcRhsuAI

# darknet53 weights (first 75 layers only)
wget -c https://pjreddie.com/media/files/darknet53.conv.74

# yolov3-tiny weights from darknet (first 16 layers only)
# ./darknet partial cfg/yolov3-tiny.cfg yolov3-tiny.weights yolov3-tiny.conv.15 15
# mv yolov3-tiny.conv.15 ../

#wget https://pjreddie.com/media/files/darknet19_448.conv.23
#wget https://www.dropbox.com/s/yvca2um3dketvxi/first-test-core-yolo-obj_20000.weights?dl=0

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

训练到一定程度需要测试效果时,可以终止一下训练(ctrl+c),此时在backup文件夹下有好多训练权重(.weight)文件。用其检测样本的代码如下:

./darknet detector test cfg/voc.data cfg/yolov3-voc.cfg backup/yolov3-voc_600.weights data/210.jpg
:我这里是yolov3-voc_600.weights文件,根据实际文件名修改
1
检测完继续训练则用如下代码:

./darknet detector train cfg/voc.data cfg/yolov3-voc.cfg scripts/yolov3-voc_600.weights

这里注意要把yolov3-voc_600.weights文件放在darknet文件夹下

在终端里,直接运行时Yolo的Darknet的各项命令,

darknet/cfg/coco.data文件,使用原件:
=======================================coco.data=====================================================
classes= 80
train = /home/pjreddie/data/coco/trainvalno5k.txt
valid = coco_testdev
#valid = data/coco_val_5k.list
names = data/coco.names
backup = /home/pjreddie/backup/

eval=coco

(1)检测一张图片
wp@wp-MS-7519:~/darknet$ ./darknet detect cfg/yolov3.cfg wp_data/yolov3.weights data/dog.jpg

出现问题:
./darknet detector test cfg/yolov3.cfg wp_data/yolov3.weights data/dog.jpg报错names: Using default 'data/names.list'。。。Couldn't open file: data/names.list
./darknet detect cfg/yolov3.cfg yolov3.weights data/dog.jpg 没有结果出来。

(2)检测一段视频
接好usb后,直接运行usb视频检测
./darknet detector demo /home/wp/darknet/cfg/coco.data /home/wp/darknet/cfg/yolov3.cfg /home/wp/darknet/weights/yolov3.weights
说明:在CPU下,运行的特别卡。"直接接USB,然后执行:./darknet detector demo cfg/coco.data cfg/yolov3.cfg yolov3.weights就可以了啊,

官网https://pjreddie.com/darknet/yolo/说的很详细的。"

YOLO V3常用命令总结

参考@http://www.cnblogs.com/pprp/p/9525508.html
(1)在GPU下训练自己的模型

1.1 单GPU训练:./darknet -i <gpu_id> detector train <data_cfg> <train_cfg> <weights>

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

1.2 多GPU训练,格式为0,1,2,3:./darknet detector train <data_cfg> <model_cfg> <weights> -gpus <gpu_list>

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

(2)单张测试命令:
$ ./darknet detect cfg/yolov3.cfg yolov3.weights data/dog.jpg

添加阈值:阈值范围0~1,By default, YOLO only displays objects detected with a confidence of .25 or higher. You can change this by passing the -thresh flag to the yolo command. For example, to display all detection you can set the threshold to 0:
$ ./darknet detect cfg/yolov3.cfg yolov3.weights data/dog.jpg -thresh 0

(3)批量测试图片

官网的测试命令,只能单张测试,如果需要批量测试则yolov3-voc.cfg(cfg文件夹下)文件中batch和subdivisions两项必须为1,并修改detector.c文件中的相关地方,重新进行编译make clean,make。
开始批量测试:

$ ./darknet detector test cfg/voc.data cfg/yolov3-voc.cfg backup/yolov3-voc_20000.weights

接着在终端中,输入Image Path(所有的测试文件的路径,可以复制voc.data中valid后边的路径):

/home/learner/darknet/data/voc/2007_test.txt # 完整路径。

结果都保存在./data/out(detector.c中设定路径)文件夹下。

(4)生成预测结果:
$ ./darknet detector valid

yolov3-voc.cfg(cfg文件夹下)文件中batch和subdivisions两项必须为1。
结果生成在<data_cfg>的results指定的目录下以<out_file>开头的若干文件中,若<data_cfg>没有指定results,那么默认为<darknet_root>/results。
执行语句如下:在终端只返回用时,在./results/comp4_det_test_[类名].txt里保存测试结果

$ ./darknet detector valid cfg/voc.data cfg/yolov3-voc.cfg backup/yolov3-voc_20000.weights

(5)官网的测试命令作为入口 @https://pjreddie.com/darknet/yolo/
5.1 单张测试命令:
$ ./darknet detect cfg/yolov3.cfg yolov3.weights data/dog.jpg
./darknet 是执行当前文件下面已经编译好的darknet文件
detect 是命令 后面三个分别是参数: 网络模型 网络权重 需要检测的图片
命令“ ./darknet detect ”等同于“ ./darknet detector test ”,The detect command is shorthand for a more general version of the command. It is equivalent to the command:
$ ./darknet detector test cfg/coco.data cfg/yolov3.cfg yolov3.weights data/dog.jpg

5.2 多张测试命令:
$ ./darknet detect cfg/yolov3.cfg yolov3.weights
Enter Image Path: data/dog1.jpg
Enter Image Path: data/dog2.jpg

5.3 改变阈值
YOLO默认阈值0.25,可以自行设定:
$ ./darknet detect cfg/yolov3.cfg yolov3.weights data/dog.jpg -thresh 0

5.4 Real-Time Detection on a Webcam
实时视频检,测需要Darknet with CUDA and OpenCV,-c ,OpenCV默认为0:
$ ./darknet detector demo cfg/coco.data cfg/yolov3.cfg yolov3.weights

本地视频检,直接输入视频:
$ ./darknet detector demo cfg/coco.data cfg/yolov3.cfg yolov3.weights

5.5 在预训练的模型上继续训练
在 CPU 下训练:$ ./darknet detector train cfg/voc.data cfg/yolov3-voc.cfg darknet53.conv.74
在 多GPU下训练:$ ./darknet detector train cfg/coco.data cfg/yolov3.cfg darknet53.conv.74 -gpus 0,1,2,3
从定点继续训练:$ ./darknet detector train cfg/coco.data cfg/yolov3.cfg backup/yolov3.backup -gpus 0,1,2,3

5.6 测试公开数据
$ ./darknet detector test cfg/openimages.data cfg/yolov3-openimages.cfg yolov3-openimages.weights

=====================================================
(6)对 视频 进行测试命令:
对本地视频进行测试 命令:

Darknet环境中,$ ./darknet detector test cfg/coco.data cfg/yolov3.cfg yolov3.weights data/xxx.mp4
OpenCV 环境中, $ python3 object_detection_yolo.py --video=run.mp4
【a single image:

python3 object_detection_yolo.py --image=bird.jpg

a video file:

python3 object_detection_yolo.py --video=run.mp4 】

对USB摄像头视频进行测试 命令:

Darknet环境中,$ ./darknet detector test cfg/coco.data cfg/yolov3.cfg yolov3.weights
OpenCV 环境中, $ (暂略)

对WebCam网络视频(比如大华、海康相机)进行测试 命令:
这里使用命令前需要作相应的修改,需要相机+电脑在同一局域网,这样才能访问。首先,要知道相机的IP,然后在电脑里添加相机的六段IP地址,在IPv4中添加类似:192.168.6.111,前二位表示在同一局域网,第三位1表示1段的IP、6表示6段的IP。接着获取相机的用户名、密码。这样才能使用 添加摄像机 命令,
$ ./darknet detector demo cfg/coco.data cfg/yolov3.cfg yolov3.weights rtsp://admin:hik12345@30.14.199.6:554/h265/ch1/main/av_stream
$ ./darknet detector demo cfg/coco.data cfg/yolov3.cfg yolov3.weights rtsp://admin:abcd12345@30.14.6.192:554/Streaming/Channels/1/
$ ./darknet detector demo cfg/coco.data cfg/yolov3.cfg yolov3.weights rtsp://admin:abcd12345@30.14.6.192:554/Streaming/Channels/101/

+++++++++++++++++++++++++++++++++《摄像机Rtsp地址格式大全》++++++++++++++++++++++++++++++
@https://www.cnblogs.com/dpf-10/p/5533698.html
@http://www.mamicode.com/info-detail-2190692.html
@https://blog.csdn.net/viola_lulu/article/details/53330727
一. 海康、中威摄像机

 格式1
     主码流:rtsp://admin:12345@192.168.1.64:554/Streaming/Channels/1
     子码流:rtsp://admin:12345@192.168.1.64:554/Streaming/Channels/2

   第三码流:rtsp://admin:12345@192.168.1.64:554/Streaming/Channels/3

 格式2

    rtsp://admin:12345@192.168.1.64:554/ch1/main/av_stream

如果摄像机密码是a12345678,IP是192.168.1.64,RTSP端口默认554未做改动,是H.264编码,那么
主码流取流:
rtsp://admin:a12345678@192.168.1.64:554/h264/ch1/main/av_stream
子码流取流:
rtsp://admin:a12345678@192.168.1.64:554/h264/ch1/sub/av_stream
【如果是H.265编码的,那么将H.264替换成H.265即可】

二. 大华

  rtsp://admin:12345@192.168.1.64:554/cam/realmonitor?channel=1&subtype=0
`