Commit 9383740f authored by Yuxin Wu's avatar Yuxin Wu

update docs

parent b892867c
...@@ -3,7 +3,7 @@ An issue has to be one of the following: ...@@ -3,7 +3,7 @@ An issue has to be one of the following:
2. Feature Requests 2. Feature Requests
3. Usage Questions 3. Usage Questions
Any unexpected problems: __PLEASE ALWAYS INCLUDE__: For any unexpected problems, __PLEASE ALWAYS INCLUDE__:
1. What you did: 1. What you did:
+ If you're using examples: + If you're using examples:
+ What's the command you run: + What's the command you run:
...@@ -17,7 +17,7 @@ Any unexpected problems: __PLEASE ALWAYS INCLUDE__: ...@@ -17,7 +17,7 @@ Any unexpected problems: __PLEASE ALWAYS INCLUDE__:
4. Your environment: 4. Your environment:
+ Python version. + Python version.
+ TF version: `python -c 'import tensorflow as tf; print(tf.GIT_VERSION, tf.VERSION)'`. + TF version: `python -c 'import tensorflow as tf; print(tf.GIT_VERSION, tf.VERSION)'`.
+ Tensorpack version: `python3 -c 'import tensorpack; print(tensorpack.__version__)'`. + Tensorpack version: `python -c 'import tensorpack; print(tensorpack.__version__)'`.
You can install Tensorpack master by `pip install -U git+https://github.com/ppwwyyxx/tensorpack.git`.: You can install Tensorpack master by `pip install -U git+https://github.com/ppwwyyxx/tensorpack.git`.:
5. About efficiency, PLEASE first read http://tensorpack.readthedocs.io/en/latest/tutorial/performance-tuning.html 5. About efficiency, PLEASE first read http://tensorpack.readthedocs.io/en/latest/tutorial/performance-tuning.html
......
# Faster-RCNN / Mask-RCNN on COCO # Faster-RCNN / Mask-RCNN on COCO
This example provides a minimal (only 1.6k lines) but faithful implementation of the following papers: This example provides a minimal (only 1.6k lines) and faithful implementation of the following papers:
+ [Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks](https://arxiv.org/abs/1506.01497) + [Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks](https://arxiv.org/abs/1506.01497)
+ [Feature Pyramid Networks for Object Detection](https://arxiv.org/abs/1612.03144) + [Feature Pyramid Networks for Object Detection](https://arxiv.org/abs/1612.03144)
...@@ -8,8 +8,8 @@ This example provides a minimal (only 1.6k lines) but faithful implementation of ...@@ -8,8 +8,8 @@ This example provides a minimal (only 1.6k lines) but faithful implementation of
## Dependencies ## Dependencies
+ Python 3; TensorFlow >= 1.4.0 (>=1.6.0 recommended due to a TF bug); + Python 3; TensorFlow >= 1.4.0 (>=1.6.0 recommended due to a TF bug);
+ [pycocotools](https://github.com/pdollar/coco/tree/master/PythonAPI/pycocotools), OpenCV. + [pycocotools](https://github.com/pdollar/coco/tree/master/PythonAPI/pycocotools), OpenCV.
+ Pre-trained [ResNet model](http://models.tensorpack.com/ResNet/) from tensorpack model zoo. + Pre-trained [ImageNet ResNet model](http://models.tensorpack.com/ResNet/) from tensorpack model zoo.
+ COCO data. It assumes the following directory structure: + COCO data. It needs to have the following directory structure:
``` ```
DIR/ DIR/
annotations/ annotations/
...@@ -44,9 +44,9 @@ Predict on an image (and show output in a window): ...@@ -44,9 +44,9 @@ Predict on an image (and show output in a window):
``` ```
Evaluate the performance of a model on COCO, and save results to json. Evaluate the performance of a model on COCO, and save results to json.
(Pretrained models can be downloaded in [model zoo](http://models.tensorpack.com/FasterRCNN): (Trained COCO models can be downloaded in [model zoo](http://models.tensorpack.com/FasterRCNN):
``` ```
./train.py --evaluate output.json --load /path/to/model ./train.py --evaluate output.json --load /path/to/COCO-ResNet50-MaskRCNN.npz
``` ```
## Results ## Results
......
...@@ -70,19 +70,6 @@ def get_model(): ...@@ -70,19 +70,6 @@ def get_model():
class DetectionModel(ModelDesc): class DetectionModel(ModelDesc):
def inputs(self):
ret = [
tf.placeholder(tf.float32, (None, None, 3), 'image'),
tf.placeholder(tf.int32, (None, None, config.NUM_ANCHOR), 'anchor_labels'),
tf.placeholder(tf.float32, (None, None, config.NUM_ANCHOR, 4), 'anchor_boxes'),
tf.placeholder(tf.float32, (None, 4), 'gt_boxes'),
tf.placeholder(tf.int64, (None,), 'gt_labels')] # all > 0
if config.MODE_MASK:
ret.append(
tf.placeholder(tf.uint8, (None, None, None), 'gt_masks')
) # NR_GT x height x width
return ret
def preprocess(self, image): def preprocess(self, image):
image = tf.expand_dims(image, 0) image = tf.expand_dims(image, 0)
image = image_preprocess(image, bgr=True) image = image_preprocess(image, bgr=True)
...@@ -176,6 +163,19 @@ class DetectionModel(ModelDesc): ...@@ -176,6 +163,19 @@ class DetectionModel(ModelDesc):
class ResNetC4Model(DetectionModel): class ResNetC4Model(DetectionModel):
def inputs(self):
ret = [
tf.placeholder(tf.float32, (None, None, 3), 'image'),
tf.placeholder(tf.int32, (None, None, config.NUM_ANCHOR), 'anchor_labels'),
tf.placeholder(tf.float32, (None, None, config.NUM_ANCHOR, 4), 'anchor_boxes'),
tf.placeholder(tf.float32, (None, 4), 'gt_boxes'),
tf.placeholder(tf.int64, (None,), 'gt_labels')] # all > 0
if config.MODE_MASK:
ret.append(
tf.placeholder(tf.uint8, (None, None, None), 'gt_masks')
) # NR_GT x height x width
return ret
def build_graph(self, *inputs): def build_graph(self, *inputs):
is_training = get_current_tower_context().is_training is_training = get_current_tower_context().is_training
if config.MODE_MASK: if config.MODE_MASK:
...@@ -256,11 +256,10 @@ class ResNetC4Model(DetectionModel): ...@@ -256,11 +256,10 @@ class ResNetC4Model(DetectionModel):
mask_logits = maskrcnn_upXconv_head( mask_logits = maskrcnn_upXconv_head(
'maskrcnn', fg_feature, config.NUM_CLASS, num_convs=0) # #fg x #cat x 14x14 'maskrcnn', fg_feature, config.NUM_CLASS, num_convs=0) # #fg x #cat x 14x14
matched_gt_masks = tf.gather(gt_masks, fg_inds_wrt_gt) # nfg x H x W
target_masks_for_fg = crop_and_resize( target_masks_for_fg = crop_and_resize(
tf.expand_dims(matched_gt_masks, 1), tf.expand_dims(gt_masks, 1),
fg_sampled_boxes, fg_sampled_boxes,
tf.range(tf.size(fg_inds_wrt_gt)), 14, fg_inds_wrt_gt, 14,
pad_border=False) # nfg x 1x14x14 pad_border=False) # nfg x 1x14x14
target_masks_for_fg = tf.squeeze(target_masks_for_fg, 1, 'sampled_fg_mask_targets') target_masks_for_fg = tf.squeeze(target_masks_for_fg, 1, 'sampled_fg_mask_targets')
mrcnn_loss = maskrcnn_loss(mask_logits, fg_labels, target_masks_for_fg) mrcnn_loss = maskrcnn_loss(mask_logits, fg_labels, target_masks_for_fg)
...@@ -408,11 +407,10 @@ class ResNetFPNModel(DetectionModel): ...@@ -408,11 +407,10 @@ class ResNetFPNModel(DetectionModel):
mask_logits = maskrcnn_upXconv_head( mask_logits = maskrcnn_upXconv_head(
'maskrcnn', roi_feature_maskrcnn, config.NUM_CLASS, 4) # #fg x #cat x 28 x 28 'maskrcnn', roi_feature_maskrcnn, config.NUM_CLASS, 4) # #fg x #cat x 28 x 28
matched_gt_masks = tf.gather(gt_masks, fg_inds_wrt_gt) # fg x H x W
target_masks_for_fg = crop_and_resize( target_masks_for_fg = crop_and_resize(
tf.expand_dims(matched_gt_masks, 1), tf.expand_dims(gt_masks, 1),
fg_sampled_boxes, fg_sampled_boxes,
tf.range(tf.size(fg_inds_wrt_gt)), 28, fg_inds_wrt_gt, 28,
pad_border=False) # fg x 1x28x28 pad_border=False) # fg x 1x28x28
target_masks_for_fg = tf.squeeze(target_masks_for_fg, 1, 'sampled_fg_mask_targets') target_masks_for_fg = tf.squeeze(target_masks_for_fg, 1, 'sampled_fg_mask_targets')
mrcnn_loss = maskrcnn_loss(mask_logits, fg_labels, target_masks_for_fg) mrcnn_loss = maskrcnn_loss(mask_logits, fg_labels, target_masks_for_fg)
......
...@@ -38,7 +38,7 @@ __all__ = ['SimpleTrainer', ...@@ -38,7 +38,7 @@ __all__ = ['SimpleTrainer',
def _int_to_range(x): def _int_to_range(x):
if isinstance(x, int): if isinstance(x, int):
assert x > 0, x assert x > 0, "Argument cannot be {}!".format(x)
return list(range(x)) return list(range(x))
return x return x
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment