前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >YOLO v4 : 基于数据集BCCD,从头开始配置文件,训练一个模型

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

作者头像
唐国梁Tommy
发布2021-05-28 17:26:45
1.3K0
发布2021-05-28 17:26:45
举报
文章被收录于专栏:唐国梁Tommy唐国梁Tommy

哈喽,大家好,今天我将手把手教大家如何基于一个新的数据集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中提及的两个文件。

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

代码语言:javascript
复制
/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。当然,我都把这些工作做好啦。)

代码语言:javascript
复制
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,训练属于自己的模型啦。

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

代码语言:javascript
复制
./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,我们在命令行输入命令:

代码语言:javascript
复制
./darknet detector map data/BCCD.data cfg/yolo-obj.cfg backup/yolo-obj_final.weights

如图-15所示:

结果如图-16所示:

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

代码语言:javascript
复制
./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 文件中。

请在命令行输入命令:

代码语言:javascript
复制
./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

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-05-18,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 唐国梁Tommy 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
图像识别
腾讯云图像识别基于深度学习等人工智能技术,提供车辆,物体及场景等检测和识别服务, 已上线产品子功能包含车辆识别,商品识别,宠物识别,文件封识别等,更多功能接口敬请期待。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档