刀具实例分割任务简介及结果展示
引言
本文主要记录和展示了笔者在参与某个针对刀具的外观侵权检测项目时所做的相关工作和成果;除此文外,我在研究的过程中还写了若干篇与计算机视觉或深度学习相关的技术文章,感兴趣的读者请移步:
任务简介
基于内容的图像检索技术能被用于检索与给定商品外观相似的商品。该技术的核心在于通过提取图像特征并计算特征间的距离,以决定两个图像的相似程度。尽管目标商品的图像特征应该是决定商品图像是否相似的主要因素,但在实际应用中,图像相似度及检索结果还可能受到其他因素的影响,例如:
- 图像中所包含的背景、杂物;
- 图像是否包含多个不同的商品实例;
- 商品的拍摄角度。
上述因素均可能使检索质量下降,并且在训练数据少时影响尤为明显。解决这些问题的一种有效方式是对图像中的商品进行实例分割以去除背景杂物,并通过对齐分割结果以减少拍摄角度的影响。
为解决上述问题,笔者在项目中承担起了以下工作:
- 在电商网站搜集刀具图像,并对图像进行标注;
- 对图像进行数据预处理,使之更加满足模型训练需要;
- 使用Mask R-CNN算法训练实例分割模型,评估模型性能;
- 提取分割结果,通过旋转、翻转、裁剪等操作进一步减少背景噪音和其他变异。
图像标注
笔者使用VIA(VGG Image Annotator)这款工具对从电商网站搜集的近千幅图片、共计数千个刀具实例进行了标注;下图展示了一些标注示例。
图像预处理
此过程的主要工作包括提取图像及图像标注数据,并将其转换成符合模型训练要求的表达形式;除此以外,还包括数据扩增(data augmentation),即对训练集中的每幅图像添加一些随机或非随机的变换,得到多张相似而又不同的图像以增加训练集的大小,进而避免模型的过拟合。本项目使用以下图像操作的随机组合,按1:8的比例对图像进行扩增:
- 旋转
- 翻转
- 高斯模糊/动作模糊
- 高斯噪点
- 对比度变化
- 灰度/色调/饱和度变化
- 像素增强
- 颜色通道交换
- Jpeg格式压缩损耗
以下是数据扩增示例:
模型训练与评估
项目使用了由FIZYR团队开发的keras-maskrcnn
(项目地址)程序训练了实例分割模型。最终得到的模型的mAP为0.8569。
下图显示了该模型的输出结果,包括各刀具实例的分类及概率(见图中文字)、定位框(见图中矩形框),以及mask(见图中半透明色块):
图像后处理
本项目在获得实例分割模型后,对每幅图像进行以下操作,以获得其中所包含的刀具实例图像(对于含有多个刀具实例的图像,以下过程中的第1步将得到多个分割结果,此时第2-6步应分别针对每个分割结果分别进行):
- 对原始图像进行实例分割,获得刀具实例的mask(该结果包含一个刀具实例在图像中所覆盖的像素点位置的描述);
- 根据mask计算实例的重心坐标;
- 以实例重心为原点,定义12条斜率不同的轴线;
- 计算各轴线与实例mask相交的长度,并取距离最长者作为长轴;
- 对图像进行旋转,使实例的长轴位于垂直方向;
- 根据旋转后的图像及mask,截取刀具实例图像,并将实例范围之外的像素点以黑色填充。
经过上述过程,即可去除图像中的背景杂物,并使所得到的刀具长轴均位于垂直方向,减少拍摄角度带来的变异(见下图)。