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

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

分类算法

分类算法若是按照类别个数划分,可以分为单分类、二分类以及多分类这三种。一般我们见的比较多是二分类或是多分类。

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

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

file

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

特征提取

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

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

    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。得到结果之后,将正例的所有图片复制移动到新的文件夹,而该文件夹里面的图片便是我们的目标图片。

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

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

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,558评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,002评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,036评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,024评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,144评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,255评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,295评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,068评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,478评论 1 305
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,789评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,965评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,649评论 4 336
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,267评论 3 318
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,982评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,223评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,800评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,847评论 2 351

推荐阅读更多精彩内容