用Python获取多是全网最全的杰尼龟表情包(第二弹)

上回说到咱们已经经过爬虫以及将视频切割成多幅图片,今天就来谈谈如何经过机器学习的方法来减小筛选杰尼龟的工做量。这些图片能够粗暴地分为两类,是杰尼龟或者不是杰尼龟,这个分类任务不一样于猫狗识别的二分类,而是单分类任务算法

分类算法

分类算法如果按照类别个数划分,能够分为单分类、二分类以及多分类这三种。通常咱们见的比较可能是二分类或是多分类。网络

经过朴素贝叶斯算法来识别垃圾邮件、用神经网络来识别猫狗都是典型的二分类,垃圾邮件和正常邮件都有其对应特征及标签,猫和狗也都有其对应特征及标签,属于监督学习的范畴。app

手写数字识别0-9则是一种典型的多分类,而今天咱们的任务是判断某张图片是否是杰尼龟,即单分类任务。由于咱们仅有现成的少许杰尼龟的图片做为正样本训练集而且很难找到合适的负样本,咱们须要训练出一个单分类模型,该模型只关注与正样本类似或是匹配程度高的样本,将不属于该类的全部其余样本统一判为“不是”,而非因为属于另一类而返回“不是”。机器学习

file

单分类支持向量机正是这样一种单分类算法,它其实是肯定正样本的边界,边界以外的数据会被分为另外一类。刚好适用于当前这样负样本的特征不容易肯定的场景。实际上,这是一种异常检测的算法。学习

特征提取

总体的思想是使用深度神经网络作特征提取,把提取出来的特征用于现有的单类别分类方法进行分类。spa

特征提取部分采用了inception v3的网络结构,把每一张图片转成的像素矩阵做为数据传入到张量中作前向计算,从而获得高维特征。把咱们手头少许的杰尼龟图片的特征一次所有提取,把切割获得的图片分批次提取特征。code

with tf.Session() as sess:
        sess.run(tf.global_variables_initializer())
        tensor=sess.graph.get_tensor_by_name('pool_3/_reshape:0')
        for i in range(num_batches):
            batch_img_data=img_datas[i*batch_size:(i+1)*batch_size]
            batch_img_labels=img_labels[i*batch_size:(i+1)*batch_size]
            feature_v=[]
            for j in batch_img_data:
                j_vector=sess.run(tensor,feed_dict={'DecodeJpeg/contents:0':j})
                feature_v.append(j_vector)
            feature_v=np.vstack(feature_v)
            save_path=os.path.join(folder,'data_%d.pickle'%i)
            with tf.gfile.FastGFile(save_path,'w') as f:
                pickle.dump((feature_v,batch_img_labels),f)
            print(save_path,'is_ok!')复制代码

OneClass SVM

把这些杰尼龟图片的特征看成训练集来训练这个OneClass SVM模型,勾勒出一个包含杰尼龟特征的超平面,接着对切割获得的图片特征进行检测,若是包含在超平面内,则获得结果1,反之得结果-1。获得结果以后,将正例的全部图片复制移动到新的文件夹,而该文件夹里面的图片即是咱们的目标图片。cdn

def one_class_svm():
    model=svm.OneClassSVM()
    feature_matrix,_=get_matrix('data_jieni',50)
    model.fit(feature_matrix)
    vedieo_feature_matrix,origin_labels=get_matrix('data_vedio',500)
    result=model.predict(vedieo_feature_matrix)
    for i in range(len(origin_labels)):
        if result[i]==1:
            move(src='vedio',dst='result',i=origin_labels[i])复制代码

筛选完成后,咱们会获得这个新的result文件夹包含机器学习所筛选出来的杰尼龟图片,但实际上效果不是特别理想,仍有很多并非杰尼龟的图片成为漏网之鱼,也被放入到这个文件夹之中,咱们能够考虑对正样本集进行一些处理,进行随机切割,图片反转,旋转等方式来扩充训练集。视频

file

至此,咱们已经经过机器学习的方法对切割获得的图片集进行了一个筛选并得到了大量杰尼龟的图片,最后一弹咱们就来聊聊如何操做这些图片。blog

相关文章
相关标签/搜索