一文详解YOLOX算法实现血细胞检测

作者丨MlDl@知乎

来源丨https://zhuanlan.zhihu.com/p/395976338

编辑丨计算机视觉工坊

目标检测一直是计算机视觉中比较热门的研究领域。本文将使用一个非常酷且有用的数据集来实现YOLOX算法,这些数据集具有潜在的真实应用场景。

·问题陈述 数据来源于医疗相关数据集,目的是解决血细胞检测问题。任务是通过显微图像读数来检测每张图像中的所有红细胞(RBC)、白细胞(WBC)以及血小板 (Platelets)共三类。最终预测效果应如下所示:

一文详解YOLOX算法实现血细胞检测_第1张图片

yolox算法预测结果图

选择该数据集的原因是我们血液中RBC、WBC和血小板的密度提供了大量关于免疫系统和血红蛋白的信息,这些信息可以帮助我们初步地识别一个人是否健康,如果在其血液中发现了任何差异,我们就可以迅速采取行动来进行下一步的诊断。

通过显微镜手动查看样品是一个繁琐的过程,这也是深度学习模式能够发挥重要作用的地方,一些算法可以从显微图像中分类和检测血细胞,并且达到很高的精确度。

本文采用的血细胞检测数据集下载地址

https://public.roboflow.com/object-detection/bccd%EF%BC%8C

·YOLOX介绍

YOLOX是旷视科技新近推出的高性能实时目标检测网络,性能超越了YOLOv3/YOLOv4 /YOLOv5。

YOLOX使用 PyTorch开发,采用了Anchor-free机制、解耦头、Multi Positives、先进的标签分配策略和强数据增广等前沿技术。

一文详解YOLOX算法实现血细胞检测_第2张图片

论文链接:

https://arxiv.org/abs/2107.08430

代码链接:

https://github.com/Megvii-BaseDetection/YOLOX

YOLOX-DarkNet53 YOLOv3 是以 Darknet53 为主干,后面再加上 SPP。YOLOX对训练策略进行了一些修改,增加了 EMA weights updating,余弦学习率, IoU 损失,以及 IoU-aware 分支,在训练分类和 objectness 的分支中,使用 了 BCE loss。在数据增强方面,只使用了水平翻转,颜色抖动和多尺度。

Decoupled head 在目标检测中,分类和回归的任务是有相互冲突的,这是个普遍认可的问题。因此,一般会将分类和回归分开 2 个分支,但是在 YOLO 系列中, 仍然是没有分开的。这里,将耦合的检测头分开,变为 2 个相互独立的检测分支。具体如下图

一文详解YOLOX算法实现血细胞检测_第3张图片

Strong data augmentation 在数据增强中,使用了 Mosaic 和 Mixup 的增强策略,使用了这些增强策略之后,发现预训练模型已经没有必要了,因此后面所有的训练都是从头训练的。

Anchor-free 将 YOLO 转换为 anchor free 其实很简单,将每个空间位置的输出由 3 减少到 1,直接输出 4 个值,即左上角点的两个偏差值,以及宽和高。对于每个目标,其中心点位置所在的区域即为正样本,并预先定义一个尺度范围, 将每个目标分配到不同的 FPN 层上。

Multi positives 上面提到的 anchor free 的正样本选择策略,对于每个目标只选 择了 1 个正样本,这样会忽略掉其他的高质量的预测,使用这些高质量的预测对 于梯度是有好处的,而且样本的不均衡性也会减少一些。这里,简单的使用 了中心点 3x3 的区域,都作为正样本。

SimOTA 对于标签的分配,总结了 4 个关键点:1)损失/质量相关性 2)中 心优先 3)每个 GT 的正样本 anchor 点的动态数量 4)全局视角。使用 OTA 作为候选的标签匹配策略。然后对 OTA 进行了修改,提出了 SimOTA。首先,计算每个 prediction-gt 对的匹配度,用损失和质量来表示,这里,在 SimOTA 中,使用损失来表示

其中,λ是平衡系数,然后,对于一个 gt,用 gi 来表示,选择在一个固定的 中心区域内,topk 个具有最小的 cost 的预测来作为正样本,最后,这些正样本 所在的 grid 也被分配为正样本,其他的 grid 是负样本,注意,对于不同的 gt,k 是不一样的。

End-to-end YOLO 增加了 2 个额外的卷积层,进行一对一的标签分配,不 需要梯度。这使得检测器可以端到端的运行,这个略微降低了性能和速度。所以作为可选项。具体的各种修改的效果如下:

一文详解YOLOX算法实现血细胞检测_第4张图片

·YOLOX实现

1. 克隆 YOLOX 并安装

安装 Git 软件

https://git-scm.com/downloads

克隆项目到本地

网址:

https://github.com/Megvii-BaseDetection/YOLOgithub.com/Megvii-BaseDetection/YOLOX

git clone https://github.com/Megvii-BaseDetection/YOLOX.git

