1. 相关概念
plantcv.learn
子软件包中的模块不一定要直接使用。 相反,每个模块都是在plantcv-train.py
脚本中实现的,但是如果需要,可以在自己的脚本中随意使用这些功能。 有关更多详细信息,请参见机器学习教程。
1.1 Naive Bayes 训练模型
naive_bayes
函数从输入图像目录中读取8位RGB图像,并从输入掩码目录中读取相应的二进制掩码图像。 输入的彩色图像将转换为HSV色彩空间,并使用蒙版将输入的RGB图像分为前景(植物)像素和背景像素。 保留10%的前景像素和相同数量的背景像素的随机采样。 使用高斯核的内核密度估计器(KDE)用于估计前景和背景类的每个色相,饱和度和值通道的概率密度函数(PDF)。 在每个可能的8位(256)强度值处采样的PDF将被写入输出文件,并且可以与朴素的贝叶斯分类器一起使用以分割植物。
1.2 Naive Bayes Multiclass 训练模型
naive_bayes_multiclass
函数 读取包含制表符分隔表的文本文件。每列都是用户定义的要素类(例如植物,背景等)。表格中的每个单元格都是一个逗号分隔的红色,绿色和蓝色值列表,用于表示该类的单个像素。该表需要包含足够的像素样本(行),以便训练方法可以准确估计每个类别的颜色值的真实总体分布。 naive_bayes_multiclass
函数将RGB值转换为HSV色彩空间。使用高斯核的核密度估计器(KDE)用于估计两个或更多输入类别的每个色相,饱和度和值通道的概率密度函数(PDF)。在每个可能的8位(256)强度值处采样的PDF将被写入输出文件,并且可以与朴素的贝叶斯分类器一起使用以分割用户定义的类。有关构建输入样本文件的更多信息,请参见《机器学习指南》。为每个类创建蒙版后,可以使用pcv.visualize.colorize_masks
创建图形。
2. 机器学习教程
机器学习方法可用于训练可训练的分类器以检测感兴趣的特征。 在下面的教程中,我们描述了如何训练和使用我们在PlantCV中提供的第一个可训练分类器。 有关该方法的更多详细信息,请参见朴素的贝叶斯分类器文档。
2.1 Naive Bayes
可以训练此处使用的朴素贝叶斯方法将像素标记为植物或背景。 换句话说,给定彩色图像,可以训练它输出二进制图像,其中背景标记为黑色(0),植物标记为白色(255)。 目标是取代手动设置二进制阈值的需要。
为了训练分类器,我们需要使用二进制掩码标记相对较小的图像集。 我们可以使用VIS教程中描述的方法,使用PlantCV为一组输入图像创建二进制掩码。 另外,您可以手工勾勒和创建蒙版。
就本教程而言,我们假设我们位于一个文件夹中,该文件夹包含两个子文件夹,一个包含原始RGB图像,一个包含与RGB图像集匹配的黑白蒙版。
首先,使用plantcv-train.py
使用训练图像输出植物和背景的概率密度函数(PDF)。
plantcv-train.py的输出文件将为每个类别(例如植物和背景)的每个颜色通道(色相,饱和度和值)包含一行。 第一和第二列分别是类和通道标签。 其余的256列包含在8位图像(0-255)中可观察到的每个强度值的PDF中的p值。
一旦有了plantcv-train.py输出文件,就可以在PlantCV中对彩色图像中的像素进行分类。
请参阅上面的朴素的贝叶斯分类器介绍以获取示例输入/输出。
2.2 Naive Bayes Multiclass
朴素贝叶斯多类方法是上述朴素贝叶斯方法的扩展。 就像上面的方法一样,可以训练它在给定输入彩色图像的情况下输出二进制图像。 与上面的朴素贝叶斯方法不同,朴素贝叶斯多类方法可以训练为对用户定义的两个或多个类进行分类。 此外,朴素的贝叶斯多类方法是使用从图像中稀疏采样的颜色训练的,而不是需要标记给定图像中的所有像素。
要训练分类器,我们需要为从每个类中均匀采样的像素构建一个红色,绿色和蓝色值表。 您至少需要两个类。 这里的想法是为每个类别收集像素颜色数据的相关样本。 为每个类别建立鲁棒的概率密度函数所需的样本大小将取决于许多因素,包括类别颜色的可变性和成像质量/再现性。 为了收集像素颜色数据,我们目前使用ImageJ中的像素检查工具。
要收集像素样本,请在ImageJ中打开彩色图像。
使用像素检查器工具选择属于单个类别的图像区域。 单击图像中的像素将为您提供一组R,G,B值,用于围绕中心像素的像素窗口。 在此示例中,一键采样了九个像素,但半径可在“ Prefs”中调整。
在“像素值”窗口中,您可以复制值并将其粘贴到文本编辑器中,例如Windows上的记事本,MacOS上的TextEditor,Atom或VS Code。 类的R,G,B值应以包含类名的行开头,该类名以#开头。 文件内容应如下所示:
接下来,每个类都需要在plantcv-train
的自己的列中。 您可以在plantcv-utils.py
中使用PlantCV随附的实用程序脚本,该脚本会将从Pixel Inspector采集的数据转换为贝叶斯训练算法的表。
注意: 如果使用Windows,则需要指定plantcv-utils.py
的完整路径。 例如,如果安装了Anaconda,它将是python%CONDA_PREFIX%/ Scripts / plantcv-utils.py tabulate_bayes_classes -i pixel_inspector_rgb_values.txt -o bayes_classes.tsv
其中pixel_inspector_rgb_values.txt
是具有您在上面创建的像素值的文件,而bayes_classes.tsv
是具有plantcv-train.py表的文件。
一个由像素样本构建的用于Plantcv-train.py的示例表如下所示:
制表符分隔表中的每一列都是要素类(在此示例中为植物,脓疱,绿化病或背景),每个像元是一个像素的逗号分隔的红色,绿色和蓝色三元组。
类似于上述朴素的贝叶斯方法,请使用plantcv-train.py
使用像素样本为每个类输出概率密度函数(PDF)。
注意:这里
pixel_samples.txt
可替换为上面的bayes_classes.tsv
,而且笔者在运行代码时一直出问题,最后的解决方法为将命令改为:
python Anaconda目录\Scripts\plantcv-train.py naive_bayes_multiclass --file
bayes_classes.tsv --outfile naive_bayes_pdfs.txt --plots
plantcv-train.py的输出文件将为每个类别的每个颜色通道(色相,饱和度和值)包含一行。 第一和第二列分别是类和通道标签。 其余的256列包含在8位图像(0-255)中可观察到的每个强度值的PDF中的p值。
有了plantcv-train.py
输出文件后,我们可以使用上面朴素的贝叶斯部分中描述的相同功能对PlantCV中彩色图像中的像素进行分类。 绘图功能pcv.visualize.colorize_masks
允许用户为每个类别选择颜色。
2.3 使用贝叶斯分类器并行化工作流程
要并行化上述朴素的贝叶斯方法,请遵循工作流并行化教程中的准则构造工作流脚本,但要为plantcv-train.py输出的概率密度函数文件提供一个附加参数。 例如:
然后运行基于输入图像设置了选项的plantcv-workflow.py,但是使用–other_args标志输入朴素贝叶斯PDF文件的地方,例如:
在运行完整的图像集之前,请始终在较小的数据集上测试工作流程(最好将-D标志设置为“ print”)。*您可以使用plantcv-utils.py sample_images
创建图像样本。
本文翻译自https://plantcv.readthedocs.io/en/stable/naive_bayes_multiclass/