在安卓系统中部署yolov5模型出现的问题,ncnn软件在手机上可以运行,但是不画框
reshape参数改了,yolov5ncnn_jni.cpp中的类别与对应Permute的参数也改了
参考gpt4:
结合自己分析给你如下建议:
您的yolov5模型没有正确转换为ncnn格式。您需要使用onnx-simplifier来简化您的onnx模型,然后使用ncnn提供的工具来将onnx模型转换为ncnn格式。
您的yolov5ncnn_jni.cpp文件没有正确修改。您需要根据您的模型和数据集的特点,修改其中的类别数、锚点、置信度阈值、nms阈值等参数。您也需要修改其中的YoloV5Focus类,以适应yolov5模型中的focus层。
您的Android Studio项目没有正确配置。您需要检查您的CMakeLists.txt文件是否指定了正确的ncnn路径,是否添加了yolov5ncnn_jni.cpp文件。您也需要检查您的AndroidManifest.xml文件是否添加了相机和存储权限。
引用 皆我百晓生 小程序回复内容作答:
在部署Yolov5模型时出现不画框的问题可能有多种原因。以下是一些可能的解决方法:
检查模型预处理与后处理过程是否正确,确保输入数据经过正确的预处理,并且后处理过程能够正确地解码预测结果。
检查绘制框的代码是否正确。在确认输入数据和模型输出都正确的情况下,检查代码中绘制框的逻辑是否正确,包括绘制框的位置、尺寸、颜色等参数是否正确。
确保绘制框的代码能够正确地与手机显示屏幕进行交互。可以尝试调整绘制框的方式,如使用其他的绘制方法或者在其他位置绘制框,以确定是否存在与屏幕交互的问题。
确保模型在手机上运行时产生了有效的预测结果。可以通过输出预测结果的方式验证模型是否正确地产生了预测结果。
检查相关参数是否正确设置。除了上述的预处理、后处理和绘制框的参数之外,还需要检查其他相关的参数,如模型的输入尺寸、阈值等是否正确设置。
如果以上方法都不能解决问题,可能需要进一步调试代码和模型,以确定具体的问题所在。
题主,这个问题我来替你解决(参考结合AI智能、文心一言),若有帮助,还望采纳,点击回答右侧采纳即可。
可能是因为ncnn模型预测后的输出结果与你所期望的输出结果不一样,导致画框时出现问题。你可以先尝试在计算机端运行模型,查看输出结果是否正确。
如果输出结果正确,那么问题可能出现在画框部分的代码中。你可以检查是否正确获取到了输出结果,并对输出结果进行解析绘制框的操作。
如果输出结果不正确,则需要检查模型的部署是否有问题,比如输入数据的大小、格式等是否与预期一致,或者模型的参数是否正确。
另外,你可以在代码中添加调试语句,打印出中间结果,帮助你找出问题所在。
如果您在安卓系统中部署 YOLOv5 模型时遇到问题,导致不绘制检测框,可能有几个原因需要排查。以下是一些可能的解决方案:
如果以上解决方案都没有解决问题,您可以尝试在社区或论坛上寻求更详细的帮助和支持,或者提供更多关于您的设备和代码的详细信息,以便更好地理解和解决问题。
援引讯飞星火:
这个问题可能是由于ncnn库在处理YOLOv5模型时,没有正确识别到类别信息导致的。你可以尝试以下方法来解决这个问题:
检查你的YOLOv5模型文件是否正确。确保模型文件没有损坏或者格式错误。
检查你的ncnn库版本是否与YOLOv5模型兼容。如果不兼容,你可能需要更新ncnn库或者使用不同版本的YOLOv5模型。
在yolov5ncnn_jni.cpp文件中,找到detection_layer
函数,然后找到detection_forward
函数。在这个函数中,你需要找到处理类别信息的代码部分。这部分代码可能类似于以下形式:
for (int i = 0; i < num; ++i) {
float* data = output_data + output_offset * stride;
for (int j = 0; j < size; ++j) {
float score = data[j];
if (score > thresh) {
int class_id = data[j * num_classes + 4];
// ...其他处理代码...
}
}
}
在这个代码中,class_id
变量就是从YOLOv5模型中提取的类别信息。你需要确保这个变量的值是正确的,并且与你期望的类别一致。
结合GPT给出回答如下请题主参考
关于部署yolov5模型在安卓系统上出现不画框的问题,您可以尝试检查以下几个方面:
确认模型预测输出结果是否与期望相符:您可以在ncnn运行输出中,查看模型的预测结果。将预测结果与期望的检测结果进行比对,如果存在偏差,则需要检查模型配置文件、模型训练数据集、预测代码等方面,找出问题所在。
检查坐标系是否正确:检查模型预测输出的坐标系,确保其和绘制框的坐标系一致。如果两个坐标系不一致,需要进行坐标系转换。
确认绘制框的代码是否正确:检查绘制框的代码实现是否正确。可以在代码中添加打印语句,输出参数的值,确保绘制框的参数设置正确。
确保绘制框的代码被正确调用:确认绘制框的代码被正确调用。您可以在调用绘制框的代码处添加断点,观察程序的执行流程,确认代码是否被正确执行。
希望以上建议对您有所帮助。
该回答通过自己思路及引用到GPTᴼᴾᴱᴺᴬᴵ搜索,得到内容具体如下:
根据您提供的信息,您在安卓系统中部署Yolov5模型时遇到了问题,即使用ncnn软件在手机上可以运行,但无法绘制边界框,并出现了一些错误消息。以下是对这些消息的一些解释和建议:
handleWindowFocusChanged mWindowFocusChanged false
:此消息表示窗口焦点发生了变化。通常情况下,这不会与绘制边界框的问题直接相关。find_blob_index_by_name 342 failed
和 find_blob_index_by_name 380 failed
:这些错误消息表示在模型中查找指定名称的blob索引失败。可能是由于模型中不存在对应的blob或者名称错误导致。建议您检查模型的输入和输出blob名称是否正确,并确保在代码中正确指定这些名称。ex.extract("onnx::Mul_433",out0);
和类似的代码行:这些代码行表示在模型中提取指定名称的输出blob。在这种情况下,您需要确保代码中正确指定了模型输出blob的名称,并且名称与模型中定义的名称一致。Try
:这些错误消息后面的Try
提示您尝试使用其他方法来提取指定的blob。根据您提供的信息,您已经尝试了多次提取相同的blob,但失败了。建议您检查模型中的blob名称是否正确,并尝试使用其他方法来提取这些blob。如果以上回答对您有所帮助,点击一下采纳该答案~谢谢
【以下回答由 GPT 生成】
首先,无法看到您的具体代码和错误信息,因此我只能给出一般性的建议。要解决画框功能无法正常工作的问题,可以尝试以下几个步骤:
确保模型和配置文件正确加载和解析:检查模型和配置文件是否正确选择和加载,以及网络层的配置是否正确。可以使用日志打印功能来检查加载和解析的结果。
检查推理结果:查看推理结果是否正确,并确定是否正确捕获到目标物体的位置和边界框。可以通过在绘制框之前打印预测结果,或者使用调试器来检查。
调整阈值和NMS(非极大值抑制)参数:阈值和NMS参数可以影响边界框的绘制结果。尝试调整这些参数,以获得更好的结果。
确保画框代码正确:检查绘制框的代码是否正确,包括坐标计算和图像绘制函数是否正常使用。
检查模型的输入数据格式:确保模型的输入数据格式与ncnn软件相匹配。可能需要对输入数据进行适当的预处理,以满足模型的要求。
查看模型输出的类别和置信度结果:检查模型输出的类别和置信度结果,确保它们与期望的结果相匹配。如果结果不正确,可能需要查看模型的输出层配置以及解析代码。
如果以上步骤都已经尝试过,但问题仍然存在,可能需要更详细的信息和代码以便进一步帮助您解决问题。
【相关推荐】
确保模型的输入图像格式和预处理与模型训练时相匹配。检查图像输入的通道顺序、均值、标准差等设置。
需要确保模型的输入是正确的。这涉及到模型的输入尺寸、输入图片的格式和像素范围等。查你的模型权重文件是否正确。如果权重文件有问题,可能会导致模型无法正常运行。
不画框说明你的物体识别根本没有跑起来,你先在模拟器上跑下能不能运行
检查下环境。具体什么错误日志贴出看看啊。