Skip to content

Commit 1f49a8b

Browse files
committed
new version
1 parent 8509268 commit 1f49a8b

24 files changed

+1356
-0
lines changed

data/demo/000013.jpg

131 KB
Loading

data/demo/000456.jpg

103 KB
Loading

data/demo/000542.jpg

113 KB
Loading

data/demo/004545.jpg

120 KB
Loading

run.sh

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
GPU_ID=0
2+
CUDA_VISIBLE_DEVICES=${GPU_ID} python3 ./tools/demo.py --dataset pascal_voc --language en
3+

tensorboard.sh

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
tensorboard --logdir=tensorboard/res101/voc_2007_trainval/ --port=7003

test/anchor_test.py

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
import tensorflow as tf
2+
import numpy as np
3+
from layer_utils import snippets
4+
5+
6+
if __name__ == '__main__':
7+
anchors, length = snippets.generate_anchors_pre(40, 60, 16)
8+
print(anchors[:32, :])
9+
print(length)

test/ckpt_file_read_test.py

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
import tensorflow as tf
2+
from tensorflow.python.tools.inspect_checkpoint import print_tensors_in_checkpoint_file
3+
from tensorflow.python import pywrap_tensorflow
4+
5+
6+
if __name__ == '__main__':
7+
# ckpt_path = '/home/aurora/workspaces/PycharmProjects/tensorflow/tf_rfcn/output/res101/voc_2007_trainval+voc_2012_' \
8+
# 'trainval/default/res101_faster_rcnn_iter_10.ckpt'
9+
# ckpt_path = '/home/aurora/workspaces/PycharmProjects/tensorflow/tf_rfcn/output/res101/voc_2007_trainval+voc_2012_' \
10+
# 'trainval/default/res101_faster_rcnn_iter_400000.ckpt'
11+
ckpt_path = '/home/aurora/pretrained_models/tensorflow_backbone_network/resnet_v1_50.ckpt'
12+
ckpt_path = '/home/aurora/workspaces/PycharmProjects/tensorflow/tf_rfcn/output/res101_global_local' \
13+
'/voc_2007_trainval+voc_2012_trainval/local_global_7721/res101_rfcn_local_global_iter_110000.ckpt'
14+
try:
15+
reader = pywrap_tensorflow.NewCheckpointReader(ckpt_path)
16+
var_to_shape_map = reader.get_variable_to_shape_map()
17+
count = 0
18+
for key in var_to_shape_map:
19+
# if 'rfcn_network/resnet_v1_101' in key and 'rfcn_network/resnet_v1_101/block' not in key:
20+
# if 'rpn_network/resnet_v1_101/block2/unit_1' in key:
21+
# if 'resnet_v1_101/conv1' in key:
22+
print(key)
23+
count += 1
24+
print(count)
25+
except Exception as e:
26+
print(str(e))

test/focal_loss_test.py

