智慧医疗-YOLOX血细胞检测

目标检测一直是计算机视觉中比较热门的研究领域。本文将使用最新的目标检测算法YOLOX来对医疗相关数据集(血细胞数据)进行检测,这个数据集具有潜在的真实应用场景。

image
  • 问题陈述

    解决血细胞检测问题是通过显微图像读数来检测每张图像中的所有红细胞(RBC)、白细胞(WBC)以及血小板 (Platelets)共三类。最终预测效果应如下所示:

YOLOX算法预测结果图

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

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

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

https://public.roboflow.com/object-detection/bccd

  • YOLOX介绍
image

论文链接:

https://arxiv.org/abs/2107.08430
[[2107.08430] YOLOX: Exceeding YOLO Series in 2021 (arxiv.org)]

代码链接:

https://github.com/Megvii-BaseDetection/YOLOX
[GitHub - Megvii-BaseDetection/YOLOX: YOLOX is a high-performance anchor-free YOLO, exceeding yolov3~v5 with MegEngine, ONNX, TensorRT, ncnn, and OpenVINO supported. Documentation: https://yolox.readthedocs.io/]

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

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

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

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

image

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 中,使用损失来表示

image

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

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

image
  • YOLOX实现

1.克隆 YOLOX 并安装

安装 Git 软件

Git - Downloads (git-scm.com)

克隆项目到本地

网址:

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

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,本文使用的epoches=10.

image

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
image

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
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,384评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,845评论 3 391
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,148评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,640评论 1 290
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,731评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,712评论 1 294
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,703评论 3 415
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,473评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,915评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,227评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,384评论 1 345
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,063评论 5 340
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,706评论 3 324
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,302评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,531评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,321评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,248评论 2 352

推荐阅读更多精彩内容