代码地址:
https://github.com/deepinsight/insightface/tree/master/alignment/synthetics
环境安装
pip install albumentations
pip install torch==1.12.1+cu116 torchvision==0.13.1+cu116 torchaudio==0.12.1 --extra-index-url https://download.pytorch.org/whl/cu116
pip install pytorch-lightning
pip install timm
pip install albumentations
pip install insightface
pip install onnxruntime
训练集
1 下载训练数据集:
Face Synthetics dataset从https://github.com/microsoft/FaceSynthetics下载并将其放在某个地方
2 路径修改:
3 数据准备
使用tools/prepare_synthetics.py进行训练数据准备
过程:
4 数据生成
数据处理完成后会在此文件夹内生成生成的70点标注图片+模型
训练模型
预训练模型、细节修改
预训练模型,不用下载,需要修改点的个数68改为70
使用ResNet50d
root为数据生成后的文件夹路径,填写自己的即可
开始训练
python -u trainer_synthetics.py
训练报错解决
1 报错:
C:\anaconda\envs\insightface-master12\lib\site-packages\torchaudio\backend\utils.py:62: UserWarning: No audio backend is available.
warnings.warn("No audio backend is available.")
Global seed set to 727
Traceback (most recent call last):
File "E:\project_mian\insightface-master\alignment\synthetics\trainer_synthetics.py", line 139, in <module>
cli_main()
File "E:\project_mian\insightface-master\alignment\synthetics\trainer_synthetics.py", line 101, in cli_main
train_set = FaceDataset(root_dir=args.root, is_train=True)
File "E:\project_mian\insightface-master\alignment\synthetics\datasets\dataset_synthetics.py", line 92, in __init__
A.MotionBlur(blur_limit=(5,12), p=0.1),
File "C:\anaconda\envs\insightface-master12\lib\site-packages\albumentations\augmentations\blur\transforms.py", line 78, in __init__
raise ValueError(f"Blur limit must be odd when centered=True. Got: {self.blur_limit}")
ValueError: Blur limit must be odd when centered=True. Got: (5, 12)
解决: 12改为13
2 报错:
type object 'Trainer' has no attribute 'add_argparse_args'
降级并安装
pip install pytorch-lightning==1.9.4
报错:
Traceback (most recent call last):
File "E:\project_mian\insightface-master\alignment\synthetics\trainer_synthetics.py", line 139, in <module>
cli_main()
File "E:\project_mian\insightface-master\alignment\synthetics\trainer_synthetics.py", line 130, in cli_main
logger=TensorBoardLogger(osp.join(ckpt_path, 'logs')),
File "C:\anaconda\envs\insightface-master12\lib\site-packages\pytorch_lightning\loggers\tensorboard.py", line 110, in __init__
super().__init__(
File "C:\anaconda\envs\insightface-master12\lib\site-packages\lightning_fabric\loggers\tensorboard.py", line 93, in __init__
raise ModuleNotFoundError(
ModuleNotFoundError: Neither `tensorboard` nor `tensorboardX` is available. Try `pip install`ing either.
解决:
pip install tensorboardX
3 报错
type object 'Trainer' has no attribute 'add_argparse_args'
解决
pip install pytorch-lightning==1.9.4
4 报错
__init__() got an unexpected keyword argument 'progress_bar_refresh_rate'
解决:
注释这行progress_bar_refresh_rate
5 报错
AttributeError: 'Chatbot' object has no attribute 'style'
解决:
pip install gradio==3.50.0 降低版本 先卸载
6 报错:
Traceback (most recent call last):
File "E:\project_mian\insightface-master\alignment\synthetics\trainer_synthetics.py", line 143, in <module>
cli_main()
File "E:\project_mian\insightface-master\alignment\synthetics\trainer_synthetics.py", line 140, in cli_main
trainer.fit(model, train_loader, val_loader)
File "C:\anaconda\envs\insightface-master12\lib\site-packages\pytorch_lightning\trainer\trainer.py", line 608, in fit
call._call_and_handle_interrupt(
File "C:\anaconda\envs\insightface-master12\lib\site-packages\pytorch_lightning\trainer\call.py", line 38, in _call_and_handle_interrupt
return trainer_fn(*args, **kwargs)
File "C:\anaconda\envs\insightface-master12\lib\site-packages\pytorch_lightning\trainer\trainer.py", line 650, in _fit_impl
self._run(model, ckpt_path=self.ckpt_path)
File "C:\anaconda\envs\insightface-master12\lib\site-packages\pytorch_lightning\trainer\trainer.py", line 1112, in _run
results = self._run_stage()
File "C:\anaconda\envs\insightface-master12\lib\site-packages\pytorch_lightning\trainer\trainer.py", line 1191, in _run_stage
self._run_train()
File "C:\anaconda\envs\insightface-master12\lib\site-packages\pytorch_lightning\trainer\trainer.py", line 1214, in _run_train
self.fit_loop.run()
File "C:\anaconda\envs\insightface-master12\lib\site-packages\pytorch_lightning\loops\loop.py", line 199, in run
self.advance(*args, **kwargs)
File "C:\anaconda\envs\insightface-master12\lib\site-packages\pytorch_lightning\loops\fit_loop.py", line 267, in advance
self._outputs = self.epoch_loop.run(self._data_fetcher)
File "C:\anaconda\envs\insightface-master12\lib\site-packages\pytorch_lightning\loops\loop.py", line 199, in run
self.advance(*args, **kwargs)
File "C:\anaconda\envs\insightface-master12\lib\site-packages\pytorch_lightning\loops\epoch\training_epoch_loop.py", line 187, in advance
batch = next(data_fetcher)
File "C:\anaconda\envs\insightface-master12\lib\site-packages\pytorch_lightning\utilities\fetching.py", line 184, in __next__
return self.fetching_function()
File "C:\anaconda\envs\insightface-master12\lib\site-packages\pytorch_lightning\utilities\fetching.py", line 265, in fetching_function
self._fetch_next_batch(self.dataloader_iter)
File "C:\anaconda\envs\insightface-master12\lib\site-packages\pytorch_lightning\utilities\fetching.py", line 280, in _fetch_next_batch
batch = next(iterator)
File "C:\anaconda\envs\insightface-master12\lib\site-packages\pytorch_lightning\trainer\supporters.py", line 569, in __next__
return self.request_next_batch(self.loader_iters)
File "C:\anaconda\envs\insightface-master12\lib\site-packages\pytorch_lightning\trainer\supporters.py", line 581, in request_next_batch
return apply_to_collection(loader_iters, Iterator, next)
File "C:\anaconda\envs\insightface-master12\lib\site-packages\lightning_utilities\core\apply_func.py", line 64, in apply_to_collection
return function(data, *args, **kwargs)
File "C:\anaconda\envs\insightface-master12\lib\site-packages\torch\utils\data\dataloader.py", line 681, in __next__
data = self._next_data()
File "C:\anaconda\envs\insightface-master12\lib\site-packages\torch\utils\data\dataloader.py", line 1376, in _next_data
return self._process_data(data)
File "C:\anaconda\envs\insightface-master12\lib\site-packages\torch\utils\data\dataloader.py", line 1402, in _process_data
data.reraise()
File "C:\anaconda\envs\insightface-master12\lib\site-packages\torch\_utils.py", line 461, in reraise
raise exception
RuntimeError: Caught RuntimeError in DataLoader worker process 0.
Original Traceback (most recent call last):
File "C:\anaconda\envs\insightface-master12\lib\site-packages\torch\utils\data\_utils\worker.py", line 302, in _worker_loop
data = fetcher.fetch(index)
File "C:\anaconda\envs\insightface-master12\lib\site-packages\torch\utils\data\_utils\fetch.py", line 52, in fetch
return self.collate_fn(data)
File "C:\anaconda\envs\insightface-master12\lib\site-packages\torch\utils\data\_utils\collate.py", line 175, in default_collate
return [default_collate(samples) for samples in transposed] # Backwards compatibility.
File "C:\anaconda\envs\insightface-master12\lib\site-packages\torch\utils\data\_utils\collate.py", line 175, in <listcomp>
return [default_collate(samples) for samples in transposed] # Backwards compatibility.
File "C:\anaconda\envs\insightface-master12\lib\site-packages\torch\utils\data\_utils\collate.py", line 140, in default_collate
out = elem.new(storage).resize_(len(batch), *list(elem.size()))
RuntimeError: Trying to resize storage that is not resizable
解决:数据尺寸不对应,都改为70即可
开始训练
训练生成模型保存为下图所示:
测试
运行test_synthetics.py
在’data/300W/Validation’中加入pred.txt,txt中为每张图片路径
并替换对应模型路径即可开始测试
测试结果: