参考自官网  https://pjreddie.com/darknet/install/

1. 下载darknet  并编译

    

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

 注意事项: 如果是使用CPU,  那么就需要设置以下几个参数

GPU=0
CUDNN=0
OPENCV=1
OPENMP=0
DEBUG=0

如果opencv是使用的自己编译的库,那么就需要更改opencv路径  改这里:

LDFLAGS+= `pkg-config --libs opencv` -lstdc++
COMMON+= `pkg-config --cflags opencv`

2.   test

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

3. train the dataset of VOC

  

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
./darknet detector train cfg/voc.data cfg/yolov3-voc.cfg darknet53.conv.74
4. yolo 的各种参数,比如batch_size 
  https://blog.csdn.net/hjxu2016/article/details/80015559 5. 训练需要的文件
  (1) picture files :
    /darknet/VOCdevkit/VOC2007/JPEGImages/000001.jpg ... ...

  (2) labels  such as : 
content of the txt is as flow:

11 0.344192634561 0.611 0.416430594901 0.262
14 0.509915014164 0.51 0.974504249292 0.972

explain :

11 is classfied as a dog    and (0.34,0.6,0.4, 0.26) is position (center.x , center.y , w , h)  of the object .

14 is the dog and its poistion

if the 2 position is draw on the picture , it will dispalys as :

(3)   train.txt   this files contains all the picture to train . its contents is as folows:

    /root/darknet/VOCdevkit/VOC2012/JPEGImages/2009_000001.jpg

    ...  ...

(4)   cfg/voc.data

classes= 20
train = ./train.txt 
valid = ./2007_test.txt
names = data/voc.names
backup = backup

(5)   data/voc.names   the names of classes form 0 - 19

aeroplane
bicycle
bird
boat
bottle
bus
car
cat
chair
cow
diningtable
dog
horse
motorbike
person
pottedplant
sheep
sofa
train
tvmonitor

(6)   pre-trained convlutional weights :

darknet53.conv.74

综上所述  如果你要训练一个模型,你得按以下步骤

1. 获得你要训练的图片,包括 正例 和 反例

2. 给你的正例和反例进行标注, 生成labels

3.将你的数据分成两拨, 一波是训练集, 一波是测试集

4. 修改train.txt   lables cfg/voc.data    ....

4   yolov3  训练人脸数据集

https://blog.csdn.net/ycdhqzhiai/article/details/81205503

5. GPU版本

5.1 install    NVIDA driver

  install Nvida cuda

  install Nvida cudnn

  modify Makefile  as flow

  你的arch 要根据这个网站来查   算力查询 : https://developer.nvidia.com/cuda-gpus

5.2 make

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

5.4 modify cfg/yolov3-voc.cfg  使batch=64  , subsions=16

5.5 train start

5.6 after train , you can test your models as flow :

6. yolo 训练日志解释

  • 每个batch都会有这样一个输出:
  • 2706: 1.350835, 1.386559 avg, 0.001000 rate, 3.323842 seconds, 173184 imag

2706:batch是第几组。
1.350835:总损失
1.386559 avg : 平均损失
0.001000 rate:当前的学习率
3.323842 seconds: 当前batch训练所花的时间
173184 images : 目前为止参与训练的图片总数 = 2706 * 64

Region 82 Avg IOU: 0.798032, Class: 0.559781, Obj: 0.515851, No Obj: 0.006533, .5R: 1.000000, .75R: 1.000000,  count: 2

Region Avg IOU: 表示在当前subdivision内的图片的平均IOU,代表预测的矩形框和真实目标的交集与并集之比.
Class: 标注物体分类的正确率,期望该值趋近于1。
Obj: 越接近1越好。
No Obj: 期望该值越来越小,但不为零。
count: count后的值是所有的当前subdivision图片(本例中一共4张)中包含正样本的图片的数量。

7.   训练参数  cfg

https://blog.csdn.net/qq_35608277/article/details/79922053

8.yolov3 应该什么时候停止训练??

https://github.com/jaskarannagi19/yolov3#when-should-i-stop-training

