“2016013201”版本间的差异
第33行: | 第33行: | ||
*了解cv2库 | *了解cv2库 | ||
+ | |||
+ | <gallery> | ||
+ | 文件:rotation.png|图像旋转 | ||
+ | 文件:Edge_detection.png|边缘识别 | ||
+ | </gallery> | ||
今天上午的两个实验吸取昨天的经验,依旧采用一段一段手输的方法,并且每输入一个Cell就运行它,这样虽然感觉上进度比较慢,但是能够学到很多东西。通过第一个实验usb_webcam了解到了PIL库,这是Python常用的图像处理库,功能也很强大,几行代码就能做到裁剪、旋转、颜色转换等。第二个实验是opencv_filter_webcam,顾名思义,肯定要用到opencv的东西。这是一个跨平台的计算机视觉库,功能也很强大,今天主要用到了它的实时图像处理的模块,对摄像头获取的图像进行线条化,然后在通过HDMI连接的显示器上进行实时输出。以上两个实验都是在PYNQ板上进行主要计算的。 | 今天上午的两个实验吸取昨天的经验,依旧采用一段一段手输的方法,并且每输入一个Cell就运行它,这样虽然感觉上进度比较慢,但是能够学到很多东西。通过第一个实验usb_webcam了解到了PIL库,这是Python常用的图像处理库,功能也很强大,几行代码就能做到裁剪、旋转、颜色转换等。第二个实验是opencv_filter_webcam,顾名思义,肯定要用到opencv的东西。这是一个跨平台的计算机视觉库,功能也很强大,今天主要用到了它的实时图像处理的模块,对摄像头获取的图像进行线条化,然后在通过HDMI连接的显示器上进行实时输出。以上两个实验都是在PYNQ板上进行主要计算的。 |
2017年7月3日 (一) 18:35的版本
2017年6月29日
- 安装并配置python
- 安装并试用TensorFlow
配置过程中出现的最大问题是找不到Python,因为Python2都是直接安装在根目录下的,而Python3却安装在c盘的Users文件夹下,找到它费了很大劲,不过一边找也一边重新熟悉了cmd的一些基础操作,算是一点额外的收获。
2017年6月30日
- 配置PYNQ板
- 阅读Python示例代码
- 完成教程实验pAudio_playback
配置PYNQ板时需要先设置本机IP,这一步很容易,但有一点很关键,就是ip的第三段必须要设为2,这样才能够正确识别,另外也要注意PYNQ不支持IE和edge浏览器,推荐使用chrome。
今天的主要困难是由于不熟悉xilinx的操作,在结束进程的时候直接把PYNQ的开关关掉了,或许是这个原因,导致PYNQ的sd卡中的文件部分损坏了,包括教程要用的pAudio_playback,使得我们不得不手工输入代码。当然这在客观上也让我们有机会更加细致地了解代码。通过研究代码,发现了一个很关键的滤波函数,它将样本采样率从3Mhz降低到32khz,几乎降了100倍,使得PYNQ能够从容应付数据的处理,也提高了效率。进行的处理主要是傅里叶变换,这是图像和音频处理最常用的手段,Python通过fft函数就能很容易实现。
2017年7月1日
- 完成教程实验usb_webcam
- 完成教程实验opencv_filter_webcam
- 熟悉PIL库
- 了解cv2库
今天上午的两个实验吸取昨天的经验,依旧采用一段一段手输的方法,并且每输入一个Cell就运行它,这样虽然感觉上进度比较慢,但是能够学到很多东西。通过第一个实验usb_webcam了解到了PIL库,这是Python常用的图像处理库,功能也很强大,几行代码就能做到裁剪、旋转、颜色转换等。第二个实验是opencv_filter_webcam,顾名思义,肯定要用到opencv的东西。这是一个跨平台的计算机视觉库,功能也很强大,今天主要用到了它的实时图像处理的模块,对摄像头获取的图像进行线条化,然后在通过HDMI连接的显示器上进行实时输出。以上两个实验都是在PYNQ板上进行主要计算的。
- 完成实验tfExample
由于下午有事,所以没有赶上上课,晚上抽空又去实验室把落下的任务补上了。任务很简单,从gitlab上下载一个压缩包,然后通过命令行打两句命令运行一个TensorFlow的程序,基本上就完成了,难就难在环境总是残缺不全,大部分时间还是都花在环境的配置上了,也许这就是这门课程的挑战性所在。首先用工作站运行,发现工作站连Python都没有(那时候还不知道任杰已经在上面装了anaconda,当然也不知道anaconda是Python的一个很强大的发行版),然后就先找Python,找到了Python,安装的时候又失败了,具体的原因忘记了,反正总是不行。然后想到反正也不用连板子,我自己的笔记本上也装了Python和TensorFlow,何不在它上面试试呢。可是试了一下又出现另外的问题,我的Python缺了两个很关键的库,一个是PIL,另外一个是SciPy,发现问题就要解决问题,我就开始在网上找这两个库。PIL一开始没有找到对应版本的,后来通过Pillow解决了,SciPy真的是一块硬骨头。一开始装的时候总是fail,发现好像缺了它依赖的numpy,装了之后还是不行。上网又搜了一下看到有人推荐用anaconda,可以一劳永逸解决这些乱七八糟的库的问题,然后才终于想起来工作站的桌面上好像是有一个anaconda,才意识到为什么工作站上没有Python任杰也没说啥了,因为他用了anaconda。在工作站上用anaconda跑了那两条命令,很顺利就出来了,但是最后打开那个网页上的Embedding页面的时候速度奇慢,这个时候动了第三次换机器的主意。当然也不是换,算是一边等结果一边解决笔记本的问题。然后就是继续搜SciPy,终于找到了一个解决方法,就是把numpy卸载了,重新装一个numpy+mkl,装上之后就能装SciPy了。通过这个还掌握了pip卸载软件的语法,就是把install换成uninstall。不得不说pip真是好用,既能直接输口令让它自己找,一些比较麻烦的还能下载下来原地通过安装包安装。都装好之后运行了那个程序,一切正常,除了那个embedding获取数据同样奇慢无比。不过这个无关紧要,今天的任务就基本完成了。
2017年7月2日
- 了解神经网络概念
- 训练语音识别网络
今天上午正式开始神经网络的内容,这也是我们这次挑战性课程的主题。首先老师讲了神经网络的发展历史,分类,一些典型代表,包括谷歌的CLDNN,CTC模型还有LSTM等等,我们的网络主要就有CLDNN和LSTM还有一些其他部分构成。用到的函数库是keras,这是一个TensorFlow的封装版,使用更加方便,更加傻瓜化。
操作上的主要内容就是训练网络了。首先到git上找到并下载一个项目,将其中两个脚本涉及到地址的内容改成当前所用地址,然后跑这两个脚本,开始训练。样本来自我们前几天自己录的音,不同的是被老师加上了很多背景白噪声,大幅度增加了样本量,实现了“增强学习”。将样本分割成两部分,分别放在两个不同的文件夹里,一部分用作训练,另一部分用作测试。在工作站上运行之后出现了很多问题,最主要的是10054和10061错误,都是和计算机连接有关的,通过关闭防火墙和提升权限都得到了解决,正常开始训练,不过速度奇慢,因为是用到cpu版本的TensorFlow。笔记本上也遇到了同样的10054和10061问题,但是用相同的办法却没办法解决,最后不得不先搁置起来。
下午除了等训练结果之外没有其他进展。网络正确率已经从早上开始时候的0.1提高到了0.6,相信经过一个晚上就可以达到0.9甚至0.99。
2017年7月3日
- 配置Android Studio
- 在手机上部署离线语音识别app
今天早上出了一点意外,就是我们刚去的时候电脑屏幕是黑着的,然后我下意识按了一下电源键,才想起来电脑昨天一直在跑数据没有关。还好最后又想办法把它重新打开了,程序也还在运行。但是查看训练好的模型发现从昨天晚上到现在只训练了5个epoch,按照正常速度至少得有三四十个甚至五六十个。想必一定是电脑设置了自动休眠。在电源选项里查了一下果然是这样,如果没有任何操作半小时后休眠。不要说一台服务器,就是一台普通的台式机也不应该有这样的设置,这真是太奇怪了。好在gpu的速度够快,我们用一个上午的时间就把神经网络的准确率提高到0.95了,同时还下载并安装了Android Studio。Android Studio也是bug不断,有两个sdk始终没法下载,原因竟然是目标网站被墙了。不过快中午的时候老师给了另一个精简版的手册,按照那个手册终于把sdk下下来了。同时还把以前有人训练好的网络也下下来了,我们就先用这个网络来部署apk。
老师给的文件里面都设置好了,只要通过Android Studio打开,然后点击build就行了。这里也是助教教了我们一个小技巧,就是因为我的手机虽然支持Android 7.0也支持开发者模式,但是不允许通过usb安装。助教就教我们先build一个apk,再把这个apk复制到手机上,通过手机来安装,顺利解决了无法通过usb安装的问题。之后就没有什么问题了,app虽然界面比较简陋,但是功能还是足够的,毕竟我们只是做了识别的部分。不过根据实际测试情况来看,准确率完全没有达到0.9这么高,虽然有可能是之前训练这个网络的人没有好好训练,但更有可能是我们所处的机房噪声太大,而且说话的状态也和录音者有很大不同,所以才会经常出现识别错误的情况。
下午接近尾声的时候,另外一位老师为我们介绍了FPGA的相关知识,感觉这会是未来硬件设计的发展趋势,毕竟现在电子产品对功能要求越来越多,科技集成度越来越高,完全从底层开始做一个完整的产品成本巨大也丝毫没有必要。