原因:
- 1.主要是想加快識別速度(在減小識別類別的情況下)
- 2.減小數(shù)據(jù)庫大小
- 3.去掉不想要的類別
- 4.仍然想用官方的weight(比我自己訓(xùn)練的精準)
- 5.因為對keras不熟, 不知道怎么在convert.py時直接從數(shù)據(jù)庫中閹割掉
過程:
yolo3不管是視頻還是圖片檢測 調(diào)用的都是 yolo.py 中的 detect_image
yolo.py
中 detect_image
關(guān)于 類別self.classes
由
out_boxes, out_scores, out_classes = self.sess.run(
[self.boxes, self.scores, self.classes],
feed_dict={
self.yolo_model.input: image_data,
self.input_image_shape: [image.size[1], image.size[0]],
K.learning_phase(): 0
})
generate
(__init__
調(diào)用)中的
boxes, scores, classes = yolo_eval(self.yolo_model.output, self.anchors,
len(self.class_names), self.input_image_shape,
score_threshold=self.score, iou_threshold=self.iou)
return boxes, scores, classes
中的yolo_eval
(位于yolo3中的 model.py
)中的下一段, 添加一條if語句即可(第二行注釋掉的)
for c in range(num_classes):
#if c == 32: #32->sports ball 32是 model_data/coco_classes.txt 對應(yīng)的行減一(從0開始)
# TODO: use keras backend instead of tf.
class_boxes = tf.boolean_mask(boxes, mask[:, c])
class_box_scores = tf.boolean_mask(box_scores[:, c], mask[:, c])
nms_index = tf.image.non_max_suppression(
class_boxes, class_box_scores, max_boxes_tensor, iou_threshold=iou_threshold)
class_boxes = K.gather(class_boxes, nms_index)
class_box_scores = K.gather(class_box_scores, nms_index)
classes = K.ones_like(class_box_scores, 'int32') * c
boxes_.append(class_boxes)
scores_.append(class_box_scores)
classes_.append(classes)
綜上在yolo3/model.py
213 行下添加if判斷即可
ps: 作者還寫了注釋 use keras backend instead of tf
看來想脫離tf
啊
ps:
1.數(shù)據(jù)庫中數(shù)據(jù)一樣是有的, 只是減少了查詢次數(shù), 有點點效果, 但是并不明顯
2.因為想用官方的weight, 曾嘗試閹割官方weight:
- 測試修改了 coco_classes.txt 和對應(yīng)的 yolov3.cfg 下的3個yolo下的classes(80->3)
- 重新生成yolo.h5 文件
- 運行...
報錯位于yolo.py
self.yolo_model.layers[-1].output_shape[-1] == num_anchors/len(self.yolo_model.output) * (num_classes + 5)
debug 如下:
self.yolo_model.layers[-1].output_shape[-1] ->255
num_anchors->9
len(self.yolo_model.output) ->3
(num_classes + 5)->85 # num_classes 是 coco_classes.txt下的類別個數(shù)
不清楚self.yolo_model.layers[-1].output_shape[-1] 是什么東西, 怎么訓(xùn)練都是255
不敢亂刪這句話 閹割數(shù)據(jù)庫失敗