原因:
1 .主要想提高识别速度(减小识别类别时) ) ) ) )。
2 .减小数据库大小
3 .消除不想要的类别
4 .仍然想使用官方的weight (()比我自己训练的更准确() ) ) ) ) ) ) ) ) ) )
由于对keras不熟悉,不知道如何在convert.py时直接从数据库阉割
过程:
yolo3无论是视频还是图像检查都调用yolo.py的detect_image
在yolo.py中,detect_image关于类别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__调用) )的
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 )
返回盒、scores、classes
的yolo_eval(yolo3的model.py ) )的下一段中,添加if语句即可)第2行被注释掉了) ) )。
forcinrange(num_classes ) :
#if c==32: #32-sports ball 32是与model_data/coco_classes.txt对应的行减1 (从0开始)
# todo : usekerasbackendinsteadoftf。
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 .数据库中的数据相同,只是减少了查询次数,效果稍好,但不明显
2 .因为想用官方的微信,所以想阉割官方的微信:
测试修改了coco_classes.txt和相应yolov3.cfg下三个yolo下的classes(80-3 )
重新生成yolo.h5文件
实行.
错误在yolo.py上
self.yolo _ model.layers [-1 ].output _ shape [-1 ]==num _ anchors/len (self.yolo _ model.output ) )
调试程序为以下:
self.yolo _ model.layers [-1 ].output _ shape [-1 ]-255
num_anchors-9
len(self.yolo_model.output )-3
(num_classes5(-85#num_classes是coco_classes.txt下的类别数
不知道self.yolo _ model.layers [-1 ].output _ shape [-1 ]是什么,怎么训练都是255
随意删除这句话阉割数据库失败了