认识你的脸

face detection

==实验介绍==

Face Detection的目的是从照片中检测到人脸。该实验设计基于opencv的如下实验样例:

https://docs.opencv.org/3.0-beta/doc/py_tutorials/py_objdetect/py_face_detection/py_face_detection.html#face-detection

==实验步骤==

1. 运行run.sh,检测人脸
sh run.sh

2. 修改面部和眼睛的检测参数,观察不同参数对检测结果的影响。例如:

#face_parameters
face_scaleFactor = 1.15
face_minNeighbors = 4
face_minSize = (3,3)
#eye parameters
eye_scaleFactor = 1.15
eye_minNeighbors = 1
eye_minSize = (2,2)

3. 试对多人脸图片进行检测,观察用什么样的参数配置可得到最好的检测结果。例如:
photo_fn = 'img/crowd.jpg'

4. 即时拍些个人照片和集体照片,进行检测。

dnn-face-recognition

==实验介绍==

DNN face recognition是用DNN提取人脸特征,进行人脸识别的方法。


本实验设计基于GitHub上的如下开源项目:

https://github.com/gyunt/vgg-face-python-demo

==实验步骤==

1. 运行run.sh,识别缺省ak.png图片
sh run.sh

2. 即时拍些人脸照片,让进行识别
img_in = 'image/'

3. 修改recog.py,完成人脸确认任务,即给定一张人脸,考察另一个人脸是否属于同一个人。【附加题】

提示:
   对两张图片分别从VGG net中读取中特征向量,再计算两幅图特征向量间的距离,依该距离判断是否为同一个人。

pca-face-recognition

==实验介绍==

Face Recognition是基于PCA+SVM的人脸识别系统。该实验设计基于sklearn的演示程序.

http://scikit-learn.org/0.16/auto_examples/applications/face_recognition.html


==实验步骤==

1. 运行run.sh,观察基于PCA+SVM的人脸识别系统
sh run.sh

2. 修改参数,观察基于不同参数的人脸识别效果。例如:

n_components : PCA中eigence face的个数,越大性能越好。
img_show     : 对test中不同人脸的识别结果进行打印

3. 即时拍一张个人照片,观察系统将这张照片的识别结果,看你象哪位名人。

(1)将照片放到my_home下,命名为me.jpg
(2)sh run-myphoto.sh

tf-neural-texture

==实验介绍==

TF-Texture的目的是自动生成文理图案。该技术基于如下论文:

