【数据清洗】图像数据清洗之---去除相似度高的图像

目的:人工做数据清洗较为麻烦,而且费事费力没成绩,还拉拽整个项目的后腿。所以这里根据调研情况,分析尝试一下。

1.调研分析

(1) 百度EasyData

参考:百度大脑自己的csdn说明

有几点:

1)过滤无对应目标的图,如果有开源通用模型,人脸或者行人检测等,是可以解决的。如果是无,那前期也是需要自己训练个检测模型,然后做半自动的标注与筛选的。然后根据新加入的数据,继续迭代地优化模型。

2)去相似图片。这里的相似是特征相似度。如果有对应的分类提取特征的网络结构的话(有开源用开源,无开源就迭代训练),那么可以利用图像检索的方式获得图像特征向量,然后计算特征向量的cosine距离或者欧式距离等。设置较大的阈值,将较为冗余的图像筛选去掉。

3)去模糊图片。即去除图像质量不高的图片,猜测这个可以找网上的对于图像清晰度打分的这种模型或者是图像质量评估IQA的模型,进行筛选。初步判断不太需要自己去训练模型,但是呢,对于最后保留什么样质量的图像,这个是我们要自己写一些逻辑的。不过难度也不大。

(2) 华为ModelArts

参考:华为数据清洗服务

可以根据提供正样本与负样本,将数据筛选好。看了一下,里面也是有特征提取,相似度计算的。提到的主要有数据清洗聚类、异常检测、相似度计算、特征提取器等。教程写得很详细。

(3) 专利

还有一篇专利,关于根据图像特征相似度,做数据清洗的。https://patentimages.storage.googleapis.com/a0/89/06/563a1061fac7fe/CN107480203A.pdf

 

2.实践

import torch
import torch.nn.functional as F
import os
import shutil
import cv2

def compute_consine_similar(features, others):
    features = torch.from_numpy(features)
    others = torch.from_numpy(others)
    features = F.normalize(features, p=2, dim=1)
    others = F.normalize(others, p=2, dim=1)
    similar_m = torch.mm(features, others.t())
    return similar_m.cpu().numpy()


if __name__ == '__main__':
    test_path = "/train_prepare/"
    save_path = "/crops_remove/train_prepare/"
    if not os.path.exists(save_path):
        os.makedirs(save_path)
    feature_pre, feature_now = None, None
    img_name_pre, img_name_now = None, None
    img_pre, img_now = None, None
    
    net = Net()
    state_dict = torch.load(model_path, map_location=lambda storage, loc: storage)[
            'net_dict']
    net.load_state_dict(state_dict)

    for folder in os.listdir(test_path):
        for img_name in sorted(os.listdir(test_path + folder)):
            img_path = test_path + folder + "/" + img_name
            print("img_path : {}".format(img_path))
            img = cv2.imread(img_path)
            img = cv2.resize(img, (256, 128))
            
            feature = net.eval(img)
            feature_pre, feature_now = feature_now, feature
            img_name_pre, img_name_now = img_name_now, img_name
            img_pre, img_now = img_now, img

            if feature_now is not None and feature_pre is not None:
                print(feature_now.shape)
                similar_m = compute_consine_similar(feature_now, feature_pre)
                print(img_name_now + " and " + img_name_pre + " have {} similar".format(similar_m[0][0]))

                imgs = np.hstack([img_now, img_pre])
                # 展示多个
                cv2.putText(imgs, str(similar_m[0][0]), (20,20), cv2.FONT_HERSHEY_SIMPLEX, 1, (0,255,0), 4)
                cv2.imshow("mutil_pic", imgs)
                # 等待关闭
                if similar_m[0][0] <= 0.999:
                    cv2.waitKey(1000)
                else:
                    if not os.path.exists(save_path+folder):
                        os.makedirs(save_path+folder)
                    remove_path = save_path + folder + "/" + img_name
                    print("We will move {} to {} !".format(img_name, save_path))
                    shutil.move(img_path, remove_path)
                    cv2.waitKey(100)


大致按照上面的流程来的。

1)完成根据数据特征相似度筛选功能;

2)可视化前后帧的一个opencv窗口;(参考:https://zoutao.blog.csdn.net/article/details/87009082

3)将筛选出来的数据保存起来。

  • 9
    点赞
  • 71
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论
CelebA数据集是一个用于人脸识别和属性分析的广泛使用的数据集。下面是使用CelebA数据集的一般步骤: 1. 下载数据集:你可以从CelebA官方网站或其他资源网站下载CelebA数据集。确保下载包含图像和相关注释(如属性标签)的完整数据集。 2. 数据集预处理:一旦你获得了CelebA数据集,你可能需要对数据进行预处理。这可能包括图像的大小调整、数据清洗和格式转换等。 3. 数据加载:使用你选择的编程语言和库(如Python和OpenCV)加载数据集。确保能够读取图像文件和相关标签。 4. 数据探索和可视化:了解数据集的结构和特征,通过查看图像和属性标签来熟悉数据。 5. 数据处理和增强:根据你的需求,可以对数据进行处理和增强,例如裁剪、旋转、翻转等操作,以增加数据样本的多样性。 6. 数据划分:将数据集划分为训练集、验证集和测试集。通常,训练集用于模型训练,验证集用于调整模型超参数和监控模型性能,测试集用于评估模型性能。 7. 构建模型:根据你的任务需求选择合适的模型架构,如卷积神经网络(CNN)或预训练模型(如VGG、ResNet等)。 8. 模型训练:使用训练集对模型进行训练。通过反向传播和优化算法(如随机梯度下降)来更新模型参数,以最小化损失函数。 9. 模型评估:使用验证集评估模型的性能,例如准确率、召回率等指标。根据评估结果对模型进行调整和改进。 10. 模型预测:使用测试集对模型进行最终的评估和预测。根据任务需求,你可以使用训练好的模型进行人脸识别或属性分析。 记住,这只是一个一般的流程指导,具体的实现方法可能因你选择的编程语言、框架和任务需求而有所不同。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

wait a minutes

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值