专栏首页唐国梁TommyYOLO v4 : 基于数据集BCCD,从头开始配置文件,训练一个模型

YOLO v4 : 基于数据集BCCD,从头开始配置文件,训练一个模型

哈喽,大家好,今天我将手把手教大家如何基于一个新的数据集BCCD(血细胞数据集),训练一个YOLO v4目标检测与识别模型。

相信每一位同学只要按照我的教程一步一步操作,一定能够把这件事情做成。

【注:如果在操作过程中,遇到任何问题,请给我留言。】

福利:我会在文末分享这个DIY项目的下载链接

闲言少叙,我们进入正题:

我们创建一个虚拟环境,名称:YOLO_v4_env

请在命令行窗口输入命令:

1. pip install virtualenv

【注:如果你已经安装软件包virtualenv,请跳过此步骤】

2. virtualenv YOLO_v4_env

【注:虚拟环境的名称:YOLO_v4_env】

3.source virtualenv/bin/activate

【注:启动虚拟环境】

图-01

4. pip install xxx

【注:安装软件包/依赖包,请参考官网环境配置指南,https://github.com/AlexeyAB/darknet#requirements】

主要是安装opencv,CUDA,cuDNN等

5. git clone https://github.com/AlexeyAB/darknet.git

【注:从github下载项目工程到本地,记住:你可以把这个项目工程放在本机上的任何位置。】

图-02 :是项目存放在本地位置

6. 下载预训练模型文件:yolov4.conv.137

https://github.com/AlexeyAB/darknet/releases/download/darknet_yolo_v3_optimal/yolov4.conv.137

【注:该文件,我已经下载好了,各位同学可以不必下载,分享的项目中已经包含。】

7. 拷贝一份在工程目录中darknet/cfg/yolov4-cutom.cfg配置文件,并修改备份的文件名yolov4-custom.cfg为新的文件名:yolo-obj.cfg,该配置文件同样在工程目录darknet/cfg/下。

【注意:我已经给各位同学拷贝了一份,并对配置文件做了修改。各位同学可以打开这两个配置文件对比看一下这些修改,一定要对比才知道哪里做了修改。下面是对几处修改做的说明。】

修改一:batch=128

修改二:subdivisions = 64

修改三:max_batches = 6000

【解释:6000怎么计算的呢?公式:max_batches = classes * 2000,由于我们这BCCD数据集中有3个类别,所以,3*2000 = 6000】

修改四:steps = 4800, 5400

【解释:4800,5400又是怎么计算的呢?这两个值分别是是max_batches的80%和90%,例如:4800 = max_batches * 80%, 5400 = max_batches * 90%】

修改五:width = 416, height = 416

【解释:这是输入image的宽和高,通常是32的倍数。】

修改六:classes = 3

【解释:YOLO基于COCO训练的,所以原始类别数量classes=80。不过,由于我们新的数据集共有3个类别,所以,这里改成了3。】

修改七:filters = 24

【解释:filters的数量可以根据公式计算出来,filters = (classes + 5) x 3 ,由于我们的数据集有3个类别,所以,(3 + 5) x 3 = 24 个filters。】

好啦,我们一共对配置文件做了7处修改,注意其中有的地方需要重复修改有多处,一定要对比一下。建议直接打开yolov4-obj.cfg文件,通过快捷键ctrl+F搜索,把上面7处的关键字输入里面搜索,看看都修改了哪些地方。

以下是图-03和图-04,对部分配置文件内容的截图:

8. 我们要创建两个新文件:BCCD.names 和 BCCD.data

要将这两个文件存放在darknet/data/下面,如图-05所示:

那么,这两个文件夹里面到底包含哪些内容呢?我们分别看一下:

① 文件:BCCD.data ,图-06

【解释:

classes = 3 # 数据集中共有3个类别;

train = data/train.txt # 该路径指向train.txt文件,里面保存着新数据集train中每张图片的路径;

valid = data/test.txt # 该路径指向test.txt文件,里面保存着新数据集test中每张图片的路径;

names = data/BCCD.names # 该路径指向BCCD.names文件,里面保存了3个类别的名称;

backup = backup/ # 存放训练过程中的模型】

② 文件:BCCD.names,图-07

9. 我们将新的数据集BCCD文件夹保存到工程目录:darknet/data/ 下面

如图-08所示:

如图-09所示,里面包含了train, valid, test共三个文件夹,分别存储了图片。

10. 创建两个文件:train.txt 和 test.txt ,这是上面步骤中,文件BCCD.data中提及的两个文件。

这两个文件保存了数据集中每张图片的路径,例如:(这是我的本机中,图片的路径)

