生成语音对抗样本

前言

本实验来自于Github/Fraunhofer-AISEC/ towards-resistant-audio-adversarial-examples

carlini  / audio_adversarial_examples  可作参考

软件环境:

华为云弹性服务器

最好选择西南-贵阳一、华东-上海一等有GPU加速型服务器的地区的GPU加速型服务器,这样在之后可以用英伟达的显卡加速;否则之后创建镜像再迁移很麻烦。我选择的系统是Ubuntu20.04,但是没有弄成GPU加速的版本,读者可以尝试Ubuntu18.04。

实验步骤与内容:

1.按照README.md,第一步安装docker没有问题。

2.从第二步运行setup.sh开始会报很多错(没有报类似错的请忽略),比如:

执行setup.sh中的docker build时没有权限,所以在前面加了sudo

pip install超时,在docker文件夹中的aae_deepspeech_041_gpu.dockerfile里面的第25行pip3之后加上--default-timeout=1000

failed to fetch:

在执行它提示的apt-get update –fix-missing之后仍然报错,只不过少一些:

百度,找到这个博客:E: Unable to fetch some archives, maybe run apt-get update or try with --fix-missing?_寰宇001的博客-CSDN博客icon-default.png?t=N7T8https://blog.csdn.net/qq_40907977/article/details/102967464

他说在/etc/resolv.conf里添加nameserver 8.8.8.8,照做,终于不报这个错了。

git clone(aae_deepspeech_041_gpu.dockerfile里的)又出现问题:

以下这几种方法都试过,也不知道是哪种导致最后成功了:

apt-get install curl
git config --global --unset http.proxy
git config --global --unset https.proxy

https://zhuanlan.zhihu.com/p/378894743icon-default.png?t=N7T8https://zhuanlan.zhihu.com/p/378894743将“https://github.com/tom-doerr/DeepSpeech”的https改成http(应该是这个起作用了)

安装cpu版本的tensorflow的时候又出错了,timeout:

 对于这样的大包,我们先把它下载到本地,再上传到云服务器(tensorflow-1.12.0-cp35-cp35m-manylinux1_x86_64.whl移动到项目的docker文件夹下,deepspeech-0.4.1-checkpoint.tar.gz移动到项目文件夹下):

#scp 本地文件路径 远程用户名@ip地址:远程路径
scp tensorflow-1.12.0-cp35-cp35m-manylinux1_x86_64.whl root@121.37.68.105:/home/
scp deepspeech-0.4.1-checkpoint.tar.gz root@121.37.68.105:/home/

(PS:这里上传文件的命令是在本地,两个包都位于D盘的download文件夹下)

然后cd到docker文件夹下,修改aae_deepspeech_041_cpu.dockerfile的内容为:

FROM aae_deepspeech_041_gpu
COPY tensorflow-1.12.0-cp35-cp35m-manylinux1_x86_64.whl /home
RUN pip3 install /home/tensorflow-1.12.0-cp35-cp35m-manylinux1_x86_64.whl

执行命令:

docker build -f aae_deepspeech_041_cpu.dockerfile -t "aae_deepspeech_041_cpu" .

这样就解决了timeout的问题,成功安装tensorflow1.12的cpu版本。

成功构建gpu和cpu镜像之后应该是这样的(none应该是临时镜像不用管它):

 cd到项目目录,修改setup.sh,根据自己的情况注释掉已经成功运行的命令:

 (PS:如果DeepSpeech克隆不下来的话,将Github地址https://github.com/mozilla/DeepSpeech.git改为Gitee仓库地址:https://gitee.com/yeezo/DeepSpeech) 

最后setup.sh成功执行应该是这样:

 查看项目文件夹发现deepspeech-0.4.1-checkpoint.tar.gz已经被解压且被删除:

3.华北-乌兰察布一的服务器没有装英伟达的驱动,所以我推测它没有英伟达显卡:

 所以我们采用CPU的命令启动容器:

docker run -it --mount src=$(pwd),target=/audio_adversarial_examples,type=bind -w /audio_adversarial_examples aae_deepspeech_041_cpu

 4.检查是否可以正确分离正常音频:

python3 classify.py --in sample-000000.wav --restore_path deepspeech-0.4.1-checkpoint/model.v0.4.1

(PS:最后一个单词应该是两个词is useless)

5. 生成对抗样本(CPU太慢了,可以将迭代数改少一点比如100):

python3 attack.py --in sample-000000.wav --target "this is a test" --out adv.wav --iterations 100 --restore_path deepspeech-0.4.1-checkpoint/model.v0.4.1

(PS:多核的CPU貌似可以使过程快一些)

6. 验证攻击成功:

python3 classify.py --in adv.wav --restore_path deepspeech-0.4.1-checkpoint/model.v0.4.1

7. 尝试一下GPU版本,报错:

 就这样吧,累了,毁灭吧。

 结论分析与体会:

 1.单纯的把这个实验跑出来的话难度不算大,照着readme做就行。关键是运行setup.sh的时候出的错误真的让人心力憔悴。

2.为了解决clone GitHub失败的问题还去Gitee创建了仓库,但是改变成开源还需要等很长时间,Gitee不和Github学点好的,尽瞎整。

3.解决了报错之后没有必要删掉容器或镜像重新来过,再次运行setup.sh就可以,docker会自动采用之前的cache,但前提是你的docker必须一直处于运行状态、没有stop存有cache的容器。

4. 这里附上一些实用的docker命令:

#启动所有容器:
docker start $(docker ps -aq)
#停止所有容器:
docker stop $(docker ps -aq)
#删除所有容器:
docker rm $(docker ps -aq)

写在最后

有问题欢迎在评论区探讨。

评论 19
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Burger~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值