人脸识别系列--1.环境搭建和训练数据


由于3080现在还买不到,暂时用Amazon EC2来训练模型,以至于怎么搭建P2实例环境,这里参考这两篇帖子,说的很详细,不过有几点注意一下
https://zhuanlan.zhihu.com/p/25066187
https://zhuanlan.zhihu.com/p/33176260
实例类型
创建ubuntu16的深度学习的基础实例,只安装了显卡驱动和python

生成密钥
如果你要用ssh连接,就生成pem的文件,之后用xshell来远程登陆
登陆
使用pem登陆,默认用户名是ubuntu
添加用户
首先允许root登陆,参考这篇帖子允许root登陆,说的很详细。
然后添加一个自己的用户 https://docs.aws.amazon.com/zh_cn/AWSEC2/latest/UserGuide/managing-users.html#create-user-account

安装 Anaconda3

安装 anaconda
为了不搞乱环境,这里我们使用conda虚拟环境,很方便
操作虚拟环境命令

# 创建虚拟环境:
conda create -n env3.6 python=3.6
# 激活虚拟环境:
source activate env3.6
#退出虚拟环境:
source deactivate
# 查看所有虚拟环境:
conda info -e
# 删除虚拟环境: 
conda remove -n your_env_name(虚拟环境名称) --all

安装tensorflow2

在虚拟环境中进行安装

# 国外服务器
pip install tensorflow
# 国内服务器
pip install -i https://mirrors.aliyun.com/pypi/simple/ tensorflow   或者 -i https://pypi.tuna.tsinghua.edu.cn/simple

更改protoc版本

在接下来搭建环境的时候会出现Expected “required”, “optional”, or “repeated”.的错误,为了避免,我们先解决这个问题,我们把protoc提高到3.3

安装protoc

# 下载
wget wget https://github.com/google/protobuf/releases/download/v3.3.0/protoc-3.3.0-linux-x86_64.zip
# 解压
unzip protoc-3.3.0-linux-x86_64.zip
# 替换
sudo cp bin/protoc  /usr/bin/protoc
# 查看版本号
protoc --version

安装opencv

如果是国内主机执行如下命令

pip install --index https://pypi.tuna.tsinghua.edu.cn/simple opencv-python==3.4.2.16
pip install --index https://pypi.tuna.tsinghua.edu.cn/simple opencv-contrib-python==3.4.2.16

如果是亚马逊的服务器执行一下命令

pip install opencv-python==3.4.2.16
pip install opencv-contrib-python==3.4.2.16

安装tensorflow目标检测

这里我们先使用tensorflow的目标检测框架来做一下实验,在这个框架里面支持的都是比较老的目标检测算法,比如rcnn,ssd等,没有支持yolo,retinanet网络,在检测小目标的时候yolov3以上版本和retinanet要好的多。之后的人间检测我们会retinanet和yolo分别实现,之后我们可以参考tensorflow目标检测框架里面的数据打包,和训练的一些代码
以后的操纵都是在我们之前创建的虚拟环境中做的

