《Instance-aware Semantic Segmentation via Multi-task Network Cascades》(MNC),用自己的数据运行

这篇博文详述了如何使用《Instance-aware Semantic Segmentation via Multi-task Network Cascades》(MNC)论文的代码在个人数据集上运行。首先,介绍了环境搭建,包括下载代码、安装依赖、编译和运行demo。接着,通过创建自定义训练脚本和配置文件,调整数据输入格式以适应MNC代码。博主提供了修改`imdb.py`、`my_dataset.py`等文件的步骤,并给出了训练模型的流程。最后,文章强调了这是理解代码工作原理和学习过程的记录。
摘要由CSDN通过智能技术生成

这篇博文主要对《Instance-aware Semantic Segmentation via Multi-task Network Cascades》论文的代码用自己的数据运行,数据格式与原代码所需的格式一致。只是基础的利用代码,从这个过程里能了解代码的运行框架。

对这篇论文的理解参见:http://blog.csdn.net/u011070171/article/details/53071216

代码链接:https://github.com/daijifeng001/MNC

1.代码环境搭建

   根据github上的代码说明,进行操作。

   1)下载代码   

git clone --recursive https://github.com/daijifeng001/MNC.git

   2)安装python依赖包。caffe环境搭建好了的话,这些依赖包都会装过了,没有装的后面再补全。

      Python packages: numpy, scipy, cython,python-opencv, easydict, yaml.

   3)进入lib目录下进行编译。

cd $MNC_ROOT/lib
make
    4)进入/MNC/caffe-mnc/目录,更改Makefile.config文件的内容如下:

# In your Makefile.config, make sure to have this line uncommented
WITH_PYTHON_LAYER := 1
# CUDNN is recommended in building to reduce memory footprint
USE_CUDNN := 1
   5)进入caffe-mnc目录进行编译。

cd $MNC_ROOT/caffe-mnc
# If you have all of the requirements installed
# and your Makefile.config in place, then simply do:
make -j8 && make pycaffe

   6)运行代码的demo

     下载训练好的模型:

./data/scripts/fetch_mnc_model.sh
     运行demo:

cd $MNC_ROOT
./tools/demo.py
    7) 结果

        我们可以在/MNC/data/demo/目录下看到图片分割的结果,原图以及运行demo后的结果图。



2. 用自己的数据

   这篇博文只介绍到不更改原代码的数据输入格式进行代码运行,模型训练,用自己想要的数据格式进行代码运行后面再总结一下。不更改原代码数据输入格式,用自己的数据进行代码运行能让我们整体了解下代码运行流程。

   1)运行入口在/MNC/experiments/scripts/目录里,新建一个my_train.sh文件,内容如下(是参考同目录下的shell文件写的):

        路径最好用绝对路径,涉及个人隐私,贴出来的代码为相对路径的。。

#!/bin/bash
# Usage:
# ./experiments/scripts/my_train.sh  [--set ...]
# Example:
# ./experiments/scripts/mnc_5stage.sh \
#   --set EXP_DIR foobar RNG_SEED 42 TRAIN.SCALES "[400,500,600,700]"

set -x
set -e

export PYTHONUNBUFFERED="True"


ITERS=20
DATASET_TRAIN=my_train
DATASET_TEST=my_test

LOG="/MNC/experiments/logs/znlog.txt"
exec &> >(tee -a "$LOG")
echo Logging output to "$LOG"

NET_INIT=/MNC/data/mnc_model/mnc_model.caffemodel.h5
time /MNC/tools/train_net.py --gpu 0 \
  --solver /MNC/models/VGG16/my_train/solver.prototxt \
  --weights ${NET_INIT} \
  --imdb ${DATASET_TRAIN} \
  --iters ${ITERS} \
  --cfg /MNC/experiments/cfgs/VGG16/my_train.yml
  

   2)shell文件里调用/MNC/tools/train_net.py文件。

       训练参数说明:

  --solver 求解器文件
  --imdb 图像数据库
  --iters 训练迭代次数
  --cfg    配置文件,可以在这个文件里设置EXP_DIR: mytrain,这为训练结果的保存目录

  my_train.yml内容:

EXP_DIR: mytrain
MASK_SIZE: 21
TRAIN:
  RPN_POST_NMS_TOP_N: 300
  IMS_PER_BATCH: 1
  BBOX_NORMALIZE_TARGETS_PRECOMPUTED: True

   3)train_net.py里调用attach_roidb(args.imdb_name)和attach_maskdb(args.imdb_name),分别获取imdb和maskdb.

       attach_roidb()和attach_maskdb()函数分别在/MNC/lib/db/roidb.py和,/MNC/lib/db/roidb.py文件里。

       attach_roidb()和attach_maskdb()函数均调用imdb.py里的函数。

       我们在 imdb.py 里添加自己的数据库,imdb.py内容如下(路径仍是绝对路径,给出的是相对路径):

# --------------------------------------------------------
# Multitask Network Cascade
# Modified from py-faster-rcnn (https://github.com/rbgirshick/py-faster-rcnn)
# Copyright (c) 2016, Haozhi Qi
# Licensed under The MIT License [see LICENSE for details]
# --------------------------------------------------------

from datasets.pascal_voc_det import PascalVOCDet
from datasets.pascal_voc_seg import PascalVOCSeg
from datasets.my_dataset_seg import MyDatasetSeg

__sets = {
    'voc_2012_seg_train': (lambda: PascalVOCSeg('train', '2012', '/home/zhuangni/code/idear2/MNC/data/VOCdevkitSDS/')),
    'voc_2012_seg_val': (lambda: PascalVOCSeg('val', '2012', '/home/zhuangni/code/idear2/MNC/data/VOCdevkitSDS')),
    'voc_2007_trainval': (lambda: PascalVOCDet('trainval', '2007')),
    'voc_2007_test': (lambda: PascalVOCDet('test', '2007')),
    'my_train': (lambda: MyDatasetSeg('train', '/MNC/data/MyDataset')),
    'my_test': (lambda: MyDatasetSeg('test', '/MNC/data/MyDataset'))
}


def get_imdb(name):
    """ Get an imdb (image database) by name.
    """
    if not __sets.has_key(name):
        raise KeyError('Unknown dataset: {}'.format(name))
    return __sets[name]()


def list_imdbs():
    return __sets.keys()

   4)在imdb.py里,

from datasets.my_dataset_seg import MyDatasetSeg
       这是加载数据库的类。
       我们在/MNC/lib/datasets/目录下创建加载数据库主要有三个类:my_dataset.py,my_dataset_det.py,my_dataset_seg.py。这三个文件的内容分别可以拷贝对应的pascal_voc.py,pascal_voc_det.py,pascal_voc_seg.py并进行修改。

       其中,  my_dataset.py可不修改。pascal_voc.py,pascal_voc_det.py和pascal_voc_seg.py主要修改路径及类名问题。

       代码里的cache_file为后面生成的。

       数据库主要是参考VOC 2012 dataset建立的。运行如下命令可获取该数据库,数据库在/MNC/data/VOCdevkitSDS/里:

./data/scripts/fetch_sbd_data.sh
      照此,我们建立自己的数据库:


       my_dataset_det.py内容:


                
评论 22
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值