【昇腾CANN训练营第二期】【应用营】第三周作业:使用MindX SDK运行图像检测和图像分类

网友投稿 787 2022-05-25

CANN训练营第二期 应用营第三周作业链接:

https://bbs.huaweicloud.com/forum/forum.php?mod=viewthread&tid=139269&fromuid=446160

实操作业为:

1、成功运行目标检测案例截图,需要包含命令行输出的检测结果、输出的图片、带时间日期。(15分) 2、图像分类作业: https://gitee.com/kongchibin/ascend_camp/tree/master/%E4%BD%9C%E4%B8%9A/week3 打分细则: 能正常跑通程序并截图提交到作业贴,截图需要包含命令行输出的分类结果,带时间日期:5分 能自行转换resnet50模型的,并将转换指令提交到作业贴:5分 能把分类结果标记到图片并保存到本地,相关可视化代码片段提交至作业贴:5分

第三周的作业需要在第二周的作业基础上完成。第二周作业实操链接为:https://bbs.huaweicloud.com/blogs/285668

作业1:

1、成功运行目标检测案例截图,需要包含命令行输出的检测结果、输出的图片、带时间日期。(15分)

参考链接:https://gitee.com/kongchibin/ascend_camp/tree/master/%E4%BD%9C%E4%B8%9A/week3

先看看AI1S服务器上有没有装cv2:

没有,那就装opencv2吧:

pip3.7 install opencv-python -i http://mirrors.aliyun.com/pypi/simple --trusted-host mirrors.aliyun.com

把 孔老师代码仓的代码下载到本地后,再拖到服务器上去:(像如下的方法拖拉很方便的。。。)

将上节课编译好的模型拷贝过去:

根据week3的链接 里面“配置环境变量”一段,贴到命令行执行:

这里需要注意,

第一个作业目标检测,需要传到服务器上的是孔老师 “课程”目录下的内容:

因为这里都是yoloV3的东西。

然后继续执行python main.py:

...

眼尖的张小白看出前面有个failed,不过应该是没事的吧。

我们把生成的result.jpg下载下来:

打开一看:

果然猫被检测到了,用蓝色框框住了。

【昇腾CANN训练营第二期】【应用营】第三周作业:使用MindX SDK运行图像检测和图像分类

我们再来做第二个作业:

2、图像分类作业:

https://gitee.com/kongchibin/ascend_camp/tree/master/%E4%BD%9C%E4%B8%9A/week3

打分细则:

能正常跑通程序并截图提交到作业贴,截图需要包含命令行输出的分类结果,带时间日期:5分

能自行转换resnet50模型的,并将转换指令提交到作业贴:5分

能把分类结果标记到图片并保存到本地,相关可视化代码片段提交至作业贴:5分

先建个resnet50的目录:/home/HwHiAiUser/MindX/resnet50

将作业的代码传上去:

(注意这里的模型目录是model不是yolo3的models)

按照readme的方式下载resnet50的模型:

或者去百度网盘下载老师准备好的模型:

上传到model目录:

检查test.pipeline代码是否使用了这个om文件:

其他两个文件好像刚才也上传了。

所以开始进行推理试试(先不叠加最后的图)

。。。

这里有个分类结果:Egyptian Cat(埃及艳后的猫??)

Zhanghui_china:result--------------------------------- {'MxpiClass': [{'classId': 286, 'className': 'Egyptian cat', 'confidence': 0.500488281}]}

对比下yoloV3的返回结果:

{"MxpiObject":[{"classVec":[{"classId":15,"className":"cat","confidence":0.97992199999999996,"headerVec":[]}],"x0":35.598979900000003,"x1":453.298157,"y0":100.41439099999999,"y1":322.18307499999997}]}

我们参考yoloV3的代码改写下模型推理返回后的处理的相关代码代码:

由于两个地方都要读一个文件,那么在前面就把名字确定了:

(为了方便,将 猫的jpg改为 test-cat.jpg)

