【CANN训练营第四期】如何在AI1S云服务上基于ACL实现单算子调用
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下载下来:
打开一看:
果然猫被检测到了,用蓝色框框住了。
我们再来做第二个作业:
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小时内删除侵权内容。