或者直接下载 YOLOX 的代码并解压。在 YOLOX 目录下执行:

 pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple

2.安装 apex

git clone https://github.com/NVIDIA/apex cd apex python setup.py install

注意:cuda 的版本应和 cudatoolkit 一致

3.安装 pycocotools

pip install cython git clone https://github.com/philferriere/cocoapi.git 
cd cocoapi/PythonAPI
python setup.py install --use

4.下载预训练权重文件

下载 yolox_s.pth.tar,yolox_m.pth.tar,yolox_l.pth.tar,yolox_x.pth.tar, yolox_darknet53.47.3.pth.tar, yolox_nano.pth.tar, yolox_tiny.pth.tar 权重文件,并放置在 YOLOX/weights 文件夹下

5.安装测试

测试图片:

python tools/demo.py image -n yolox-s -c weights/yolox_s.pth.tar --path assets/dog.jpg --conf 0.3 --nms 0.65 --tsize 640 --save_result

6.训练血细胞数据

修改文件 exps/example/yolox_voc/yolox_vocs.py

self.num_classes = 3

7.修改文件 voc_classes.py

VOC_CLASSES = ( "rbc", "wbc", "platelets" )

8.在 YOLOX 路径下执行

python tools/train.py -f exps/example/yolox_voc/yolox_voc_s_bm.py -d 1 -b 16 --fp16 -o -c weights/yolox_s.pth.tar

注意:如果出现显存溢出,可减小 batch-size 默认训练的 epoches 为 300.

一文详解YOLOX算法实现血细胞检测_第5张图片

9.测试训练出的网络模型

python tools/demo.py image -f exps/example/yolox_voc/yolox_voc_s_bm.py -c YOLOX_outputs/yolox_voc_s_bm/best_ckpt.pth.tar --path testfiles --conf 0.3 --nms 0.65 --tsize 640 --save_result --device gpu
一文详解YOLOX算法实现血细胞检测_第6张图片

10.性能统计

python tools/eval.py -f exps/example/yolox_voc/yolox_voc_s_bm.py -c YOLOX_outputs/yolox_voc_s_bm/best_ckpt.pth.tar -b 16 -d 1 --conf 0.001 --fp16 -- fuse

本文仅做学术分享,如有侵权,请联系删文。

下载1

在「计算机视觉工坊」公众号后台回复:深度学习,即可下载深度学习算法、3D深度学习、深度学习框架、目标检测、GAN等相关内容近30本pdf书籍。

下载2

在「计算机视觉工坊」公众号后台回复:计算机视觉,即可下载计算机视觉相关17本pdf书籍,包含计算机视觉算法、Python视觉实战、Opencv3.0学习等。

下载3

在「计算机视觉工坊」公众号后台回复:SLAM,即可下载独家SLAM相关视频课程,包含视觉SLAM、激光SLAM精品课程。

重磅!计算机视觉工坊-学习交流群已成立

扫码添加小助手微信,可申请加入3D视觉工坊-学术论文写作与投稿 微信交流群,旨在交流顶会、顶刊、SCI、EI等写作与投稿事宜。

同时也可申请加入我们的细分方向交流群,目前主要有ORB-SLAM系列源码学习、3D视觉CV&深度学习SLAM三维重建点云后处理自动驾驶、CV入门、三维测量、VR/AR、3D人脸识别、医疗影像、缺陷检测、行人重识别、目标跟踪、视觉产品落地、视觉竞赛、车牌识别、硬件选型、深度估计、学术交流、求职交流等微信群,请扫描下面微信号加群,备注:”研究方向+学校/公司+昵称“,例如:”3D视觉 + 上海交大 + 静静“。请按照格式备注,否则不予通过。添加成功后会根据研究方向邀请进去相关微信群。原创投稿也请联系。

一文详解YOLOX算法实现血细胞检测_第7张图片

▲长按加微信群或投稿

一文详解YOLOX算法实现血细胞检测_第8张图片

▲长按关注公众号

3D视觉从入门到精通知识星球:针对3D视觉领域的视频课程(三维重建系列、三维点云系列、结构光系列、手眼标定、相机标定、orb-slam3等视频课程)、知识点汇总、入门进阶学习路线、最新paper分享、疑问解答五个方面进行深耕,更有各类大厂的算法工程人员进行技术指导。与此同时,星球将联合知名企业发布3D视觉相关算法开发岗位以及项目对接信息,打造成集技术与就业为一体的铁杆粉丝聚集区,近2000星球成员为创造更好的AI世界共同进步,知识星球入口:

学习3D视觉核心技术,扫描查看介绍,3天内无条件退款

一文详解YOLOX算法实现血细胞检测_第9张图片

 圈里有高质量教程资料、答疑解惑、助你高效解决问题

觉得有用,麻烦给个赞和在看~  一文详解YOLOX算法实现血细胞检测_第10张图片

你可能感兴趣的:(人工智能,深度学习,计算机视觉,机器学习,编程语言)