# 克隆项目到本地
git clone https://github.com/tensorflow/models.git
cd models/research
# Compile protos.
protoc object_detection/protos/*.proto --python_out=.
# Install TensorFlow Object Detection API.
cp object_detection/packages/tf2/setup.py .
python -m pip install --use-feature=2020-resolver .
# Test the installation.
python object_detection/builders/model_builder_tf2_test.py

如果出现如下内容就表明环境搭建成功
Ran 20 tests in 58.297s

简单了解一下目标检测的框架

  • 1.数据打包工具:/models/research/object_detection/dataset_tools 下的文件为将voc数据打包成可训练数据,我们可以根据其中的 create_pascal_tf_record.py 来修改成我们需要的
  • 2.label map 文件:/models/research/object_detection/data 下的文件为各种label map的文件,我们用到face_label_map.pbtxt
  • 3.训练网络结构文件:/models/research/object_detection/model_main.py 为训练数据时候搭建网络结构的文件,这个文件不用修改
  • 4.网络配置文件:/models/research/object_detection/samples/configs/ssd_resnet50_v1_fpn_shared_box_predictor_640x640_coco14_sync.config 为网络的配置文件,我们根据 进行修改
  • 5.搭建网络文件:/models/research/object_detection/model_lib.py 搭建具体的网络
  • 6.网络核心代码://models/research/object_detection/builders/model_builder.py 搭建网络的核心代码 build函数,这里需要注意,tf1和tf2支持的模型是不一样的,这里我们用的模型是ssd_resnet50_v1_fpn_keras,这个在修改4网络配置文件的时候用到
  • 7.生成pb文件:/models/research/object_detection/export_inference_grapy.h
  • 8.测试模型:

训练前的准备

将widerface数据生成voc数据代码

我的数据集和目录/home/wxf/work/dataset/widerface
目录结构如下
在这里插入图片描述
代码如下

代码地址generate_voc.py

数据打包

在/models/research/object_detection/dataset_tools目录下创建
create_face_tf_record.py

命令格式

# 数据打包命令
# train
python object_detection/dataset_tools/create_face_tf_record.py \
        --data_dir=/home/wxf/work/dataset \
        --year=widerface \
        --set=train \
        --output_path=/home/wxf/work/dataset/widerface/TF_data/train.record

# val
python object_detection/dataset_tools/create_face_tf_record.py \
        --data_dir=/home/wxf/work/dataset \
        --year=widerface \
        --set=val \
        --output_path=/home/wxf/work/dataset/widerface/TF_data/val.record

配置文件修改

下载预训练模型
https://github.com/tensorflow/models/blob/master/research/object_detection/g3doc/tf2_detection_zoo.md
中的下面的与训练模型
SSD ResNet50 V1 FPN 640x640 (RetinaNet50)

/home/wxf/work/face_identify/models/research/object_detection/configs/tf2/ssd_resnet50_v1_fpn_640x640_coco17_tpu-8-face.config
我们在/home/wxf/work/face_identify/models/research/object_detection/configs/tf2/目录下参考ssd_resnet50_v1_fpn_640x640_coco17_tpu-8.config 创建ssd_resnet50_v1_fpn_640x640_coco17_tpu-8-face.config
根据注释修改自己的参数

训练命令 注意:tf2要用model_main_tf2.py
在/home/wxf/work/dataset/widerface/ 下创建resnet50v1-fpn目录

# 训练命令 

python object_detection/model_main_tf2.py \
	--pipeline_config_path=/home/wxf/work/face_identify/models/research/object_detection/configs/tf2/ssd_resnet50_v1_fpn_640x640_coco17_tpu-8-face.config \
    --model_dir=/home/wxf/work/dataset/widerface/resnet50v1-fpn \
    --num_train_steps=1000 \
    --alsologtostder
    
# evaluation	
python object_detection/model_main_tf2.py \
    --pipeline_config_path=/home/wxf/work/face_identify/models/research/object_detection/configs/tf2/ssd_resnet50_v1_fpn_640x640_coco17_tpu-8-face.config \
    --model_dir=/home/wxf/work/dataset/widerface/resnet50v1-fpn \
    --checkpoint_dir=/home/wxf/work/dataset/widerface/resnet50v1-fpn \
    --alsologtostderr

python object_detection/exporter_main_v2.py \
    --input_type=image_tensor \
    --pipeline_config_path=/home/wxf/work/face_identify/models/research/object_detection/configs/tf2/ssd_resnet50_v1_fpn_640x640_coco17_tpu-8-face.config \
    --trained_checkpoint_dir=/home/wxf/work/dataset/widerface/resnet50v1-fpn/ \
    --output_directory=/home/wxf/work/dataset/widerface/resnet50v1-fpn/pb


# 生成pb文件
python object_detection/exporter_main_v2.py \
    --input_type=image_tensor \
    --pipeline_config_path=/home/wxf/work/face_identify/models/research/object_detection/configs/tf2/ssd_resnet50_v1_fpn_640x640_coco17_tpu-8-face.config \
    --trained_checkpoint_dir=/home/wxf/work/dataset/widerface/resnet50v1-fpn/ \
    --output_directory=/home/wxf/work/dataset/widerface/resnet50v1-fpn/pb
	

测试模型

tf2-test.py

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值