我目前正在研究论文,在准确性和速度方面,我将比较人脸识别技术Eigenface,Fisherface和CNN。我目前正在尝试使用FaceNet为CNN训练自己的模型。
我的问题是我似乎无法使模型的准确性超过71%,而我为分类器管理的最大值为80%。我使用的是LFW数据集的一小部分,其中包含10个类别,每个类别训练40个图像,每个区域测试4个图像。
我尝试了以下参数,使用分类器可得出77.5%的准确度,而模型前向通过则可达到71%的准确度:
/*
* Alignment
*/
python3 src/align/align_dataset_mtcnn.py ~/datasets/custom2/raw/training/ ~/datasets/custom2/aligned_182/training --image_size 182 --margin 44
python3 src/align/align_dataset_mtcnn.py ~/datasets/custom2/raw/testing/ ~/datasets/custom2/aligned_182/testing --image_size 182 --margin 44
/*
* Training
*/
python3 src/train_softmax.py \
--logs_base_dir ~/logs/facenet/ \
--models_base_dir ~/models/facenet/ \
--data_dir ~/datasets/custom2/aligned_182/training/ \
--image_size 160 \
--model_def models.inception_resnet_v1 \
--lfw_dir ~/datasets/lfw/lfw_aligned_160/ \
--optimizer ADAM \
--learning_rate -1 \
--max_nrof_epochs 150 \
--keep_probability 0.8 \
--random_crop \
--random_flip \
--use_fixed_image_standardization \
--learning_rate_schedule_file data/learning_rate_schedule_classifier_casia.txt \
--weight_decay 5e-4 \
--embedding_size 512 \
--lfw_distance_metric 1 \
--lfw_use_flipped_images \
--lfw_subtract_mean \
--validation_set_split_ratio 0.05 \
--validate_every_n_epochs 5 \
--prelogits_norm_loss_factor 5e-4
python3 src/freeze_graph.py ~/models/facenet/20190402-225816/ ~/models/facenet/20190402-225816/model.pb
python3 src/classifier.py TRAIN ~/datasets/custom2/aligned_182/training/ ~/models/facenet/20190402-225816/model.pb ~/models/facenet/20190402-225816/classifier.pkl --batch_size 1000
/*
* Test verification
*/
python3 src/classifier.py CLASSIFY ~/datasets/custom2/aligned_182/testing/ ~/models/facenet/20190402-225816/model.pb ~/models/facenet/20190402-225816/classifier.pkl --batch_size 1000
但是在此之前,我尝试了以下方法,这些方法使用分类器的准确度为80%,而前传的准确度为〜68%:
/*
* Alignment
*/
for N in {1..4}; do python3 src/align/align_dataset_mtcnn.py ~/datasets/custom2/raw/training ~/datasets/custom2/aligned_160/training --image_size 160 --margin 32 --random_order --gpu_memory_fraction 0.2 & done
/*
* Training
*/
python3 src/train_softmax.py \
--logs_base_dir ~/logs/facenet/ \
--models_base_dir ~/models/facenet/ \
--data_dir ~/datasets/custom2/aligned_160/training \
--image_size 160 \
--model_def models.inception_resnet_v1 \
--lfw_dir ~/datasets/lfw/lfw_aligned_160 \
--optimizer RMSPROP \
--learning_rate 0.01 \
--weight_decay 1e-4 \
--max_nrof_epochs 100 \
--gpu_memory_fraction 0.95
python3 src/freeze_graph.py ~/models/facenet/20190401-114728/ ~/models/facenet/20190401-114728/model.pb
python3 src/classifier.py TRAIN ~/datasets/custom2/aligned_160/training/ ~/models/facenet/20190401-114728/model.pb ~/models/facenet/20190401-114728/classifier.pkl --batch_size 1000
/*
* Verification
*/
python3 src/classifier.py CLASSIFY ~/datasets/custom2/aligned_160/testing/ ~/models/facenet/20190401-114728/model.pb ~/models/facenet/20190401-114728/classifier.pkl --batch_size 1000
在LFW正向传递中,模型本身的准确度在第一个较好,约为〜71%,而不是〜68%,但是使用分类器则为77.5%,而不是80%。我的问题是我应该怎么做才能获得更高的精度。 如果可能的话,我希望获得90%以上的折扣。我从张量板上收集的图表中可以看到,模型在训练过程中无处不在。这些图表来自模型,准确度约为71%:
这些来自第一个模型,准确度约为68%
如果可能的话,我想使用自己的模型达到90%以上的精度,因为我将其与其他技术进行比较。
如果需要更多信息以帮助我,请告诉我!这里有人知道我应该怎么做才能达到90%以上的准确性吗?
谢谢!