CAMELYON16 百度NCRF肿瘤识别算法如何在最新环境下调通

最近对病理切片的识别和检测算法突然有点兴趣,就想着去GitHub上看看有没有相关算法可以学习。经过搜索后,发现baidu-research的NCRF开源算法,标星600多,还有相关论文,效果嘛倒也不错,于是决定就是它了。

先来看看依赖, python3.6,numpy1.14.3,pytorch0.3.1。看到这里笔者心头一凉,如果没记错的话pytorch已经发布1.5稳定版了,这个0.3.1会不会有什么坑啊,不管了,先把最新版本的装起来看看报什么错再说吧。

第一步先准备数据,按照给定的链接打开CAMELYON16的比赛网站,发现数据要去CAMELYON17的主页上获取,心里顿时没了底,这数据到底还下不下的到呢?还好,在网站上提供了百度网盘的下载方式,点进去也发现文件还在。不过这里不得不吐槽一下不开会员的这个下载速度,700G的数据几KB的速度,不得已只能冲个会员了。

等代码和数据都上传到服务器已经一天过去了。下面正式来到代码调试阶段,第一步是Patch images。输入以下命令,根据实际情况调整路径应该就行了吧。

1
python NCRF/wsi/bin/patch_gen.py /WSI_TRAIN/ NCRF/coords/tumor_train.txt /PATCHES_TUMOR_TRAIN/

额,果然不行呢, 报错如下错误:

openslide.lowlevel.OpenSlideUnsupportedFormatError: Unsupported or missing image file

是不是下载的时候出错呢,把对应文件重新长传一次后发现还是报相同的错误。这个时候发现tumor_train.txt是这样的:

我们下载的文件是这样的:

应该就是这个大小写的问题了把,那就简单了,把文件名改了,或者把列表改了就行了。果然,开始切分数据这块正常运行了,这里笔者用了5个线程,共耗时5个小时把数据都准备完成。

那下一步就是模型训练了,输入命令,等待报错吧。。。

1
python NCRF/wsi/bin/train.py /CFG_PATH/cfg.json /SAVE_PATH/

这里需要用到一个cfg.json,里面有一些路径参数需要根据实际环境调整,因为比较简单先略去不表。

SyntaxError,看来这个async=True有问题。赶紧查一下,

原来如此,按照这个改了以后,又报了这个:

好复杂,看起来是多线程没跑起来,难道写的class里面还有什么错。不管了先去这个image_producer.py里面看看这一行:

if self._annotations[pid].inside_polygons((x, y), True):

好像没啥问题,再去annotation.py里面看看定义,也没问题啊。那我们把这个pid print出来看一下。等等这个KeyError:'tumor_024'开头是小写,我记得文件名是大写来着,看来还是刚才那个问题,在一个坑里摔倒2次,真的是。。。

改完以后,又报错咯。。。按下面大大给的方法改完

按下面大大给的方法改完,终于跑起来了

总结下来,调别人的代码可能会碰到一些历史遗留问题,比如大小写可能因为原始环境是windows而产生的,之后只要解决版本语法的改变基本就可以调通了。这次折腾了2天多,后面还有画图啥的,等到有空再弄把。

最后,吃一把鸡压压惊 。