在VALSE2021会上,首次深刻了解了弱监督学习这个方向的知识,在传统的强监督学习中,需要质量很高的标签作为每一个样本的训练标识,但是在大部分情况下,获得高质量标签要耗费大量的成本,不符合真正的应用场景,并且有时候在获取标签时不可避免的会出现一些错误标签,造成一些噪音,这就是弱监督要解决的问题,就是在标签质量不高或者一部分有标签一部分没有标签的情况下如何对模型进行训练。
对于PRCV这个专利图分类的比赛,很明显就是弱监督学习中不完全学习的范畴,这类问题最好的解决方法就是半监督学习,因为只有一部分数据带有标签,但是有标签的数据只有30张,非常少,剩下的49970都是无标签的数据,所以要先对无标签的数据进行聚类再做其他的处理,但是目前来说直接聚类效果确实不好,除非将K值设置的非常大,但是聚成一小类之后,并不知道这一类的真实标签是什么,所以这里就必须要有一个步骤对聚类的每一个簇都要放置标签。然后整合这些簇。
现在亟待解决的问题就是每一个簇的标注和合并问题,目前的想法是这样的,就是利用那20张已知标签的图像,数据提取一部分先验知识,然后利用这部分知识再去对未知标签的簇进行分类,比如用着20张图片训练一个支持向量机,或者直接用欧式距离度量每一张图片和每一个簇的距离,然后采用投票的方法对每一个簇进行类别标注,再使用这些数据对某一个模型进行训练。
干扰聚类的两个因素:1.图片背景的颜色不一样 2. 图片前景的纹理过于复杂。第一个问题现在已经基本解决了,就是在彩色图像上先获取一个背景点,然后将这个背景点和图像上所有的像素点都计算色差,如果色差在一定范围内,就认为这个像素点属于背景,就可以对其进行填充白色,剩下的部分作为前景填充黑色,这样图像的二值化就完成了。这种方法比灰度图检测要好一些。
总体流程:对所有的图片都用背景点色差的方法二值化,然后使用Kmeans进行聚类,对训练集20张图片进行镜像或者旋转增广,然后训练SVM,使用SVM对每一聚类簇的每一张图片进行分类,如果他们有60%以上指向同一类就给这一个簇放上这个标签,如果这一簇没有超过60%的数据指向同一类,那么这一类舍弃,最后将带有同一标签的类别进行合并,当然因为数据量有限可以对数据进行增广操作,如果SVM这个方法不行,那就直接使用度量的方法,像欧式距离或者SSIM等方法投票。
还要一种思路就是先使用度量的方法,挑出很小一部分可能只有一两千张的精确标注数据,用其训练SVM,然后使用SVM对簇进行数据的标注,最后合并相同标注的簇。
这个实验是在彩色图下进行的,主要对图片进行了几种增广操作,图像旋转,图像随机裁剪,颜色抖动和添加高斯噪声,但是最后的总体效果其实并不好,和未进行图像增广之前在测试集上效果差不多,严重欠拟合,猜想因为HOG提取的都是梯度或者说边缘特征,对颜色或者其他信息不敏感,所以增广后提取的特征和增广前的差不多,就造成了准确率比较低的情况,只有30%左右的准确率,因为可信度不高,所以不足以支撑进行簇投票,后续可以在二值化图上试试效果,或者换一种特征提取的方法。也尝试使用ResNet进行增广数据的训练,但是结果就是训练集和测试集不在一个分布上,所以导致两者准确率差特别多。