当前位置: 首页 > news >正文

yolo-v1 train和test自己的分类和数据

一.参考文档

https://github.com/Guanghan/darknet
github下面有详细的yolo版本1的详细训练过程。
这里只介绍我们自己的训练过程(只识别“人”这一个类)。

二.训练过程

1.下载数据集voc2007
shell终端

cd ~
mkdir vocdata
cd vocdata
wget http://host.robots.ox.ac.uk/pascal/VOC/voc2007/VOCtrainval_06-Nov-2007.tar
wget http://host.robots.ox.ac.uk/pascal/VOC/voc2007/VOCtest_06-Nov-2007.tar
tar xvf VOCtrainval_06-Nov-2007.tar
tar xvf VOCtest_06-Nov-2007.tar

2.将下好的数据集转为yolo可训练的标签
在darknet/scripts/voc_label.py文件拷贝到~/vocdata目录下,修改voc_label.py
将第7行下面的几行进行修改

sets=[ ('2007', 'train'), ('2007', 'val')]
classes = ["person"]

执行voc_label.py即可
可以得到2007_train.txt和2007_train.txt
将2007_train.txt拷贝到/darknet/scripts/目录下
3.修改部分源代码
src/yolo.c

#define CLASSNUM 1   //添加定义
image voc_labels[CLASSNUM];    //修改void test_yolo(char *cfgfile, char *weightfile, char *filename, float thresh)函数里面的调用的
draw_detections(im, l.side*l.side*l.n, thresh, boxes, probs, voc_names, voc_labels, CLASSNUM);  //最后一个参数修成CLASSNUM
修改void run_yolo(int argc, char **argv)函数
for(i = 0; i < CLASSNUM; ++i){   //修改成CLASSNUM

将开头的char *voc_names[] = {"person"};  //删除其余的类名,只留下person类void train_yolo(char *cfgfile, char *weightfile)函数中的开头两句的语句进行修改
    char *train_images = "/home/user/darknet/scripts/train.txt";  //注意要使用绝对路径
    char *backup_directory = "/home/user/darknet/backup";  //绝对路径,还要确保backup文件的存在

src/yolo_kernels.cu

#define CLASS_NUM 1  //添加定义
修改void *detect_in_thread(void *ptr)里面的语句
draw_detections(det, l.side*l.side*l.n, demo_thresh, boxes, probs, voc_names, voc_labels, CLASS_NUM); //修改最后一个参数

cfg/yolo.cfg

[connected]
output= 539   //最后一层的全连接层,output=(5×2+CLASSNUM)×7×7
activation=linear

[detection]
classes=1  //类数

4.开始训练
下载extraction.conv.weights 我们在这上面进行微调
shell终端

./darknet yolo train cfg/yolo.cfg extraction.conv.weights

5.测试
一共训练迭代40000步,服务器一共跑了3天多
shell终端

./darknet yolo demo_vid cfg/yolo.cfg backup/yolo_final.weights ~/video/123.avi

相关文章:

  • yolo-v2修改只识别person
  • zigbee编译错误汇总(一)
  • 1.The Graphics View Architecture(图形视图框架)
  • 3.The Graphics View Coordinate System(图形视图坐标系)
  • 2.Classes in the Graphics View Framework(图形视图框架中的类)
  • 4.Key Features(主要特征)
  • 5.Performance(性能)
  • linux解决wifi问题
  • 比较C++中数组,vector,array
  • 一、opencv的图像基本读写
  • 二、opencv的滑块使用
  • 三、Mat类的使用
  • 四、常用数据结构和函数
  • 五、颜色空间缩减
  • 2017.5.5
  • Angular 响应式表单之下拉框
  • exif信息对照
  • flask接收请求并推入栈
  • js作用域和this的理解
  • laravel with 查询列表限制条数
  • Leetcode 27 Remove Element
  • Octave 入门
  • oldjun 检测网站的经验
  • overflow: hidden IE7无效
  • React-Native - 收藏集 - 掘金
  • Shell编程
  • UMLCHINA 首席专家潘加宇鼎力推荐
  • 大整数乘法-表格法
  • - 概述 - 《设计模式(极简c++版)》
  • 海量大数据大屏分析展示一步到位:DataWorks数据服务+MaxCompute Lightning对接DataV最佳实践...
  • 巧用 TypeScript (一)
  • 人脸识别最新开发经验demo
  • 手写双向链表LinkedList的几个常用功能
  • 小程序button引导用户授权
  • 学习笔记DL002:AI、机器学习、表示学习、深度学习,第一次大衰退
  • 验证码识别技术——15分钟带你突破各种复杂不定长验证码
  • 用element的upload组件实现多图片上传和压缩
  • 与 ConTeXt MkIV 官方文档的接驳
  • [Shell 脚本] 备份网站文件至OSS服务(纯shell脚本无sdk) ...
  • Play Store发现SimBad恶意软件,1.5亿Android用户成受害者 ...
  • 国内唯一,阿里云入选全球区块链云服务报告,领先AWS、Google ...
  • ​​​​​​​ubuntu16.04 fastreid训练过程
  • # Apache SeaTunnel 究竟是什么?
  • #define、const、typedef的差别
  • (13):Silverlight 2 数据与通信之WebRequest
  • (4) PIVOT 和 UPIVOT 的使用
  • (附源码)ssm捐赠救助系统 毕业设计 060945
  • (九)c52学习之旅-定时器
  • (每日持续更新)jdk api之FileReader基础、应用、实战
  • (三)终结任务
  • (收藏)Git和Repo扫盲——如何取得Android源代码
  • (学习日记)2024.03.25:UCOSIII第二十二节:系统启动流程详解
  • (转)视频码率,帧率和分辨率的联系与区别
  • (转载)hibernate缓存
  • .net core 实现redis分片_基于 Redis 的分布式任务调度框架 earth-frost