/home/tommy/Desktop/1_pytorch/6_YOLO_v4/darknet/data/BCCD/train/BloodImage_00180_jpg.rf.4c83af70be7c35fe07b2079a2e7e4061.jpg 
/home/tommy/Desktop/1_pytorch/6_YOLO_v4/darknet/data/BCCD/train/BloodImage_00257_jpg.rf.fb3f539507a3625ccc528b5f4c03fa2d.jpg

我已经写了一个脚本,用于生成这两个文件,代码非常简单。(注:该代码文件,项目中没有,所以,你一定要运行一下,才能生成train.txt和test.txt。当然,我都把这些工作做好啦。)

import os
import glob
import argparse
def generate_txt(file_name, file_path):
    # file_name : 文件夹名称
    # file_path : 文件夹路径
  files = glob.glob(os.path.join(file_path, '*.jpg')) # 获取该文件夹下所有文件的路径
  new_file = file_name + '.txt' # 新的文件名称
  with open(new_file, 'w') as f: # 打开文件
    for file in files: # 读取每个图片路径
      f.write(file+'\n') # 写入txt文本中
if __name__ == '__main__':
  parser = argparse.ArgumentParser()
  parser.add_argument('--file_name', type=str, default=None) # 参数1
  parser.add_argument('--file_path', type=str, default=None) # 参数2
  args = parser.parse_args()
  # 调用
  generate_txt(args.file_name, args.file_path)
'''
在命令行输入如下命令即可: 注意数据集路径更换成你自己的路径
python generate_txt.py --file_name train --file_path /home/tommy/Desktop/1_pytorch/6_YOLO_v4/darknet/data/BCCD/train
python generate_txt.py --file_name test --file_path /home/tommy/Desktop/1_pytorch/6_YOLO_v4/darknet/data/BCCD/test
'''

【注意:--file_path 后面的train数据集路径是你本机所在的路径,不是我这个,一定要在运行前修改一下。】

然后,将这两个文件train.txt 和 test.txt放到darknet/data/下面即可。如图-10所示:

11. 开始基于新的数据集BCCD,训练属于自己的模型啦。

在命令行窗口,输入如下命令:

./darknet detector train data/BCCD.data cfg/yolo-obj.cfg yolov4.conv.137

如图-11所示:

模型开始训练中。。。如图-12所示:

基于我的GPU (10G) 训练大概 5 -- 6小时,训练结束后,输出模型: 如图-13所示:

接下来,我们查看一下工程目录darknet/backup/,该文件夹下有了多个训练过程中输出的模型,如图-14所示:

至此,我们已经完成了所有训练阶段的工作,那么,接下来就测试一下最终的模型性能。

12. 测试模型性能

① 计算mAP@IoU=50,我们在命令行输入命令:

./darknet detector map data/BCCD.data cfg/yolo-obj.cfg backup/yolo-obj_final.weights

如图-15所示:

结果如图-16所示:

② 计算mAP@IoU=75,我们在命令行输入命令:

./darknet detector map data/BCCD.data cfg/yolo-obj.cfg backup/yolo-obj_final.weights -iou_thresh 0.75

如图-17所示:

结果如图-18所示:

③ 基于test数据集,验证模型性能,对test中的每张图片进行分类,并将分类结果保存在result.txt 文件中。

请在命令行输入命令:

./darknet detector test data/BCCD.data cfg/yolo-obj.cfg backup/yolo-obj_final.weights -dont_show -ext_output <data/test.txt> result.txt

如图-19所示:

输出结果全部保存在文件result.txt中,该文件在工程目录darknet/下面,如图-20所示:

我们继续查看result.txt中的内容,部分内容截图,如图-21所示:

【解释: 模型对该图片中的所有目标进行了预测/分类,这三个类别是:RBC,WBC,Platelets,每个类别都有预测概率值。】

好啦,今天,我就先分享到这里,后续将会与你 分享更多技术教程和学习笔记,我们一起学习、进步 ~

近期,将会在"网易云课堂"分享YOLO算法专题课程,倾注了大量时间和精力准备的一门精品课程。敬请期待哈 :)

如果遇到任何问题,请到B站,查看我的个人简介,添加"AI学习部落"QQ群一起讨论。目前,我们一共有11个QQ群,学员已经超过2000名。

案例下载链接:

链接:

https://pan.baidu.com/s/1ZwuTcLfx7cCyOkB2tipi2A

密码: irbm

