1. 程式人生 > >facenet採坑之旅,主要記錄一些用facenet過程中遇到的大大小小的問題

facenet採坑之旅,主要記錄一些用facenet過程中遇到的大大小小的問題

問題1:Unable to run align_dataset_mtcnn.py getting an attribute error module ‘facenet’ has no attribute ‘store_revision_info’

使用anaconda的環境,將facenet下載儲存在本地,也下載lfw資料集,在執行align_dataset_mtcnn.py程式碼時,正確的填寫相關引數,報這麼一個錯誤。這個錯誤的原因是由於python路徑的問題,查看出錯程式碼的位置:

from scipy import misc
import sys
import os
import argparse
import tensorflow as tf
import numpy as np
import facenet
import align.detect_face
import random
from time import sleep

def main(args):
    sleep(random.random())
    output_dir = os.path.expanduser(args.output_dir)
    if not os.path.exists(output_dir):
        os.makedirs(output_dir)
    # Store some git revision info in a text file in the log directory
    src_path,_ = os.path.split(os.path.realpath(__file__))
    facenet.store_revision_info(src_path, output_dir, ' '.join(sys.argv)) ---------在這個地方出錯
dataset = facenet.get_dataset(args.input_dir)

這是github上的原始碼,這個地方出錯,肯定是facenet匯入錯誤。解決辦法是將從github上下載的facenet-master檔案中src資料夾下所有檔案複製貼上在D:\ProgramData\Anaconda3\Lib\site-packages\facenet下面,當然,因為我是用的anaconda,所以這樣做,另外facenet是在D:\ProgramData\Anaconda3\Lib\site-packages下新建的目錄。貼上之後,將這個資料夾下複製到電腦的環境設定中去,大概就是如下圖所示:
在這裡插入圖片描述然後問題解決!

問題2:W T:\src\github\tensorflow\tensorflow\core\framework\

allocator.cc:101] Allocation of 99532800 exceeds 10% of system memory

與問題1相同的環境設定,這是在執行這個程式碼validate_on_lfw.py,報的錯,而且一直持續報錯,後來猜想是程式碼中這個地方有問題:

def parse_arguments(argv):
    parser = argparse.ArgumentParser()
    
    parser.add_argument('lfw_dir', type=str,
        help='Path to the data directory containing aligned LFW face patches.')
    parser.add_argument('--lfw_batch_size', type=int,
help='Number of images to process in a batch in the LFW test set.', default=100)----預設100張圖片,記憶體吃不消

後來將這個引數–lfw_batch_size設定為50,就沒有報錯了

--------------------9.29號更新--------------------------------------
在執行facenet目錄下的contributed中的real_time_face_recognition.py遇到一個小小的問題,就是在匯入分類器pickle模型時候出錯,編碼錯誤:
UnicodeDecodeError: ‘ascii’ codec can’t decode byte 0x80 in position 1024: ordinal not in range(128)

把原始碼修改成如下這樣就ok了

def __init__(self):
        with open(classifier_model, 'rb') as infile:
            self.model, self.class_names = pickle.load(infile,encoding='latin1') ###這個地方的修改主要是python版本不同造成的原因

後續繼續更新!