Lines changed: 105 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,105 @@
1+
import tensorflow as tf
2+
from tensorflow.python.ops import array_ops
3+
4+
slim = tf.contrib.slim
5+
6+
def focal_loss(onehot_labels, cls_preds,
7+
alpha=0.25, gamma=2.0, name=None, scope=None):
8+
"""Compute softmax focal loss between logits and onehot labels
9+
logits and onehot_labels must have same shape [batchsize, num_classes] and
10+
the same data type (float16, 32, 64)
11+
Args:
12+
onehot_labels: Each row labels[i] must be a valid probability distribution
13+
cls_preds: Unscaled log probabilities
14+
alpha: The hyperparameter for adjusting biased samples, default is 0.25
15+
gamma: The hyperparameter for penalizing the easy labeled samples
16+
name: A name for the operation (optional)
17+
Returns:
18+
A 1-D tensor of length batch_size of same type as logits with softmax focal loss
19+
"""
20+
with tf.name_scope(scope, 'focal_loss', [cls_preds, onehot_labels]) as sc:
21+
logits = tf.convert_to_tensor(cls_preds)
22+
onehot_labels = tf.convert_to_tensor(onehot_labels)
23+
24+
precise_logits = tf.cast(logits, tf.float32) if (
25+
logits.dtype == tf.float16) else logits
26+
onehot_labels = tf.cast(onehot_labels, precise_logits.dtype)
27+
predictions = tf.nn.sigmoid(logits)
28+
predictions_pt = tf.where(tf.equal(onehot_labels, 1), predictions, 1.-predictions)
29+
# add small value to avoid 0
30+
epsilon = 1e-8
31+
alpha_t = tf.scalar_mul(alpha, tf.ones_like(onehot_labels, dtype=tf.float32))
32+
alpha_t = tf.where(tf.equal(onehot_labels, 1.0), alpha_t, 1-alpha_t)
33+
losses = tf.reduce_sum(-alpha_t * tf.pow(1. - predictions_pt, gamma) * onehot_labels * tf.log(predictions_pt+epsilon),
34+
name=name, axis=1)
35+
return losses
36+
37+
38+
def focal_loss2(prediction_tensor, target_tensor, weights=None, alpha=0.25, gamma=2):
39+
r"""Compute focal loss for predictions.
40+
Multi-labels Focal loss formula:
41+
FL = -alpha * (z-p)^gamma * log(p) -(1-alpha) * p^gamma * log(1-p)
42+
,which alpha = 0.25, gamma = 2, p = sigmoid(x), z = target_tensor.
43+
Args:
44+
prediction_tensor: A float tensor of shape [batch_size, num_anchors,
45+
num_classes] representing the predicted logits for each class
46+
target_tensor: A float tensor of shape [batch_size, num_anchors,
47+
num_classes] representing one-hot encoded classification targets
48+
weights: A float tensor of shape [batch_size, num_anchors]
49+
alpha: A scalar tensor for focal loss alpha hyper-parameter
50+
gamma: A scalar tensor for focal loss gamma hyper-parameter
51+
Returns:
52+
loss: A (scalar) tensor representing the value of the loss function
53+
"""
54+
sigmoid_p = tf.nn.sigmoid(prediction_tensor)
55+
zeros = array_ops.zeros_like(sigmoid_p, dtype=sigmoid_p.dtype)
56+
pos_p_sub = array_ops.where(target_tensor >= sigmoid_p, target_tensor - sigmoid_p, zeros)
57+
neg_p_sub = array_ops.where(target_tensor > zeros, zeros, sigmoid_p)
58+
per_entry_cross_ent = - alpha * (pos_p_sub ** gamma) * tf.log(tf.clip_by_value(sigmoid_p, 1e-8, 1.0)) \
59+
- (1 - alpha) * (neg_p_sub ** gamma) * tf.log(tf.clip_by_value(1.0 - sigmoid_p, 1e-8, 1.0))
60+
return tf.reduce_mean(per_entry_cross_ent, axis=1)
61+
62+
63+
def focal_loss3(cls_score, label, num_classes):
64+
alpha_scale = 0.25
65+
gamma = 2
66+
epsilon = 1e-8
67+
label = tf.one_hot(label, depth=num_classes)
68+
cls_pred = tf.nn.sigmoid(cls_score)
69+
predictions_pt = tf.where(tf.equal(label, 1), cls_pred, 1 - cls_pred)
70+
alpha_t = tf.ones_like(label, dtype=tf.float32)
71+
alpha_t = tf.scalar_mul(alpha_scale, alpha_t)
72+
alpha_t = tf.where(tf.equal(label, 1.0), alpha_t, 1. - alpha_t)
73+
losses = tf.reduce_mean(-alpha_t * tf.pow(1 - predictions_pt, gamma) * tf.log(predictions_pt + epsilon), axis=1)
74+
return losses
75+
76+
77+
def regression_loss(pred_boxes, gt_boxes, weights):
78+
"""
79+
Regression loss (Smooth L1 loss: also known as huber loss)
80+
Args:
81+
pred_boxes: [# anchors, 4]
82+
gt_boxes: [# anchors, 4]
83+
weights: Tensor of weights multiplied by loss with shape [# anchors]
84+
"""
85+
loss = tf.losses.huber_loss(predictions=pred_boxes, labels=gt_boxes,
86+
weights=weights, scope='box_loss')
87+
return loss
88+
89+
90+
def test():
91+
logits = tf.convert_to_tensor([[0.2, 0.3, 0.4, 0.5], [0.5, 0.4, 0.3, 0.2]])
92+
logits_sigmoid = tf.nn.sigmoid(logits)
93+
labels = slim.one_hot_encoding([1, 2], 4)
94+
labels_vector = tf.constant([1, 2])
95+
bbox = tf.ones_like(logits)
96+
with tf.Session() as sess:
97+
print(sess.run(logits))
98+
print(sess.run(logits_sigmoid))
99+
print(sess.run(focal_loss(onehot_labels=labels, cls_preds=logits)))
100+
print(sess.run(focal_loss2(target_tensor=labels, prediction_tensor=logits)))
101+
print(sess.run(focal_loss3(cls_score=logits, label=labels_vector, num_classes=4)))
102+
print(sess.run(regression_loss(logits, bbox, tf.expand_dims(1./tf.convert_to_tensor([2, 3], dtype=tf.float32), 1))))
103+
sess.close()
104+
105+
test()

test/nms_test.py

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
import tensorflow as tf
2+
import numpy as np
3+
4+
if __name__ == '__main__':
5+
boxes_np = [[0, 0, 1, 1], [0, 0.1, 1, 1.1], [0, -0.1, 1, 0.9],
6+
[0, 10, 1, 11], [0, 10.1, 1, 11.1], [0, 100, 1, 101]]
7+
scores_np = [0.9, 0.75, 0.6, 0.95, 0.5, 0.3]
8+
max_output_size_np = 2
9+
iou_threshold_np = 0.5
10+
11+
boxes = tf.constant(boxes_np)
12+
scores = tf.constant(scores_np)
13+
max_output_size = tf.constant(max_output_size_np)
14+
# iou_threshold = tf.constant(iou_threshold_np, dtype=tf.float32)
15+
keep_index = tf.image.non_max_suppression(boxes, scores, max_output_size, iou_threshold_np)
16+
17+
sess = tf.Session()
18+
print(sess.run(keep_index))

0 commit comments

Comments
 (0)