[AIVIVN-Face Recognition] 1st solution

aivivn_face_recognition

#1

Mình chia sẻ source code, guideline và solution chi tiết cho cuộc thi nhận dạng người nổi tiếng.

https://bitbucket.org/dungnb1333/dnb-facerecognition-aivivn/src/master/

Link checkpoint của models https://drive.google.com/drive/folders/1JmsBh8jMxGlVsdogHFglODvOueNJ7EFy?usp=sharing Hi vọng chia sẻ có ích cho mọi người!


Tổng kết cuộc thi 'Nhận diện người nổi tiếng' trên AIviVN
#2

dù đọc ko hiểu gì hết nhưng cảm ơn bạn đã chia sẻ, mãi yêu :*


#4

con trâu nước này :v


#5

hello bạn ơi, link Dropbox mình ko thể truy cập được


#6

Hình như hôm qua nhiều người truy cập tải nên nó bị lỗi rồi, đề mình move sang host khác


#7

ok mình di chuyển sang google drive rồi nhé, dropbox lởm quá


#8

Anh ơi, phải tải xuống rồi upload lên ạ, , có cách nào clone về own driver của mình không anh nhỉ


#9

Rất cảm ơn anh vì solution ạ :D. Em có thắc mắc là tại sao anh không đi theo hướng train Triplet Loss ạ ? Việc chọn hướng train theo kiểu classify có dựa vào đâu (như dữ liệu ít, kinh nghiệm, …) không ạ.

Một lần nữa cảm ơn anh vì solution rất nhiều ạ!


#10

A đã thử build model với triplet loss và nó chỉ đạt map@5 tầm 88%, trong khi embedding này đã có rất nhiều thông tin rồi nên chỉ cần model classification là đủ.


#11

Anh dùng mô hình pretrained gì để huấn luyện triplet loss ạ. Em đã thử dùng pretrained facenet vs bộ dữ liệu vgg thì fine-tuned bị tụt từ 85% xuống tầm 7x% (em thử fine-tune cả model lần fine-tuned một phần thì nó đều tụt). Nhưng khi em thử fine-tune với pretrained model của facenet cho bộ dữ liệu Casia thì lại tăng từ 64% lên 76%.


#12

Fine-tuning cả model, pretrained on vgg2


Deep learning và bài toán Face Recognition
#13

ok ạ. Em cảm ơn anh ạ


#14

Ko biết bạn có dataset ko mình cần để chạy thử :slight_smile:


#15

RuntimeError: CUDA out of memory. Tried to allocate 6.27 GiB (GPU 0; 7.92 GiB total capacity; 370.28 MiB already allocated; 6.27 GiB free; 359.34 MiB cached)

Bạn ơi, mình chạy alignment ảnh thì bị out memory mà không biết batsize hoặc code cần chỉnh chỗ nào để chạy cho con GTX 1070 Ti.

Mình dùng aligment MTCNN thì có thể chạy trên cả 1050Ti mà chỉ cần chỉnh batch size. Còn cái thư viện 2D 3D của bạn mình không biết chỉnh thế nào để chạy trên GPU nhỏ như vậy :slight_smile: Cảm ơn bạn


#16

@a_very_lonely_boy mình chạy trên 1080Ti 12GB, có thể model của 2D-3D alignment khá lớn 1070 Ti ko load nổi, vậy bạn chạy trên cpu đi, thay dòng 13 trong file align_face.py : fa = face_alignment.FaceAlignment(face_alignment.LandmarksType._2D, flip_input=False, device=‘cuda:0’) bởi fa = face_alignment.FaceAlignment(face_alignment.LandmarksType._2D, flip_input=False, device=‘cpu’), tuy nhiên sẽ chậm hơn chạy trên gpu nhiều. Hoặc đơn giản hơn bạn tạo kernel trên kaggle, tạo 1 dataset của bạn rồi tải dataset của cuộc thi lên (tầm 1GB nên thoải mái), sau đó sử dụng GPU có sẵn của kaggle tầm 16GB nên thoải mái dùng cho repo này.


#17

@dauviet Hi Việt mình xóa hết project trên máy mình rồi nên không còn giữ dataset nữa, bạn xin anh Tiệp hoặc anh Quang nhé


#18

cảm ơn bạn. Cho mình hỏi xíu là mỗi lần chạy face_alignment bạn chỉ chạy một ảnh đúng không? Kiểu như nó sẽ tính toán xong lần lượt từng ảnh một chứ không phải tính đồng thời một số ảnh load vào GPU? Vì mình thấy mỗi khi chạy cho folder một số ảnh thì nó liên tục refresh lượng bộ nhớ đã dùng của GPU cho từng ảnh?


#19

@a_very_lonely_boy đúng rồi bạn


#20

Minh có đọc phương pháp của bạn thì đại ý là sau khi xử lí alignment, rồi dùng pre-train để trích xuất embeding ma trận cho từng ảnh.

Sau đó bạn tạo một model kiểu như Neural Net thông thường để phân 1000 lớp dựa trên data emb? Thường mình thấy người ta hay dùng k-NN hoặc SVM thì k chuẩn lắm, vậy là bạn dùng một NN để phân lớp cho emb đúng không nhỉ? Vì thấy bạn nói là tạo ra một mô hình cỡ 2 triệu tham số không rõ có phải NN nhiều layer hay mô hình kiểu CNN?

Ví dụ khi ở bước 4 bạn train chẳng hạn file train.py trong model1_insightface chẳng hạn, thì đó là train caí mô hình NN thông thường do bạn nghĩ ra dựa trên emb trích xuất từ pretrain insightface, chứ không phải là bạn train lại mô hình insightface đúng không nhỉ?

Đây là model của bạn?

def Model(): model = Sequential() model.add(Dense(2048, input_dim=INPUT_DIM, init=‘uniform’)) model.add(Activation(‘relu’)) model.add(Dropout(0.25)) model.add(Dense(NUMBER_OF_CLASSES, init=‘uniform’)) model.add(Activation(‘softmax’)) return model


#21

model insightface, vgg, facenet chỉ dùng để trích xuất ra các embedding -> đầu vào nn “Thường mình thấy người ta hay dùng k-NN hoặc SVM thì k chuẩn lắm”, mình chưa thử. Bạn có thể tính số lượng tham số dựa vào inputdim x dense layer + denselayer x output mà, hoặc dùng hàm model.summary() trong keras, mình không train lại các model insightface …