用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

相關文章
相關標籤/搜索