1.当看到平均损失0.xxxxxx avg在多次迭代时不再减少时,您应该停止训练,一旦训练停止,从最后一个文件中darknet\build\darknet\x64\backup选择最好的.weights文件.

2. 0.XXX avg < 0.06 时

您在9000次迭代后停止了训练,但最佳结果可以给出之前的权重之一(7000,8000,9000)。它可能由于过度拟合而发生。

过度拟合 - 例如,您可以从training-dataset检测图像上的对象,但无法检测任何其他图像上的对象。你应该从早期停止点获得权重:

9.mAP

基本定义: precision和recall的含义, preicision是在你认为的正样本中, 有多大比例真的是正样本, recall则是在真正的正样本中, 有多少被你找到了。

平均准确率

10 mAP 计算

https://blog.csdn.net/amusi1994/article/details/81564504

11  基于前面的模型继续训练

build\darknet\x64\darknet.exe detector train .\cfg\pikaiqiu.data .\cfg\yolov3_pikaqiu.cfg backup\yolov3_pikaqiu_2500.weights

12   yolov3 里的mask的含义

mask = 6,7,8    ### 第一层标记为6 7 8 因为我们需要在第一层预测size较大的物体,同理第二层那个预测小一点的物体

#anchors是可以事先通过cmd指令计算出来的,是和图片数量,width,height以及cluster(应该就是下面的num的值,即想要使用的anchors的数量)相关的预选框,可以手工挑选,也可以通过kmeans 从训练样本中学>出!

anchors = 10,13, 16,30, 33,23, 30,61, 62,45, 59,119, 116,90, 156,198, 373,326
classes=1 #类别数量 网络需要识别的物体种类数
num=9 #每个grid cell预测几个box,和anchors的数量一致。当想要使用更多anchors时需要调大num,且如果调大num后训练时Obj趋近0的话可以尝试调大object_scale
jitter=.3 #数据扩充的抖动操作 利用数据抖动产生更多数据,YOLOv2中使用的是crop,filp,以及net层的angle,flip是随机的,jitter就是crop的参数,tiny-yolo-voc.cfg中jitter=.3,就是>在0~0.3中进行crop
ignore_thresh = .5 #决定是否需要计算IOU误差的参数,大于thresh,IOU误差不会夹在cost function中
truth_thresh = 1
random=1 #默认参数1,如果显存很小,将random设置为0,关闭多尺度训练;如果为1,每次迭代图片大小随机从320到608,步长为32,如果为0,每次训练大小与输入大小一致

13  如何提高mAP

https://github.com/AlexeyAB/darknet#how-to-improve-object-detection

14  训练出来测试的时候有null  怎么解决??  感觉像是因为模型没有训练出来的原因啊??

15:

YOLO 学习之路的更多相关文章

  1. jQuery学习之路(1)-选择器

    ▓▓▓▓▓▓ 大致介绍 终于开始了我的jQuery学习之路!感觉不能再拖了,要边学习原生JavaScript边学习jQuery jQuery是什么? jQuery是一个快速.简洁的JavaScript ...

  2. Android开发学习之路-RecyclerView滑动删除和拖动排序

    Android开发学习之路-RecyclerView使用初探 Android开发学习之路-RecyclerView的Item自定义动画及DefaultItemAnimator源码分析 Android开 ...

  3. RPC远程过程调用学习之路(一):用最原始代码还原PRC框架

    RPC: Remote Procedure Call 远程过程调用,即业务的具体实现不是在自己系统中,需要从其他系统中进行调用实现,所以在系统间进行数据交互时经常使用. rpc的实现方式有很多,可以通 ...

  4. webService学习之路(三):springMVC集成CXF后调用已知的wsdl接口

    webService学习之路一:讲解了通过传统方式怎么发布及调用webservice webService学习之路二:讲解了SpringMVC和CXF的集成及快速发布webservice 本篇文章将讲 ...

  5. [精品书单] C#/.NET 学习之路——从入门到放弃

    C#/.NET 学习之路--从入门到放弃 此系列只包含 C#/CLR 学习,不包含应用框架(ASP.NET , WPF , WCF 等)及架构设计学习书籍和资料. C# 入门 <C# 本质论&g ...

  6. Redis——学习之路四(初识主从配置)

    首先我们配置一台master服务器,两台slave服务器.master服务器配置就是默认配置 端口为6379,添加就一个密码CeshiPassword,然后启动master服务器. 两台slave服务 ...

  7. Redis——学习之路三(初识redis config配置)

    我们先看看config 默认情况下系统是怎么配置的.在命令行中输入 config get *(如图) 默认情况下有61配置信息,每一个命令占两行,第一行为配置名称信息,第二行为配置的具体信息.     ...

  8. Redis——学习之路二(初识redis服务器命令)

    上一章我们已经知道了如果启动redis服务器,现在我们来学习一下,以及如何用客户端连接服务器.接下来我们来学习一下查看操作服务器的命令. 服务器命令: 1.info——当前redis服务器信息   s ...

  9. 踏上Salesforce的学习之路(一)

    相信通过前面的学习,大家已经拥有了一个属于自己的Salesforce开发者账号,下面,我们将用这个账号正式踏上Salesforce的学习之路. 首先,点击网址:https://developer.sa ...