本文分享自微信公众号 - 唐国梁Tommy(TangGuoLiangAI),作者:唐国梁Tommy

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2021-05-18

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • YOLO v4:物体检测的最佳速度和精度

    您只需看一次(YOLO)是快速、准确的单阶段目标检测器。最近发布的YOLO v4与其他目标检测器相比,显示出非常好的结果。

    小白学视觉
  • 【下载】PyTorch 实现的YOLO v2目标检测算法

    【导读】目标检测是计算机视觉的重要组成部分,其目的是实现图像中目标的检测。YOLO是基于深度学习方法的端到端实时目标检测系统(YOLO:实时快速目标检测)。YO...

    WZEARW
  • 笔记分享 : 目标检测与识别算法之一 YOLO v4 精华版

    哈喽,大家好,今天我们一起学习一下CV(Computer Vision)领域中,最牛目标检测与识别算法之一:YOLO_v4论文中的精髓部分,论文名称:《YOLO...

    唐国梁Tommy
  • YOLO v4它来了:接棒者出现,速度效果双提升

    两个月前,YOLO 之父 Joseph Redmon 表示,由于无法忍受自己工作所带来的的负面影响,决定退出计算机视觉领域。此事引发了极大的热议,其中一个悬念就...

    机器之心
  • 目标检测系列之五(YOLO V4)

    论文题目《YOLOv4: Optimal Speed and Accuracy of Object Detection》 论文地址:https://arxiv....

    Minerva
  • YOLOv5它来了!YOLOv4发布不到50天,它带着推理速度140帧/秒、性能提升2倍来了

    6月9日,Ultralytics公司开源了YOLOv5,离上一次YOLOv4发布不到50天。而且这一次的YOLOv5是完全基于PyTorch实现的!

    量子位
  • 多摄像头实时目标跟踪和计数,使用YOLOv4,Deep SORT和Flask

    git仓库地址:https://github.com/LeonLok/Multi-Camera-Live-Object-Tracking

    OpenCV学堂
  • 本周AI热点回顾:文章自动变视频、无人出租今起免费坐、YOLO v4复活

    两个月前,YOLO 之父 Joseph Redmon 表示,由于无法忍受自己工作所带来的的负面影响,决定退出计算机视觉领域。此事引发了极大的热议,当我们都以为再...

    用户1386409
  • 7 Papers & Radios | YOLO v4它来了;北航MangaGAN生成久保带人Style漫画形象

    论文 1:Unpaired Photo-to-manga Translation Based on The Methodology of Manga Drawi...

    机器之心
  • 在自己的数据集上训练TensorFlow更快的R-CNN对象检测模型

    计算机视觉正在彻底改变医学成像。算法正在帮助医生识别可能错过的十分之一的癌症患者。甚至有早期迹象表明胸部扫描可有助于COVID-19的识别,这可能有助于确定哪些...

    代码医生工作室
  • YOLO项目复活!大神接过衣钵,YOLO之父隐退2月后,v4版正式发布,性能大幅提升

    另一位曾经参与YOLO项目维护的大神Alexey Bochkovskiy,在arXiv上提交了YOLO v4,而且这篇论文已经被拉入原来YOLO之父建立的项目主...

    量子位
  • YOLOv4: Darknet 如何于 Docker 编译,及训练 COCO 子集

    YOLO 算法是非常著名的目标检测算法。从其全称 You Only Look Once: Unified, Real-Time Object Detection...

    GoCoding
  • YOLO v3实战之钢筋数量AI识别(一)

    CristianoC
  • YOLO升级到v3版,检测速度比R-CNN快1000倍

    用户1737318
  • YOLO:实时目标检测

    一瞥(You Only Look Once, YOLO),是检测Pascal VOC(http://host.robots.ox.ac.uk:8080/pasc...

    用户1332428
  • PyTorch版YOLOv4更新了,不仅适用于自定义数据集,还集成了注意力和MobileNet

    从今年 4 月 YOLOv4 发布后,对于这个目标检测框架,问的最多的问题或许就是:「有没有同学复现 YOLOv4 的, 可以交流一下么」。由于原版 YOLO ...

    机器之心
  • PyTorch版:集成注意力和MobileNet的YOLOv4

    从今年 4 月 YOLOv4 发布后,对于这个目标检测框架,问的最多的问题或许就是: 「有没有同学复现 YOLOv4 的, 可以交流一下么」。 由于原版 YO...

    公众号机器学习与生成对抗网络
  • 目标检测究竟发展到了什么程度? | CVHub带你聊一聊目标检测发展的这22年

    目标检测领域发展至今已有二十余载,从早期的传统方法到如今的深度学习方法,精度越来越高的同时速度也越来越快,这得益于深度学习等相关技术的不断发展。本文将对目标检测...

    AIWalker
  • 【翻译】手把手教你用AlexeyAB版Darknet

    下图是CSPNet中统计的目前的State of the Art的目标检测模型。其中从csresnext50-panet-spp-optimal模型是CSPNe...

    BBuf

扫码关注云+社区

领取腾讯云代金券