用公司的服務器,python的所有包都打好了。
網址:https://github.com/davidsandberg/facenet/wiki/Train-a-classifier-on-own-images
開始一步一步,都很順利。
該下的都下了。
現在就在
Train a classifier on LFW
這一步出了問題。tensorflow.python.framework.errors_impl.ResourceExhaustedError: OOM when allocating tensor of shape [1,1,896,256] and type float之前也報錯:InternalError: Dst tensor is notinitialized,於是我export CUDA_VISIBLE_DEVICES=1了一下,打開了cuda。
那麼現在是什麼問題呢,網上搜了很多相關東西,發現可能是資源耗盡,垃圾服務器,那就試試把批處理調小一點。遙想當年用cpu版本的caffe訓練人臉數據集,只開了個batch size64就會卡的不行不行。
看來是的,把batch size調小了10倍就行了。
接着走:
都很順沒毛病。
ok,現在是訓練自己的訓練集了。
按照老步驟走到了這一步:python src/classifier.py TRAIN ~/datasets/my_dataset/train/ ~/models/model-20170216-091149.pb ~/models/my_classifier.pkl --batch_size 1000
在此之前把圖片做成10個類,每個類10張,每個類取5張放在test文件夾,5張放在train文件夾。
報錯:ValueError: could not broadcast input array from shape (160,160,4) into shape (160,160,3)
這是什麼原因呢,查了一下facenet.py發現
def load_data(image_paths, do_random_crop, do_random_flip, image_size, do_prewhiten=True):
nrof_samples = len(image_paths)
images = np.zeros((nrof_samples, image_size, image_size, 3))
for i in range(nrof_samples):
img = misc.imread(image_paths[i])
if img.ndim == 2:
img = to_rgb(img)
if do_prewhiten:
img = prewhiten(img)
img = crop(img, do_random_crop, image_size)
img = flip(img, do_random_flip)
images[i,:,:,:] = img
return images
這個函數,把圖片做成了矩陣,然後估計矩陣變成了4維矩陣,超過了原先設定的np.zero的三維。那麼這四維是什麼呢?我知道三維是rgb,查了一點資料發現這四維可能是rgba,a是alpha通道。不管這是什麼通道,我們得刪掉這個通道。這裏還得確定這個通道在第幾維,是第一還是第二還是。。。。都得判斷。容我先研究下。
最後還是先認慫,先用jpg格式圖片,至少jpg格式不是4通道。
ok跑通了