日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Insightface项目爬坑指南+使用本地数据集训练流程(MXNET版)

發(fā)布時間:2025/3/21 编程问答 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Insightface项目爬坑指南+使用本地数据集训练流程(MXNET版) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

其實半年多前就已經(jīng)把insightface訓(xùn)練等一系列環(huán)節(jié)弄熟了,不得不說IBUG組的這個模型確實是開源界的翹楚,但是還是存在一些問題在某些程度上和商湯云從等大廠存在一點差距,這不妨礙大部分人日常人臉識別的使用。給大佬點煙
xxx.bin的制作這次也不更新截圖了,等下次要用的時候一起截圖更新吧~

前言
公司希望使用新的人臉識別算法去升級老的算法,于是有了此次爬坑之旅
使用的是Mxnet的版本,直接從git上lclone一份代碼,目前我拉下來的代碼里是有問題的,我會在后續(xù)里寫出。
ps,第一次使用MXNET,如果有說的不對的地方請指出謝謝~

安裝準(zhǔn)備
按照git地址上先將Mxnet安裝成功,地址如下
https://github.com/deepinsight/insightface
因為要求使用的是python2.x,我這邊直接在py27這個環(huán)境下配置的程序,大家也可以單獨新建一個環(huán)境,都o(jì)k~然后按照要求安裝好各種包。

更新
當(dāng)初使用的是src文件下的train.py,這個訓(xùn)練腳本應(yīng)該是支持py27的。后續(xù)再recognition文件下的train.py是是支持py36的,后續(xù)的訓(xùn)練其實可以使用這個腳本,并且這個腳本可以顯示loss。建議使用這個,使用方式非常像。
很久沒訓(xùn)練這個模型了,就不截圖,如果能src下的跑通另外的訓(xùn)練腳本應(yīng)該問題不大。
哪天閑了考慮更新。

本地數(shù)據(jù)準(zhǔn)備
Mxnet要求的數(shù)據(jù)格式是與tensoflow不同的,這里需要的是:

? ? /
? ? ? ?train.lst
? ? ? ?train.idx
? ? ? ?train.rec
? ? ? ?property
? ? ? ?lfw.bin
? ? ? ?cfp_fp.bin
? ? ? ?agedb_30.bin
? ? ? ?xxx.bin
1
2
3
4
5
6
7
8
9
其中train.idx 和 train.rec分別是數(shù)據(jù)偏移索引和數(shù)據(jù)本身的文件. property代表數(shù)據(jù)集屬性
.idx和.rec可以理解為TF里的Tf.record,是mxnet的數(shù)據(jù)形勢,proprty是一個文件,里面記錄里有多少個種類,圖像的shape的信息。剩下的。bin文件是在Validation部分用的,就是驗證集的部分。

更新這里的xxx.bin當(dāng)時不太會生成,其實這個就是用自己數(shù)據(jù)做成的驗證集。.idx和.rec是本地數(shù)據(jù)的訓(xùn)練集。

直接運行時會遇到 AttributeError: module ‘facenet’ has no attribute ‘store_revision_info’, AttributeError: module ‘facenet’ has no attribute ‘get_dataset’,的錯誤, 這是導(dǎo)入時的錯誤,部分版本應(yīng)該會遇到。
直接修改導(dǎo)入

使用下載facenet的工程,使用代替

import facenet.src.facenet as facenet
1
將文件復(fù)制到上一級目錄下使用,因為align.face_detect和矯正代碼在同一目錄下。

insightface的代碼face2rec2.py代碼有些問題,猜測時作者更新以后忘記里。
使用Github的incubator-mxnet工程里的im2rec.py腳本。

生成.lst文件,最新的mxnet代碼里,直接使用–list和–recursive,不用添加ture。地址最好選擇絕對地址,不用相對地址
生成rec和idx文件時,使用同一個.py。–num-thread為多線程操作
生成的.lst .rec .idx 都在Mxtest目錄下

python im2rec.py --list ?--recursive ?/opt/app/OCR/face-for-train/Mxtest/train /opt/app/OCR/face-for-test/lfw_mxnet/?
?python im2rec.py --num-thread 4 ?/opt/app/OCR/face-for-train/Mxtest/train /opt/app/OCR/face-for-test/lfw_mxnet/
1
2
之后會生成

