java - 为什么某些对象检测神经网络在 OpenCV 4.1.0 中返回全零?
问题描述
我在OpenCV 4.1.
从 Java/Scala 评估 0 中的几个神经网络时遇到问题。网络为鱼自行车图像以及其他图像返回全零。我观察到这一点:
- COCO SSD512* https://github.com/weiliu89/caffe/tree/ssd
- fast_rcnn_inception_v2_coco,ssd_mobilenet_v2_coco https://github.com/tensorflow/models/blob/master/research/object_detection/g3doc/detection_model_zoo.md
检测适用于 YOLOv3-spp 和 YOLOv3-tiny https://pjreddie.com/darknet/yolo/。
这个 dnn 烹饪有什么问题?
// The reproduce in Scala REPL you need a hack:
def loadLibraryScalaREPL(libraryName: String): Unit = {
val loadLibrary0 = Runtime.getRuntime.getClass.getDeclaredMethods()(4)
loadLibrary0.setAccessible(true)
loadLibrary0.invoke(Runtime.getRuntime, scala.tools.nsc.interpreter.IMain.getClass, libraryName)
}
loadLibraryScalaREPL(org.opencv.core.Core.NATIVE_LIBRARY_NAME)
// To load in Java/Scala application just use System.loadLibrary.
import org.opencv.core.{Scalar, Size}
import org.opencv.dnn.Dnn
import org.opencv.imgcodecs.Imgcodecs
val image = Imgcodecs.imread("/root/fish-bike.jpg")
val net = Dnn.readNetFromCaffe("/tmp/VGG_coco_SSD_512x512_iter_360000.prototxt", "/tmp/VGG_coco_SSD_512x512_iter_360000.caffemodel")
val blob = Dnn.blobFromImage(image, 1/125.0, new Size(512, 512), new Scalar(104,117,123), true)
net.setInput(blob)
val layer = net.forward()
val values = new Array[Float](layer.total().toInt)
layer.get(0,0, values)
values.grouped(7).foreach(x => println(x.toList))
解决方案
推荐阅读
- draftjs - 如何将内容状态推送到当前编辑器状态?editorState.push 方法似乎对我不起作用?
- java - Windows 10 的 Jhipster 编译错误
- apache-kafka - 如何让 Kafka 消费者订阅新的分区
- aws-lambda - 在 AWS codedeploy 挂钩中解析状态回调
- python - Pandas 中的条件颜色格式
- python - 动画 matplotlib 的 Poly3DCollection
- ios - NavigationLink 和 PresentationLink 错误
- c++ - 'updateMenu' 未在此范围内声明
- sql-server - 我对“MAKH”有疑问,SQL 不断报告该列无效
- elasticsearch - 如何在非嵌套字段匹配另一个嵌套字段的情况下按嵌套值排序?