1.拉取镜像
镜像地址:juliojj/cuda9-cudnn7-p3-tf1.12
该镜像为cuda9,cudnn7,python3.5,tensorflow-gpu==1.12.0的环境。
复制其tag,拉取镜像:
2.创建容器
docker run -it --runtime=nvidia --name=liukongling-tensorflow-gpu -p 13001:8888 -p 13002:6006 -p 13003:8008 -v /home/liukongling:/liukongling docker.io/juliojj/cuda9-cudnn7-p3-tf1.12:latest
其中:name:可自己进行更换
/home/liukongling:/liukongling:可放置自己想要的位置
docker.io/juliojj/cuda9-cudnn7-p3-tf1.12:latest:镜像名称
容器创建成功,并已进入
3.模型训练
由于tensorflow-SSD之前在win版本上运行过,因此所需的文件已有:
若不清楚,可参考:
SSD-Tensorflow 目标检测(自定义数据集(VOC2007格式))
SSD-Tensorflow 目标检测(VOC2007)
根据网上的指导,创建train_ssd_network.sh如下:
DATASET_DIR=/liukongling/SSD-Tensorflow-master/tfrecords_/
TRAIN_DIR=/liukongling/SSD-Tensorflow-master/train_model/
CHECKPOINT_PATH=/liukongling/SSD-Tensorflow-master/checkpoints/vgg_16.ckpt
python3 /liukongling/SSD-Tensorflow-master/train_ssd_network.py
train_dir=${TRAIN_DIR}
dataset_dir=${DATASET_DIR}
dataset_name=pascalvoc_2007
dataset_split_name=train
model_name=ssd_300_vgg
checkpoint_path=${CHECKPOINT_PATH}
checkpoint_model_scope=vgg_16
checkpoint_exclude_scopes=ssd_300_vgg/conv6,ssd_300_vgg/conv7,ssd_300_vgg/block8,ssd_300_vgg/block9,ssd_300_vgg/block10,ssd_300_vgg/block11,ssd_300_vgg/block4_box,ssd_300_vgg/block7_box,ssd_300_vgg/block8_box,ssd_300_vgg/block9_box,ssd_300_vgg/block10_box,ssd_300_vgg/block11_box
trainable_scopes=ssd_300_vgg/conv6,ssd_300_vgg/conv7,ssd_300_vgg/block8,ssd_300_vgg/block9,ssd_300_vgg/block10,ssd_300_vgg/block11,ssd_300_vgg/block4_box,ssd_300_vgg/block7_box,ssd_300_vgg/block8_box,ssd_300_vgg/block9_box,ssd_300_vgg/block10_box,ssd_300_vgg/block11_box
save_summaries_secs=60
save_interval_secs=600
weight_decay=0.0005
optimizer=adam
learning_rate=0.001
learning_rate_decay_factor=0.94
batch_size=24
gpu_memory_fraction=0.9
可是运行该.sh文件一直找不到train_ssd_network.py,因此我直接在该.py中进行更改:
可根据环境参数进行修改即可
然后,进入train_ssd_network.py的路径:
运行如上代码即可进行训练。
PS:若想运行.sh文件,可参照SSD目标检测:tensorflow 版本调试以及出现错误的解决方法
4.测试图片
首先在容器中安装jupyter并配置文件,设置密码:
pip install jupyter notebook #安装jupyter
jupyter notebook --generate -config #生成配置文件
jupyter notebook password #生成登录密码
jupyter-notebook --ip 0.0.0.0 --allow-root #打开jupyter
或者配置成功后,直接在浏览器输入:ip:容器端口号(比如我这里是 192.168.1.101:14001),可以进行代码运行及修改。
进入jupyter,打开notebooks/ssd_notebook.ipynb:
将以上两处改为你的文件的绝对路径即可。
点击cell/run all进行测试,测试结果如下:
运行过程中遇到的问题:
运行ssd_notebook.ipynb时出现
“ModuleNotFoundError: No module named ‘nets’”
网上提供的方法对于我的情况不适合,我的问题出现在该文件的路径问题:
打开该文件可以发现网址中的路径中出现了两次notebooks。
解决办法:将notebooks文件夹下的ssd_notebook.ipynb直接拷贝到主目录SSD-Tensorflow-master下,然后在主目录下打开这个文件ssd_notebook.ipynb,这个时候的网址变为下图所示,再继续在这文件上执行。
详情可见:深度学习文章4:训练自己模型的SSD完整详细步骤