人工智能|一文详解YOLOX算法实现血细胞检测

作者丨MlDl@知乎
来源丨https://zhuanlan.zhihu.com/p/395976338
编辑丨计算机视觉工坊
目标检测一直是计算机视觉中比较热门的研究领域。本文将使用一个非常酷且有用的数据集来实现YOLOX算法,这些数据集具有潜在的真实应用场景。

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

人工智能|一文详解YOLOX算法实现血细胞检测
文章图片
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算法实现血细胞检测
文章图片
论文链接:
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算法实现血细胞检测
文章图片

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 中,使用损失来表示
人工智能|一文详解YOLOX算法实现血细胞检测
文章图片

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

【人工智能|一文详解YOLOX算法实现血细胞检测】End-to-end YOLO 增加了 2 个额外的卷积层,进行一对一的标签分配,不 需要梯度。这使得检测器可以端到端的运行,这个略微降低了性能和速度。所以作为可选项。具体的各种修改的效果如下:
人工智能|一文详解YOLOX算法实现血细胞检测
文章图片
·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算法实现血细胞检测
文章图片
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算法实现血细胞检测
文章图片
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算法实现血细胞检测
文章图片

▲长按加微信群或投稿
人工智能|一文详解YOLOX算法实现血细胞检测
文章图片

▲长按关注公众号
3D视觉从入门到精通知识星球:针对3D视觉领域的视频课程(三维重建系列、三维点云系列、结构光系列、手眼标定、相机标定、orb-slam3等视频课程)、知识点汇总、入门进阶学习路线、最新paper分享、疑问解答五个方面进行深耕,更有各类大厂的算法工程人员进行技术指导。与此同时,星球将联合知名企业发布3D视觉相关算法开发岗位以及项目对接信息,打造成集技术与就业为一体的铁杆粉丝聚集区,近2000星球成员为创造更好的AI世界共同进步,知识星球入口:
学习3D视觉核心技术,扫描查看介绍,3天内无条件退款
人工智能|一文详解YOLOX算法实现血细胞检测
文章图片

圈里有高质量教程资料、答疑解惑、助你高效解决问题
觉得有用,麻烦给个赞和在看~人工智能|一文详解YOLOX算法实现血细胞检测
文章图片

    推荐阅读