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. #10 Python字符串

    前言 通过上一节可知,Python6个序列的内置类型中,最常见的是列表和元组,但在Python中,最常用的数据类型却不是列表和元组,而是字符串.要想深入了解字符串,必须先掌握字符编码问题.因此本篇博文 ...

  2. 如何将自定义的搜索参数便捷的添加到js方式的bootstrap table的参数中

    页面: <div> <form id="exp_form"> 查询参数... <button type="button" oncl ...

  3. [转]微擎load()文件加载器

    本文转自:https://blog.csdn.net/qq_32737755/article/details/78124534 微擎中加载文件需要用到 load() 在官网找到官方对load()的解释 ...

  4. WPF 使用 Direct2D1 画图入门

    本文来告诉大家如何在 WPF 使用 D2D 画图. 本文是一个系列 WPF 使用 Direct2D1 画图入门 WPF 使用 Direct2D1 画图 绘制基本图形 WPF 使用 SharpDX WP ...

  5. Java学习笔记之——冒泡排序

    冒泡排序:解决数组的排序问题,比如从大到小或者从小到大 原理:两两比较 案例:

  6. html页面背景设定相关

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...

  7. module.exports和exports.md

    推荐写法 具体解释可以往后看. 'use strict' let app = { // 注册全局对象 ... } ... // 封装工具箱 exports = module.exports = app ...

  8. 通过了解JS的clientX、pageX、screenX等方法来获取鼠标位置相对屏幕,相对浏览器窗口,相对文档的坐标详解

    在一些DOM操作中我们经常会跟元素的位置打交道,鼠标交互式一个经常用到的方面,令人失望的是不同的浏览器下会有不同的结果甚至是有的浏览器下没结果,这篇文章就上鼠标点击位置坐标获取做一些简单的总结,没特殊 ...

  9. Android学习笔记----ArcGIS在线地图服务(Android API)坐标纠偏

    仅限于如下ArcGIS在线地图服务(高德提供数据): //概述:彩色中文含兴趣点版中国基础地图 //投影:WGS 1984 Web-Mercator //切片格式:MIXED90 //服务类型:基础地 ...

  10. IP地址及子网划分

    1.IP地址 2.子网掩码 网络号全转为1,主机号全转为0,之后再转化为10进制表示. 3.无分类编址