img_path = "test-cat.jpg" #img_path = "test-dog.jpg" with open(img_path, 'rb') as f: dataInput.data = f.read()

然后根据实际的返回读取className:

results = json.loads(infer_result.data.decode()) print('Zhanghui_china:result---------------------------------') print(results) bboxes = [] for bbox in results['MxpiClass']: bboxes = { 'classId': int(bbox['classId']), 'className': bbox['className'], 'confidence': round(bbox['confidence'],9)}

然后将className(加个中括号醒目一点吧!)写到图片中:

img = cv2.imread(img_path) #可视化代码填写处 #从results取数据,获取分类的className,并利用opencv把标签名标记到图片 #className = 'class:' +bboxes['className'] className = '[' +bboxes['className'] + ']' print(className) cv2.putText(img, className, (50,50),cv2.FONT_HERSHEY_SIMPLEX, 1.0, (255, 255, 255), 1) # 图像,文字内容, 坐标 ,字体,大小,颜色,字体厚度 #cv2.imwrite("./result-dog.jpg", img) cv2.imwrite("./result-cat.jpg", img)

我们来试一下:

下载图片看结果:

换只狗试试:

代码的文件名也改一下:

运行结果:

图片下载后:

张小白还以为为啥不是dog...因为resnet的推理失效了呢。。。。

实际上:

Zhanghui_china:result--------------------------------- {'MxpiClass': [{'classId': 264, 'className': 'Pembroke, Pembroke Welsh corgi', 'confidence': 0.933105469}]} [Pembroke, Pembroke Welsh corgi]

Pembroke Welsh corgi美 [ˈpɛmˌbroʊk welʃ ˈkɔːrɡi]

潘布鲁克威尔士柯基犬;彭布罗克柯基犬;彭布罗克威尔士柯基犬;彭布洛克威尔士科基犬;潘布鲁克威尔斯柯基犬

嗯,确实好像真的是条狗。。。

现在那应该只差模型没有做转换了。。。

回头看看第二周的应用营作业

https://gitee.com/kongchibin/ascend_camp/tree/master/%E8%AF%BE%E7%A8%8B/week2

这里面讲的atc转换的几个必要点:

要有aipp文件,这个第三周作业链接孔老师已经准备好了。

然后转换模型是以下一些参数:(yoloV3的例子)

atc --model=./yolov3_tf.pb --framework=3 --output=./yolov3_tf_bs1_fp16 \ --soc_version=Ascend310 --insert_op_conf=./aipp_yolov3_416_416.aippconfig \ --input_shape="input/input_data:1,416,416,3" \ --out_nodes="conv_lbbox/BiasAdd:0;conv_mbbox/BiasAdd:0;conv_sbbox/BiasAdd:0"

pb文件,已经有了:

input_shape

从论文解读(https://zhuanlan.zhihu.com/p/353235794 )上来看,应该是(3,224,224)

其他参数到底怎么写,好像也不清楚。

在 @花溪 女侠的提示下,张小白做了尝试:

atc --model=./resnet50_v1.5.pb --framework=3 --output=resnet50_zhanghui_china --output_type=FP32 --soc_version=Ascend310 --input_shape=input_tensor:1,224,224,3 --insert_op_conf=./aipp_resnet50_224_224.aippconfig

然后再修改test.pipeline:

推理一下吧:

好像用自己的转换后的模型推理也成功了:

上传一张鳄鱼的(送入test-eyu.jpg,返回result-eyu.jpg)

好像真的没问题。。。

嗯,终于可以删除服务器走人了。。。

这就完成了第三周的作业了。

(全文完,谢谢阅读)

CANN训练营第二期 高玩赛即将开启,请点击:https://bbs.huaweicloud.com/forum/thread-129524-1-1.html

添加下方工作人员微信,添加备注:CANN训练营~ 邀请进群~

API/SDK 昇腾 机器学习 深度学习 神经网络

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:手把手教你做项目MySQL篇——从下载到命令总结
下一篇:基于ModelArts零代码开发口罩检测佩戴模型
相关文章