K210物体检测卡死

尝试一、及时回收内存

换用mobilenet_v2_0.5,卡死的问题解决了,还是k210kpu内存太小了,只有2000KB,从1839KB的0.75换成848KB的0.5,就彻底解决了运行卡死的问题,而且没有加kpu.deinit

尝试二、把图像大小改为224*224,且将识别范围收入

一时半会儿搞不好,先用默认的,那个forward会出问题

尝试三、让训练的图像和识别的图像在同一位置

现在训练的图像通过crop可以让托盘居中,但是实际检测的时候通过crop后会让forward函数出问题,说是img format有问题

另一种思路是用sensor.windowing(roi),但是不知道为啥不能居中,和我想的位置不一样

决定现在helloworld里面实时调试一下图像位置,既要输入224*224(值得怀疑,可以研究一下例程里面是怎么跑起来的,下一条),又要在中间

尝试四、 看看例程怎么跑的

1.

lcd_show_except

里面有

img = image.Image(size=input_size)

2.

def main

里面有

sensor_window=input_size(input_size = (224, 224))

main函数里可以传参进去确定是否翻转,如下:

sensor_hmirror=True, sensor_vflip=True

翻转之后lcd上是左右上下颠倒的,但是ide上是正的,不知道为啥。而且过段时间会卡死,显示ValueError: input not support,这个和翻转没关系,就是连接ide后会出这个问题

想去用一下

lcd_rotation

结果报错:AttributeError: 'Image' object has no attribute 'rotation',没有这个方法

是有这个方法的,是自己写了个img.rotation(),忘删了

用了

lcd_rotation=2

现在字转正了,图像是反的,0123控制图像顺时针转90度

, sensor_hmirror=True, sensor_vflip=True

如图1,又把摄像头的两个翻转参数加上,现在图像和文字都正了,说明坐标原点回到了左上角

图1

尝试五、把识别部分框到中间 

现在是从左上角开始的224*224,要改到roi=(48,16,224,224),也就是正对托盘 

### K210硬件平台YOLOv8物体检测实现与优化 #### 实现过程 对于在K210硬件平台上实施YOLOv8进行物体检测的任务而言,由于K210本身支持多种神经网络框架,但官方文档和社区资源主要集中在YOLOv3及其变种版本上。因此,在尝试部署更先进的YOLOv8之前,需先确认该模型能否被有效移植至K210环境中[^1]。 考虑到K210的计算能力和内存限制,直接将大型预训练好的YOLOv8模型迁移到此设备可能面临挑战。为了克服这些障碍,建议采取以下策略: - **量化处理**:采用INT8量化技术减少模型大小的同时维持较高的精度水平。 - **剪枝操作**:去除重要的连接权重以降低参数量级,从而提高推理速度而显著影响性能表现。 - **自定义层替换**:针对某些特定于高性能GPU加速卡上的运算单元(如Batch Normalization),寻找适合嵌入式系统的替代方案来简化结构复杂度。 #### 部署流程 当完成上述准备工作之后,则按照常规步骤来进行最终部署工作: 1. 准备好适用于K210的目标检测数据集,并对其进行标注; 2. 使用转换工具将经过优化后的YOLOv8模型转化为能够加载到K210中的格式; 3. 编写相应的Python脚本调用MaixPy库接口读取摄像头输入流并将图像送入已加载完毕的模型中执行预测任务; 4. 对输出结果解析得到边界框坐标信息用于后续应用开发(比如手眼标定实验)。 ```python from maix import nn, camera, display import time model_path = "/path/to/your/model" labels = ["label_{}".format(x) for x in range(10)] interpreter = nn.Interpreter(model_file=model_path) input_tensor_index = interpreter.get_input_details()[0]['index'] output_tensors_indices = [o['index'] for o in interpreter.get_output_details()] while True: frame = camera.read() start_time = time.time() input_data = preprocess(frame) # 自定义预处理函数 interpreter.set_tensor(input_tensor_index, input_data) interpreter.invoke() output_data = [] for i in output_tensors_indices: tensor = interpreter.get_tensor(i).flatten().tolist() output_data.extend(tensor[:]) end_time = time.time() inference_time = (end_time - start_time)*1000 boxes, scores, classes = postprocess(output_data) # 自定义后处理函数 draw_boxes_on_image(frame, boxes, scores, classes, labels) fps_info = f'FPS: {(1/(inference_time / 1000)):.2f}' print(fps_info) display.show(frame) ``` 需要注意的是,以上代码仅为示意性质,实际项目中还需根据具体情况进行调整和完善。 #### 性能优化技巧 除了前面提到的技术手段外,还可以考虑以下几个方面进一步提升效率: - 利用多线程机制并行化同阶段的数据准备、前向传播以及结果显示等工作环节; - 尽量减少必要的I/O操作次数,例如缓存最近一次获取的画面帧而是每次都重新捕捉; - 如果应用场景允许的话,适当放宽对实时性的要求以便换取更高的准确性或者更低功耗的工作模式。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值