Texture Synthesis Using Convolutional Neural Networks (https://arxiv.org/pdf/1505.07376v3.pdf)


本实验设计基于GitHub上的如下开源项目:

https://github.com/mohamedkeid/Texture-Synthesis.git

==实验步骤==

1. 运行run.sh,生成缺省纹理
sh run.sh

2. 修改synthesize.py,生成其它纹理。例如:
TEXTURE_PATH = './lib/images/wood.jpg'

3. 修改synthesize.py,观察不同参数对生成结果的影响。可修改参数包括:

TEXTURE_LAYERS #生成纹理时所用的神经网络层,可减少或增加,观看控制不同层得到的效果
EPOCHS #生成时的迭代次数
LEARNING_RATE #学习的速度
TEXTURE_WEIGHT #生成时对纹理的权重

4. 即时拍些纹理照片,让计算机自动生成。

tf-neural-style

==实验介绍==

TF-Style可以对一幅图片进行风格转换。风格转换是2015年由Gatys等提出的一种基于神经网络优化的图像转换技术。

A Neural Algorithm of Artistic Style, Leon A. Gatys, Alexander S. Ecker, and Matthias Bethge.

本实验设计基于GitHub上的如下开源项目:

https://github.com/ftokarev/tf-neural-style


==实验步骤==

1. 运行run.sh,生成缺省图片风格转换。转换结果在output目录下。
sh run.sh

2. 修改update-style.py,生成其它风格。例如:
style_image = './examples/input/the-scream.jpg'

3. 修改update-sytle.py,观察不同参数对生成结果的影响。可修改参数包括:

content_weight : 生成时对内容的重视程度
style_weight   : 生成时对风格的重视程度
content_layers : 内容在神经网络中的表达位置
style_layers   : 风络在神经网络中的表达位置


4. 即时拍些照片,作为内容照片,改变其风格

聆听你的声音

SpeechSeparation

==实验说明==

我们日常听到的声音通常都是多个声源混杂在一起的。声源混合给语音信号处理带来极大挑战。为了将不同声源
分开,可以利用多个麦克风进行录音,利用不同声源在不同麦克风之间的时空信息来定位和分离某一音源的声音,这
通常称为多信道方法(Multi-Channel Solution)。
另一种方法是基于单一麦克风录制的声音,利用每个音源所发出声音的不同模式对不同音源的声音进行分离,或
基于每个音源发音的连续性来对不同音源的声音进行分离。这些基于单麦克风的分离方法称为单信道方法(Single-Channel Solution)。

本实验将基于一种最近提出来的深度聚类(deep clustering)方法对声音进行分离。这一方法的基本思路是将声音转化为
频谱图,对该图上每个时-频块映射到一个特征空间。该特征空间由一个深度神经网络确定的
非线性映射得到,学习该网络时的准则是训练数据的时频块在该空间的相邻矩阵和由数据标签计算出的相邻矩阵尽可能
接近。有了这一特征映射,即可在特征空间中进行聚类,从而对频谱进行分离。


本实验设计基于如下开源项目:

https://github.com/jcsilva/deep-clustering.git

==实验步骤==

1.运行run.sh程序,运行DeepCluster过程。
     sh run.sh

  该程序将生成如下文件:
  * mixed.wav:混合语音文件
  * out_1.wav和out_2.wav:模型对mixed.wav处理分离两个声源得到的两个文件。
  * spec.pdf:ground truth表示原始的两种音频混合的方式,predict result表示模型还原出的混合方式。

  打开run.sh,可以发现该过程将调用如下Python命令:

     python3 main.py model/speech_model.h5 ../data/speech_separate/01u/01ua010a.wav ../data/speech_separate/20r/20ra010a.wav

  上述命令将01ua010a.wav和20ra010a.wav两个声音文件进行混合,得到混合声音文件mixed.wav,再对该混合声音文件利用DeepCluster算法进行
  分离,得到分离后的两路声音,存成输出文件out_1.wav和out_2.wav。播放mixed.wav,out_1.wav和out_2.wav,感受DeepCluster的分离效果。
  观察spec.pdf中所示的频谱,感受DeepCluster的分离效果。

  注: 播放音频命令: play mixed.wav
      打开pdf命令: evince spec.pdf

  下面的实验均通过修改run.sh文件中的程序完成。

2. 观察说话内容对人声分离效果的影响

  依两路声源的发音内容不同,分离的难度会有所不同。通过修改run.sh,可以感受DeepCluster对相同发音和不同发音的分离效果。

  相同内容:
  python3 main.py model/speech_model.h5 ../data/speech_separate/01u/01ua010a.wav ../data/speech_separate/20r/20ra010a.wav
  不同内容:
  python3 main.py model/speech_model.h5 ../data/speech_separate/01u/01ua010a.wav ../data/speech_separate/20r/20ra010b.wav

3. 观察性别对人声分离效果的影响

  依两路声源的发音特性不同,分离的难度会有所不同。通过修改run.sh,可以感受DeepCluster对同性别发音和不同性别发音的分离效果。

  相同性别:
  python3 main.py model/speech_model.h5 ../data/speech_separate/01u/01ua010a.wav ../data/speech_separate/027/027a010b.wav
  不同性别:
  python3 main.py model/speech_model.h5 ../data/speech_separate/01u/01ua010a.wav ../data/speech_separate/20r/20ra010b.wav

4. 观察匹配性对人声和背景音乐的分离效果的影响

  如果两路声音的发音属不同类发音,则分离会更加容易,如音乐和人声。然而,分离效果可能受到音乐与发音人的匹配程序不同而有所
  不同。下面实验考察人声和音乐匹配和不匹配两种情况下的分离效果。

  匹配的人声和背景音乐
  python3 main.py model/music_model.h5 ../data/music_separate/0_accompaniment.wav ../data/music_separate/0_vocals.wav
  不匹配的人声和背景音乐
  python3 main.py model/music_model.h5 ../data/music_separate/0_accompaniment.wav ../data/music_separate/1_vocals.wav

5. 尝试自行录制一些混合声音,用DeepCluster方法进行分离。

学习你的语言

word2vec

==实验介绍==

Word2Vec是将单词映射到语义空间的技术。利用Word2Vec,可以将单词嵌入一个高维空间,
在其中语义近的单词距离较近,语义远的单词距离较远。

本实验利用Word2Vet工具,实现对中文词的嵌入。


==实验步骤==

1. 运行run.sh,观察以金庸的《射雕英雄传》为语料,进行汉语单词映射的效果。
sh run.sh

该程序调用汉语分词工具,将语料分成单词串;利用SRILM工具分析词的词频,选择高频词进行训练;
利用word2vec工具生成词向量;利用t-sne工具将高维词向量映射到二维空间;利用matplotlib进行
画图。

程序生成wordv.pdf文件,可打开并观察每个单词的映射位置。

2. 手动选出人名及其对应的词向量,观察这些人名在图上的关系。
   提示:在word_v中只保留人名的向量,再利用draw.py进行显示。

3. 修改run.sh,利用其它收集到的文本进行词向量生成。观察不同文本生成的词向量质量的好坏。

4. 对同一文本,选取不同长度进行训练,观察词向量的质量与数据量的关系。

模仿你的行为

alpha-zero

==实验说明==

Reversi-Zero是一款基于AlphaZero算法开发的黑白棋游戏。
黑白棋,又叫翻转棋(Reversi)、苹果棋或奥赛罗棋(Othello)。棋盘共有8行8列共64格。开局时,棋盘正中央的4格先置放黑白相隔的4枚棋子(亦有求变化相邻放置)。通常黑子先行>。双方轮流落子。只要落子和棋盘上任一枚己方的棋子在一条线上(横、直、斜线皆可)夹着对方棋子,就能将对方的这些棋子转变为我己方(翻面即可)。如果在任一位置落子都不能夹>住对手的任一颗棋子,就要让对手下子。当双方皆不能下子时,游戏就结束,子多的一方胜。(https://zh.wikipedia.org/wiki/黑白棋)


本实验设计基于如下开源项目:

https://github.com/mokemokechicken/reversi-alpha-zero

==实验步骤==

1. 运行run.sh程序,利用现有模型进行黑白棋对奕
sh run.sh

2. 修改config/ch5.yml文件中play一节中的参数,观察不同设定下的棋力。

  simulation_num_per_move: 每走一步棋机器进行模拟走棋的步骤。观察是否值越大,性能越好。
  thinking_loop: 观察是否值越大,性能越好。

fps-game

==实验说明==

ViZDoom是一款基于Doom的AI研究平台,主要形式为第一人称射击游戏。
其允许AI程序通过获取原始的游戏图像来玩游戏,达到捡药包增加生命,瞄准并击杀怪物的目的。


本实验设计基于如下开源项目:

https://github.com/IntelVCL/DirectFuturePrediction (为**"Learning to Act by Predicting the Future", Alexey Dosovitskiy and Vladlen Koltun, ICLR 2017**论文的代码)

==实验步骤==

1. 运行run.sh程序,利用现有模型进行黑白棋对奕
cd code
sh run.sh

2. 修改code/examples/run_exp.py文件中目标参数,观察不同目标设定下游戏AI的行为和游戏结果。

```
experiment_args['test_objective_coeffs_meas'] = np.array([0.5, 0.5, 1.0])
```

  三个数值分别代表三个目标:弹药、生命和杀怪数,设定值在-1到1之间。设定值越大,对应的目标将被实现的越好。
  比如,当设定为[1.0, 1.0, -1.0]时,游戏AI将会珍惜子弹,提高生命但尽量不击杀怪物。
  注意 注意 注意!!!设定值不能设为0,可以很小的数替代,如0.01,否则将会出错。

学习你的思维

DeepDream

==实验说明==

DeepDream是Google公司公布的一项开源技术。该技术利用图像重构算法来重现神经网络所学习的内容。
在重现过程中,对突出的神经元节点进行加重,从而产生自我暗示效果,展现出迷幻场景。这一过程与
人类做梦过程有相似之处,因而称为DeepDream。

http://googleresearch.blogspot.ch/2015/06/inceptionism-going-deeper-into-neural.html


本实验设计基于Google的如下开源项目:

https://github.com/google/deepdream

==实验步骤==
1. 运行run-single-dream.sh,体验单一做梦过程
sh run-single-dream.sh

2. 阅读single-dream.py,理解做梦过程

3. 修改single-dream.py,体验不同的做梦过程
  (1)对更低层网络做强化,例如:
     en_node='inception_3b/5x5_reduce'
  (2)修改输入的图片,例如:
     img_in_fn='img/flowers.jpg'
  (3)修改输入图片为你自己的照片
  (4)修改模型,例如:
     net_fn='models/googlenet_places205/deploy_places205.protxt'
     param_fn='models/googlenet_places205/googlelet_places205_train_iter_2400000.caffemodel'
4. 运行run-continuous-dream.sh,体验连续做梦的过程

sh run-continuous-dream.sh

5. 阅读continuous-dream.py,理解连续做梦过程

6. 修改continuous-dream.py, 体验不同的做梦过程

    (1)修改做梦系统,例如:
       dream_scale=0.5
    (2)修改输入图片,例如:
       img_in_fn='img/flowers.jpg'
    (3)修改模型,例如:
       net_fn='models/googlenet_places205/deploy_places205.protxt'
       param_fn='models/googlenet_places205/googlelet_places205_train_iter_2400000.caffemodel
'