随机推荐

  1. mongodb 数据更新命令、操作符

    一.Mongodb数据更新命令 Mongodb更新有两个命令:update.save. 1.1update命令 update命令格式: db.collection.update(criteria,ob ...

  2. Android自定义控件之基本图形绘制

    入门示例代码 在Android中Paint类就是画笔,Canvas 就是画布 对于画笔的大小,粗细,颜色,透明度都在paint类中设置,对于画出的成品,比如圆,方形,等在canvas类中的函数生成 入 ...

  3. 一百三十四:CMS系统之版块管理二

    编辑 html,将数据渲染到tr上,方便js取值 js //编辑板块$(function () { $('.edit-board-btn').click(function (event) { var ...

  4. hadoop 2.8.5安装步骤

    1.创建hadoop用户,作为haoop的运行用户 2.配置JAVA_HOME环境变量,修改/etc/profile export JAVA_HOME=/usr/java/jdk1.8.0_51 ex ...

  5. windows注册服务

    Windows服务是运行一些服务程序的较好方式(这些程序专门为各种功能提供服务,无操作界面,运行在后台),其创建方法也很简单,通过系统自带的sc命令即可方便的创建. sc命令创建Windows服务的方 ...

  6. 华为Liteos移植到stm32F03ZE

    华为Liteos和物联网设备侧sdk移植到stm32F03ZE霸道板子上 推荐官方教程:https://liteos.github.io/ 啥是LIteos "开源免费"的实时操作 ...

  7. 使用STM32F103ZET霸道主板实现SD卡的读写(非文件系统)

    了解STM32F103ZET是高容量多管脚的芯片 了解SD读写线路图 了解SD的基地址 阅读STM32F10xx英文参考 SDIO那章,我们编写代码边看文档解析 建工程,打开包含所有包括外设库函数的样 ...

  8. 基于c开发的全命令行音频播放器

    cmus是一个内置了音频播放器的强大的音乐文件管理器.用它的基于ncurses的命令行界面,你可以浏览你的音乐库,并从播放列表或队列中播放音乐,这一切都是在命令行下. Linux上安装cmus 首先, ...

  9. YUV RGB 格式转换

    第一个公式是RGB转YUV(范围0-255)时用的,第二个公式是用在YUV转换RGB(范围0-255)时用的.1. Y = ; U = -; V = ; 黑色:Y=16 ,U= V =128 红色:Y ...

  10. 【DSP开发】德州仪器达芬奇五年之路七宗罪,嵌入式处理器架构之争决战2012

    芯片是产业链上游重要的一个环节,一颗小小的芯片具有极高的技术含量和价值,半导体行业每年都会有一个各大厂商营业额的排名,除去2009年,常年盘踞在前三名位置的分别是英特尔,三星半导体和德州仪器,英特尔凭 ...