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

举报
张辉 发表于 2021/07/21 10:20:31 2021/07/21
【摘要】 【昇腾CANN训练营第二期】【应用营】第三周作业实操

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

https://bbs.huaweicloud.cn/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.cn/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.cn/forum/thread-129524-1-1.html

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

6.jpg

模型2.png

算子2.jpg

磊25.jpg

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。