darknet优化经验

主要来自于:AlexeyAB 版本darknet

1. AlexeyAB改进项

  • 提供window支持

  • 相较于原版pjreddie版本darknet提升了训练速度

  • 添加了二值化网络,XNOR(bit) ,速度快,准确率稍低https://github.com/AlexeyAB/darknet/blob/master/cfg/yolov3-tiny_xnor.cfg

  • 提升7%通过将卷积层和BN层合并为一个(*_*)不太懂。

  • 多GPU训练提升

  • 修补了[reorg]层

  • 添加了mAP, IOU,Precision-Recall计算

    darknet detector map...

  • 可以在训练过程中画loss图像

  • 添加了根据自己数据集的anchor生成

  • 提升视频检测,网络摄像头,opencv相关问题

  • 提出了一个INT8的网络,提升了检测速度,但是准确率稍有下降

    https://github.com/AlexeyAB/yolo2_light

2. Linux下编译选项

  • GPU=1 to build with CUDA to accelerate by using GPU (CUDA should be in /usr/local/cuda)
  • CUDNN=1 to build with cuDNN v5-v7 to accelerate training by using GPU (cuDNN should be in /usr/local/cudnn)
  • CUDNN_HALF=1 to build for Tensor Cores (on Titan V / Tesla V100 / DGX-2 and later) speedup Detection 3x, Training 2x
  • OPENCV=1 to build with OpenCV 3.x/2.4.x - allows to detect on video files and video streams from network cameras or web-cams
  • DEBUG=1 to bould debug version of Yolo
  • OPENMP=1 to build with OpenMP support to accelerate Yolo by using multi-core CPU
  • LIBSO=1 to build a library darknet.so and binary runable file uselib that uses this library. Or you can try to run so LD_LIBRARY_PATH=./:$LD_LIBRARY_PATH ./uselib test.mp4 How to use this SO-library from your own code - you can look at C++ example: https://github.com/AlexeyAB/darknet/blob/master/src/yolo_console_dll.cpp or use in such a way: LD_LIBRARY_PATH=./:$LD_LIBRARY_PATH ./uselib data/coco.names cfg/yolov3.cfg yolov3.weights test.mp4

3. 训练经验

  • 首先对数据集进行检错,使用提供的如下库进行检测:

https://github.com/AlexeyAB/Yolo_mark

  • 什么时候停止训练

    • avg loss不再下降的时候

    • 通常每个类需要2000-4000次迭代训练即可

    • 防止过拟合:需要在Early stopping point停止训练

      使用以下命令:

      darknet.exe detector map...

      建议训练的时候带上-map,可以画图