開始訓(xùn)練
CUDA_VISIBLE_DEVICES='0,1' python -u train.py --network r100 ?--data-dir ../datasets/faces_glintasia/ --ckpt 2 --target lfw --version-se 0 --per-batch-size 64?
1
CUDA_VISIBLE_DEVICES='0,1' python -u train.py --network r100 ?--data-dir ../datasets/faces_glintasia/ --ckpt 2 --target lfw --version-se 0 --per-batch-size 64 ?--pretrained ../models/model-r100-ii/model,0 --lr 0.001 --prefix ../model_v2/model-r100-v2
1
作者在issus里說,他移除里fc7點全部權(quán)重,所以我們在新的數(shù)據(jù)集上訓(xùn)練的acc會從0開始上升,可以看到上升的很快,遠(yuǎn)比我們從0開始訓(xùn)練的快的多。
參考何凱明大神去年關(guān)于pre-trained model的論文,在預(yù)訓(xùn)練模型上進(jìn)行訓(xùn)練會加快訓(xùn)練速度,但最終的結(jié)果的精度并不會有本質(zhì)上的提高。這里如果可以在網(wǎng)絡(luò)結(jié)構(gòu)里加入GroupN,應(yīng)該會有1%到2%mAP的提升,當(dāng)然不知道人臉識別里這個參數(shù)會是多少


這里的準(zhǔn)確度就是在lfw上跑的準(zhǔn)確度,因為我們是在其基礎(chǔ)上進(jìn)行finetuning的,所以在lfw上的acc已經(jīng)達(dá)到99.8%

[lfw][4000]XNorm: 23.678398
[lfw][4000]Accuracy-Flip: 0.99817+-0.00229
1
2
在訓(xùn)練了10個epoch后,網(wǎng)絡(luò)基本收斂,在glint-asia上的acc達(dá)到92%左右

05-13 07:05 root ? ? ? ? INFO ? ? Epoch[8] Train-acc=0.922817
05-13 07:05 root ? ? ? ? INFO ? ? Epoch[8] Train-lossvalue=0.503714
1
2
出現(xiàn)這種問題,cudaMalloc failed: out of memory

Traceback (most recent call last):
? File "train.py", line 1025, in <module>
? ? main()
? File "train.py", line 1022, in main
? ? train_net(args)
? File "train.py", line 1016, in train_net
? ? epoch_end_callback = epoch_cb )
? File "/opt/app/anaconda3/envs/py27/lib/python2.7/site-packages/mxnet/module/base_module.py", line 529, in fit
? ? self.update()
? File "/opt/app/anaconda3/envs/py27/lib/python2.7/site-packages/mxnet/module/module.py", line 664, in update
? ? self._kvstore, self._exec_group.param_names)
? File "/opt/app/anaconda3/envs/py27/lib/python2.7/site-packages/mxnet/model.py", line 153, in _update_params_on_kvstore
? ? kvstore.push(name, grad_list, priority=-index)
? File "/opt/app/anaconda3/envs/py27/lib/python2.7/site-packages/mxnet/kvstore.py", line 234, in push
? ? self.handle, mx_uint(len(ckeys)), ckeys, cvals, ctypes.c_int(priority)))
? File "/opt/app/anaconda3/envs/py27/lib/python2.7/site-packages/mxnet/base.py", line 252, in check_call
? ? raise MXNetError(py_str(_LIB.MXGetLastError()))
mxnet.base.MXNetError: [11:07:49] src/storage/./pooled_storage_manager.h:143: cudaMalloc failed: out of memory
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
實際上就是爆顯存了,降低batchsize到64就好了

制作本地數(shù)據(jù)的驗證集xxx.bin
打包 lfw2pack.py
需要制作pairs.txt
pairs.txt第一行需要寫清有多少個set的數(shù)據(jù),和每個set多少個正樣本
詳情看下面這個readme

http://vis-www.cs.umass.edu/lfw/README.txt

parser.add_argument('--data-dir', default='', help='')
parser.add_argument('--image-size', type=str, default='112,96', help='')
parser.add_argument('--output', default='', help='path to save.')
?

總結(jié)

以上是生活随笔為你收集整理的Insightface项目爬坑指南+使用本地数据集训练流程(MXNET版)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。