针对《图像语义分割(2)- SegNet》介绍的 SegNet 算法,主要参考官方项目主页,在 CamVid 数据集上做训练和测试
框架安装
官方 SegNet 包含两个部分,一个是 SegNet 框架,一个是修改的 Caffe
1)clone SegNet-Tutorial
git clone https://github.com/alexgkendall/SegNet-Tutorial.git SegNet
里面包含了 CamVid 的训练数据集
2)clone caffe-segnet
git clone https://github.com/TimoSaemann/caffe-segnet-cudnn5.git caffe-segnet
这里有不支持 cudnn v2 的 caffe-segnet
3)将 caffe-segnet 移到 SegNet 里面,文件树如图1所示
图1. SegNet 的代码框架
数据准备及训练
1)训练前的数据准备
- 修改 CamVid/train.txt 和 CamVid/test.txt 里面的图片路径换成绝对路径
- 修改 Models/segnet_train.prototxt 和 Models/segnet_inference.prototxt 第一层的 data 路径为绝对路径,batch_size 按显卡能力调整
- 修改 Models/segnet_solver.protxt 修改 snapshot_prefix 为绝对路径
- 编写训练脚本 train_it.sh
#!/bin/bash
./caffe-segnet-cudnn5/build/tools/caffe train -gpu 0 -solver Models/segnet_solver.prototxt
2)编译 caffe-segnet 并开始训练
- 修改 Makefile.config,取消 USE_CUDNN 和 WITH_PYTHON_LAYER 注释;添加 hdf5 的路径
# Whatever else you find you need goes here.
INCLUDE_DIRS := $(PYTHON_INCLUDE) /usr/local/include /usr/include/hdf5/serial
LIBRARY_DIRS := $(PYTHON_LIB) /usr/local/lib /usr/lib /usr/lib/x86_64-linux-gnu /usr/lib/x86_64-linux-gnu/hdf5/serial
- make -j8 && make pycaffe
python train_it.py 开始训练
3)测试 webcam_demo (可选)
官方给了个 webcam 的 demo ,插上usb相机就能用