U-Net是一种专为图像分割任务设计的深度学习模型,其独特的编码器-解码器架构使其在处理复杂图像分割任务时表现出色。编码器部分通过一系列卷积和池化操作提取图像的高层特征,而解码器部分则通过上采样和卷积操作逐步恢复图像的空间分辨率,从而实现精确的像素级分割。U-Net 的设计使其能够在少量训练数据上取得优异的分割效果,这在医学影像分析中尤为重要,因为获取大量标注数据通常非常困难。U-Net 还通过跳跃连接(skip connections)将编码器和解码器的对应层连接起来,使得高分辨率特征能够直接传递到解码器部分,从而提高分割的精度。总的来说,U-Net通过其创新的设计和卓越的性能,成为图像分割领域的重要工具,推动了多个行业的发展和进步。
本文章主要介绍使用unet_segmentation模型(U-Net)进行图像分割,如何配置QAI AppBuilder工具及环境。包括了准备需要处理的图像数据,加载unet_segmentation模型,运行示例代码进行图像分割,查看处理后的图像效果等步骤。通过这些步骤,可以更加熟悉地使用unet_segmentation模型并进行图像分割工作。
前置条件
- 高通 Windows on Snapdragon
- 各平台账号,包括:Github、高通 Software Center
操作方法及步骤
1. 快捷使用unet_segmentation图像分割应用
- 执行前准备
确保在设备中已经搭建好对应的Python及QNN环境,具体方法请参考:QAI-AppBuilder快速上手及环境配置
- 打开Powershell终端,在Python虚拟环境中执行以下命令:
python unet_segmentation\unet_segmentation.py
输入图像:
输出结果:
output_mask.jpg
output.png
- 结果分析:
结果生成的两个图片 output_mask.jpg 和 output.png ,以下是对这两个输出图片的详细分析:
output_mask.jpg:
这张图片通常显示的是模型生成的分割掩码(mask)。掩码图像中的每个像素值表示该像素所属的类别。掩码图像可以帮助我们直观地看到模型如何将输入图像中的不同区域进行分类和标记。
output.png:
这张图片通常是将分割掩码叠加在原始输入图像上,以便更清晰地展示分割结果。通过这种方式,可以直观地看到模型在原始图像中检测和分割的区域。叠加图像有助于验证分割结果的准确性和效果,便于进一步的分析和调整。
总的来说,mask图像展示了模型对输入图像的分割结果,显示了不同区域的分类情况。通过查看掩码图像,可以评估模型在不同区域的分割效果;而output图像将分割结果与原始图像进行叠加,提供了更直观的视觉效果,便于检查分割结果的准确性和合理性。
2. 手动配置运行unet_segmentation应用
- 环境准备
确保在设备中已经搭建好对应的Python及QNN环境,具体方法请参考:QAI-AppBuilder快速上手及环境配置
- 将安装好的QNN SDK 中的 QNN 库复制到qai_libs目录中
qai_libs\libQnnHtpV73Skel.so
qai_libs\QnnHtp.dll
qai_libs\QnnHtpV73Stub.dll
qai_libs\QnnSystem.dll
qai_libs\libqnnhtpv73.cat
- 从以下链接下载示例代码
下载示例代码后,将其复制到工作目录根目录
- 将输入数据复制到工作目录根目录下
- 准备好所有目录文件后,整体目录结构如下:
运行脚本下载的模型会存放在models中 。
- 运行示例代码
python .\unet_segmentation.py
- 运行结果
得到的掩码图像和输出图像最终保存为output_mask.jpg和output.png。
作者:
赵世朝(Shizhao Zhao),高通工程师