python进阶教程可帮助您更好地驾驭AI以获得更强大的数据分析能力。

引言

在python基础教程中,主要是掌握「for」、「if」和「function」这些基本的东西,这样就能够写出一些简单的面向过程的代码,以满足一些自动化数据分析需求,从而减少在不同软件工具和文件之间重复繁琐的搬运工作(俗称业务代码),提升下工作效率,但这个其实只是对编程浅层次的理解。

在python进阶教程中,进一步学习 python,带来的更大益处,是在不断的实践中,逐渐强化清晰表达需求的习惯,提高自己思维的缜密程度。这个需求不仅仅是关于最终输出结果(OUTPUT)的准确定义,更包含了对 INPUT 的充分描述和对中间 FUNCTION 的基本逻辑的框定。

事实上绝大部分人可能连需要输出什么结果也不太清楚,更别谈给一个较为清楚的 INPUT 甚至是关于怎么做的基本逻辑。但对于计算机来说,代码就是对用户需求的一种清晰明确的描述,哪怕错了一个标点符号都直接无法获得结果。

对于 Human 来说则完全不同,A随意的模糊的输入,可以被B进行脑补加工然后得到一个还差不多的结果,而且随着A与B交互次数不断增加,还会形成默契,输出质量和效率都在迭代中越来越高。

近些年兴起的人工智能,就是通过工程手段让计算机越来越类人,能够懂得模糊的人类需求定义。因此网上出现了一些说法, 例如「以后大家再也不用编程不用写代码」,「程序员最终都将会被AI取代」之类的。事实上只要你真的经常用当下主流的各种所谓大语言模型,你就会发现AI不是你肚子里的蛔虫。

喜欢使用大语言模型(Large Language Model, LLM),而且能够把它用好的,即便不具有程序员的身份,也一定是具备了「程序员思维」的用户。因为他们在AI对话框中输入关于某个方面问题的 prompt 通常能够得到很好的AI反馈。为了让人们更好地使用LLM,伴随大语言模型兴起的还有一个所谓的「提示词工程」,但不用那么麻烦,更不用过家家似的先来一段角色扮演,好的prompt大多具备「表达精确」甚至「思维缜密」的特点。这种 prompt 不仅仅能够被AI很好地清晰地理解,也能更加轻松地被相关专业领域的人理解。从这个角度出发,如果想让AI更懂你,或许写伪代码作为prompt会更好,例如最近爆火的「汉语新解1」。

在「python进阶教程」系列内容中,我以图像分割任务为主要例子介绍了两个好用的AI工具。并展示了如何利用python代码作为胶水,组合这些AI工具与ImageJ一起,形成一套工具链,以满足自定义的图像数据分析需求。同时我也展示了一些在ImageJ中相应功能所对应的python模块和用法,以满足在超大规模数据分析情景下工具链进一步整合,甚至实现「All in Python」以提升整体自动化效率。

我相信通过python进阶教程的实践,能够帮助大家更好地掌握编程思维,进而能够更好地驾驭 AI,获得更高效率的数据分析和处理能力。

基于AI的图像分割

圈选感兴趣区域(ROI)是进行数据分析的重要前置步骤,ROI越准确,分析结果越可靠。

在前面的教程中,ROI基本是建议用户自己手动圈选的。手动圈选因为基于专家人眼识别,通常ROI准确性很高,但是速度比较慢,所以适用于对结果准确性要求很高而且数据量不大的场景。自动圈选方面,过去是通常需要针对不同图像采取不同的算法并调整参数以实现最佳效果,速度有所提升且能够用于大量数据的分析,但是对编程能力要求很高;现在得益于AI技术的发展,普通用户简单地调用这些AI工具,就能比较好地完成这个任务,此时对编程能力的要求就降低了很多。具体而言,我们现在只需要通过少量代码,调整下数据的输入形式以满足AI工具的要求,然后将AI处理的结果适配后续数据分析流程即可。

为了能够将AI工具嵌入自己的数据分析流程,我们最好是以源代码的方式安装这些工具。这里我详细介绍了如何使用conda来创建不同的python虚拟环境来安装这些AI工具。这种安装方式能够获得这些AI工具最完整的功能,同时允许你对它做出任何修改以适配自己的工具链。

AI工具非常多,本着实用的考虑,我这里主要介绍了 cellpose 和 SAM 这两个模型。cellpose 是在细胞图像分割领域比较通用的明星U-Net模型,SAM则是在更多类别图像分割领域都能work的Transformer模型。简单来说 SAM 比 cellpose 更加通用,最重要的是可以「零样本泛化」。同时使用这两种工具,我相信获取 ROI 这个过去比较费时费力的任务会变得轻松很多。

U-Net是比较早出现的一类卷积神经网络;Transformer比较新,这种架构发布的论文题目直接就是“Attention is All You Need”2,如今大名鼎鼎的GPT,全称 Generative Pre-trained Transformer,顾名思义,也是基于 Transformer 这种架构。

如果发现已有模型都没有办法很好地完成图像分割任务,还可以通过cellpose和SAM也都能够方便地手动创建少量的人工标注数据,然后再进行迁移学习甚至是从头学习,得到适用于当前特定任务的图像分割模型。

AI工具与上游的整合

我们收集到的数据,其数据类型,文件格式,甚至文件路径层级都会有很多变化。而上述AI工具例如 cellpose,它可能仅支持你一次次输入TIFF图像来predict,这个时候就造成了堵点。如何实现从原始数据到直接输出图像分割mask?这里就是我们自己能够用 python 代码做的事情。

上述例子就展示了如何将原始成像数据提取出来。主要是使用 AICSImageio 这个 python 模块。

上述例子展示了怎么批量调用 cellpose。这里更重要地是「授人以渔」,让大家了解如何去学习和消化别人的代码。

AI工具与下游的整合

对于图像分割任务来说,几乎所有的AI工具的输出形式都支持 mask(掩膜)图像。考虑到本博客系列教程的延续性,所以我首先以使用 ImageJ 作为下游为例,介绍了怎么 adapt to 这种 mask 的 output,来完成后续的数据分析任务。

但随着python编程能力的提升,或者是分析数据的数量和复杂程度进一步提升,你可能会逐渐产生「All in Python」的想法。如果这样确实能够提升你整体的效率,那就去做吧。事实上 ImageJ 上几乎所有功能,都可以找到相应的 python 模块来替代。所以第一步就是找到这些好用的模块。

我这里简单介绍了 scikit-image 这个模块,其实还有一些类似的比如 opencv 的,包括 scipy 中也有对图像分析的支持,当然了如果你对线性代数很了解,也可以直接使用 numpy 来玩转矩阵。除了图像相关的模块,还有一个ROI相关的功能,这个我更倾向于使用 shapely 模块来替代处理。

小结

python进阶教程可以帮助您进一步掌握python语言,提高编程能力和思维缜密程度,以满足自定义地分析更大规模数据的需求,并且能够与各种AI工具进行整合,形成工具链以提升自动化效率。

python进阶教程相关资源分享链接如下
链接:https://pan.baidu.com/s/11ota9CgW8oeeV1B7drz6oQ
提取码:

该部分仅登录用户可见

最后修改:2024 年 09 月 26 日
请大力赞赏以支持本站持续运行!