4. 提升检测效果

  • random=1可以设置适应多分辨率

  • 提升分辨率:416--> 608等必须是32倍数

  • 重新计算你的数据集的anchor:(注意设置的时候计算问题)

    darknet.exe detector calc_anchors data/obj.data -num_of_clusters 9 -width 416 -height 416

  • 检查数据集通过https://github.com/AlexeyAB/Yolo_mark

  • 数据集最好每个类有2000张图片,至少需要迭代2000*类的个数

  • 数据集最好有没有标注的对象,即负样本,对应空的txt文件,最好有多少样本就设计多少负样本。

  • 对于一张图有很多个样本的情况,使用max=200属性(yolo层或者region层)

  • for training for small objects - set layers = -1, 11 instead of https://github.com/AlexeyAB/darknet/blob/6390a5a2ab61a0bdf6f1a9a6b4a739c16b36e0d7/cfg/yolov3.cfg#L720 and set stride=4 instead of https://github.com/AlexeyAB/darknet/blob/6390a5a2ab61a0bdf6f1a9a6b4a739c16b36e0d7/cfg/yolov3.cfg#L717

  • 训练数据需要满足以下条件:

    • train_network_width * train_obj_width / train_image_width ~= detection_network_width * detection_obj_width / detection_image_width
    • train_network_height * train_obj_height / train_image_height ~= detection_network_height * detection_obj_height / detection_image_height
  • 为了加速训练,可以做fine-tuning而不是从头开始训练,设置stopbackward=1在网络的结束部分(以####作为分割)

  • 在训练完以后,进行目标检测的时候,可以提高网络的分辨率,以便刚好检测小目标。

    • 不需要重新训练,需要使用原先低分辨率的权重,测用更高分辨率。
    • 为了得到更高的检测效果,可以提升分辨率至608*608甚至832*832

5. 总结

为了小目标:

  • 提升分辨率
  • 在测试时候提升分辨率
  • 数据集添加跟正样本数量一样多的负样本
  • 数据集每个类至少2000张,训练迭代次数2000*classes个数
  • 设置自己数据集的anchor

6. AlexeyAB大神改进

  • web-cam版本:

./darknet detector demo ... -json_port 8070 -mjpeg_port 8090

  • 计算mAP, F1, IoU, Precision-Recall

./darknet detector map ...

  • 展示map-loss曲线(需要opencv)

./darknet detector train cfg/voc.data cfg/yolo.cfg -dont_show -mjpeg_port 8090 -map

  • 计算聚类产生的anchor

./darknet detector calc_anchors data/voc.data -num_of_clusters 12 -width 608 -height 608

  • 分离前部基础网络

./darknet partial cfg/darknet19_448.cfg darknet19_448.weights darknet19_448.conv.23 23

  • 测试opencv

./darknet imtest data/eagle.jpg

  • 阈值设置

-thresh 0

darknet优化经验-AlexeyAB大神经验的更多相关文章

  1. AlexeyAB大神版yolo 待完善

    目录 darknet优化经验 1. AlexeyAB改进项 2. Linux下编译选项 3. 训练经验 4. 提升检测效果 5. 总结 6. AlexeyAB大神改进 darknet优化经验 主要来自 ...

  2. 实战经验|大神战队都在i春秋教你打CTF

    全国大学生信息安全竞赛创新实践能力赛旨在培养.选拔.推荐优秀信息安全专业人才创造条件,促进高等学校信息安全专业课程体系.教学内容和方法的改革,培养学生的创新意识与团队合作精神,普及信息安全知识,增强学 ...

  3. 一个4年工作经验的java程序员的困惑,怎样才能能为一个架构师,请教大神

    一个4年工作经验的java程序员的困惑,怎样才能能为一个架构师 LZ本人想往架构师发展, 业余时间也会看一些书籍, 但是感觉没有头绪, 有些书看了,也没有地方实践 我做了4年的java开发, 在一个公 ...

  4. ACM 大神的经验加技巧(当然不是我的拉——

    大神 犯错合集及需要注意的东西 1.在一个地图求最大面积的类问题中,要注意障碍结点的影响. 2.ll(),表示的是在运算后把括号内强制转化为类型ll,而(ll)表示后面的每个玩意都强制转化为类型ll. ...

  5. 每一个程序员都应该知道的高并发处理技巧、创业公司如何解决高并发问题、互联网高并发问题解决思路、caoz大神多年经验总结分享

    本文来源于caoz梦呓公众号高并发专辑,以图形化.松耦合的方式,对互联网高并发问题做了详细解读与分析,"技术在短期内被高估,而在长期中又被低估",而不同的场景和人员成本又导致了巨头 ...

  6. MYSQL性能优化的最佳20+条经验

    MYSQL性能优化的最佳20+条经验 2009年11月27日 陈皓 评论 148 条评论  131,702 人阅读 今天,数据库的操作越来越成为整个应用的性能瓶颈了,这点对于Web应用尤其明显.关于数 ...

  7. 使用ThinkPHP开发中MySQL性能优化的最佳21条经验

    使用ThinkPHP开发中MySQL性能优化的最佳21条经验讲解,目前,数据库的操作越来越成为整个应用的性能瓶颈了,这点对于Web应用尤其明显.关于数据库的性能,这并不只是DBA才需要担心的事,而这更 ...

  8. 【TOP100案例专访】当当网工程师林嘉琦谈双11大促经验及APM实践

    导读:第七届TOP100全球软件案例研究峰会将于11月30日-12月3日在北京国家会议中心举办,本届峰会以“释放AI生产力 让组织向智能化演进”为开幕式主题,旨在推动企业在趋势下拥抱AI.探索和思考A ...

  9. Splunk大数据分析经验分享

    转自:http://www.freebuf.com/articles/database/123006.html Splunk大数据分析经验分享:从入门到夺门而逃 Porsche 2016-12-19 ...

随机推荐

  1. openssl签署和自签署证书的多种实现方式

    openssl系列文章:http://www.cnblogs.com/f-ck-need-u/p/7048359.html 1.采用自定义配置文件的实现方法 1.1 自建CA 自建CA的机制:1.生成 ...

  2. ASP.NET新增数据返回自增ID

    一.情景引入 项目需求:对于一个数据表(表A)的增.删.改全部要有日志记录,日志表(表B)结构 中需要记录表A的自增ID,这样才能将日志与操作的数据一一对应起来. 对于删和改都好办,获取Model时都 ...

  3. Compiler showing 'pi' symbol on error

    Question: I was testing some code on Coliru, and I got a strange output. I went down the code and co ...

  4. Java基础回顾Application(一)

    Java Web 中application(应用级) session(会话级) request(请求级) 在JavaWeb 中实现数据共享往往通过定义属性的方法来实现,而什么是属性呢?它类似于Hash ...

  5. 文件夹生成zip

    package com.leoodata.utils; import java.io.*; import java.util.zip.ZipEntry; import java.util.zip.Zi ...

  6. CSS之 :before && :after的用法,伪类和伪元素的区别

    一::before && :after的用法 :before 如同对伪元素的名称一样,:before 是用来给指定的元素的内容前面插入新的内容.举例说明: .before:before ...

  7. demo:动态生成专属二维码

    在日常生活中,随处可见二维码,那么js如何生成动态的专属二维码?其实,通过"二维码插件"我们可以快速生成二维码.在这,记录一下的生成专属二维码demo,一起来看看jquery.qr ...

  8. WebLogic 11g的安装与配置详谈配置详谈

     之前以weblogic8.1为例介绍了其具体安装,但是由于现在weblogic 11g毕竟使用越来越广泛 ,因此,下面将介绍weblogic 11g的具体安装以及配置: 一.安装步骤(基本跟之前we ...

  9. loadrunner 脚本开发-执行操作系统命令

    脚本开发-执行操作系统命令 by:授客 QQ:1033553122 思路: 用loadrunner system()函数 函数原型: int system( const char *string ); ...

  10. Kotlin入门(14)继承的那些事儿

    上一篇文章介绍了类对成员的声明方式与使用过程,从而初步了解了类的成员及其运用.不过早在<Kotlin入门(12)类的概貌与构造>中,提到MainActivity继承自AppCompatAc ...