1、ValueError: bad marshal data (unknown type code)
原因:從他那里網上下載的h5文件不可用,需要自己重新生成
注:加載yolo.h5出問題時,主要重新生成yolo.h5替換原有的yolo.h5
yolo.h5生成:
1、下載yad2k:
git clone https://github.com/allanzelener/yad2k.git
2、下載 yolo.weights和yolo.cfg放到yad2k文件夾下:
yolo.cfg——》git clone https://github.com/pjreddie/darknet,然后打開darknet/cfg/yolov2.cfg,修改參數,將width和height都修改為608,最后復制到目錄yad2k下
weights文件——》進入網站https://pjreddie.com/darknet/yolov2/ ,找到here(258MB),點擊下載,下載完畢之后將weight文件拷貝到目錄yad2k下
3、cd yad2k
4、轉換為模型h5:
python ./yad2k.py yolov2.cfg yolov2.weights model_data/yolo.h5
5、在本地yad2k\model_data文件夾下找到yolo.h5,拷貝到作業model_data文件夾中即可
2、上述步驟在走到第四部時,遇到問題,解決avx2問題 完美解決Tensorflow不支持AVX2指令集問題
https://blog.csdn.net/beyond9305/article/details/95896135
不對:第二部描述的問題只是一個警告,不是主要問題,主要問題:
Using TensorFlow backend.
2019-11-20 20:37:10.030212: I d:\build\tensorflow\tensorflow-r1.9\tensorflow\core\platform\cpu_feature_guard.cc:141] Your CPU supports instructions that this TensorFlow binary was not compiled to use: AVX2
Traceback (most recent call last):
File "./yad2k.py", line 25, in <module>
from yad2k.models.keras_yolo import (space_to_depth_x2,
File "E:\吳恩達深度學習\cheliangshibie\yad2k\yad2k.py", line 25, in <module>
from yad2k.models.keras_yolo import (space_to_depth_x2,
ModuleNotFoundError: No module named 'yad2k.models'; 'yad2k' is not a package
我吧那一行的yad2k去掉,之后有注釋了兩行帶有相對路徑的錯誤,才把這個h5文件能下來
3、第三部按照文檔給的代碼,遇到了一個問題
為題如下:
運行scores, boxes, classes = yolo_eval(yolo_outputs, image_shape)時,報錯為InvalidArgumentError Traceback (most recent call last) ~/anaconda3/lib/python3.7/site-packages/tensorflow/python/framework/ops.py in _create_c_op(graph, node_def, inputs, control_inputs) 1658 try: -> 1659 c_op = c_api.TF_FinishOperation(op_desc) 1660 except errors.InvalidArgumentError as e: InvalidArgumentError: Dimensions must be equal, but are 2 and 80 for 'mul_12' (op: 'Mul') with input shapes: [?,?,?,5,2], [?,?,?,5,80]
解決方法:
將yolo_outputs = yolo_head(yolo_model.output, anchors, len(class_names))這句代碼改為: yolo_outputs = yolo_head(yolo_model.output, anchors, len(class_names)) print(str(yolo_outputs)) box_xy,box_wh,box_confidence,box_class_probs = yolo_outputs yolo_outputs = (box_confidence,box_xy,box_wh,box_class_probs) print(str(box_confidence)) print(str(box_xy)) print(str(box_wh)) print(str(box_class_probs)) print(str(yolo_outputs)) 報錯原因是模型中幾個參數的排列順序變了,從print結果就能看出來
這樣程序就能完整的運行出來,在out中可以看到倍圈出的圖像。