情報系学生の備忘録

プログラミングなどの備忘録

Crow Translate とマウスジェスチャ を使った 英語PDF 読み

問題

Webブラウザで英語論文を流し見している際に,わからない単語や熟語をいちいち翻訳サイトへコピペして読むのが面倒. 特にPDFの場合,ブラウザの翻訳アドオンや拡張機能はうまく動作しない*1ので,個人的に不満です.

アドオン例

解決方法

Crow Translate というソフトを使えば,先の問題を解決できました. さらに,マウスジェスチャソフトを使えば,マウスのみで翻訳作業が完結するの便利です. また,ブラウザに依存した拡張機能でないので,evinceなどのPDFビューアでも動作するので,個人的に気にってます.

crow-translate.github.io

github.com

Crow Translate ができること

  • 単語または文章の翻訳
  • 単語または文章の読み上げ

公式サイトを見た感じ,対応している環境は Linux系とWindowで, 私はUbuntu 18.04でversion 1.0.0 の動作を確認しています.

翻訳手順

実際の翻訳手順としては以下のような流れです.

  1. バックグラウンドでCrow Translate を動作
  2. 翻訳したい文字列(文章でもOK)を選択
  3. 翻訳コマンドを入力
  4. 翻訳ポップアウトがマウスカーソル周辺に出現!

感想とマウスジェスチャのすすめ

タブなりウィンドウなりをいちいち切り替えて翻訳する必要がなく, 翻訳の質は Google翻訳*2で,ザッと読むには十分なレベルで個人的には満足です.

また,私はマウスジェスチャーソフト*3を使ってコマンドを入力するようにしているので, マウスの操作のみで,英語PDFをサクサク読め便利でおすすめです.

*1:単に私のサーベイ不足な可能性もあります

*2:Bing翻訳などにも変更可

*3:私の場合は easystroke https://github.com/thjaeger/easystroke/wiki

Steam 起動時に "glxchoosevisual failed" と表示された

環境

OS: Ubuntu 16.04 64bit

概要

Nvidia Driverをアップデートして、 Steamを起動すると以下のエラーが出た。

"glxchoosevisual failed"

解決方法

一度、以下のコマンドで nvidia関係のパッケージを削除してから ranfileからdriverをインストールし、32bit互換性ファイルを入れたら治った。

$ sudo apt purge nvidia*
$ sudo sh ./NVIDIA-Linux-x86_64-418.56.run

所感

とりあえず、runfileからやればなんとかなる。

いまさら chainer で Neural Style Transfer (画風変換)

Neural Style Transfer (画風変換)とは

2016年ごろから、Prismaをはじめとする写真をおしゃれに変換するアプリが出始め、人々の注目を集めています。

この写真の画風を変換する処理は Neural Style Tranfer という最近勃興している Deep Convolutional Neural Network (DCNN) を利用した技術です。

関係する論文として、Image Style Transfer Using Convolutional Neural Networks (2016)が挙げれます。この論文がNeural Style Transferの基礎となっているみたいです。

ざっくり説明すると、

ある程度良い特徴を学習しているNeural Networkに対して、2枚の画像(コンテツ画像とスタイル画像)からコンテンツ特徴とスタイル特徴を抽出します。 この2つの特徴を持った画像を生成するという技術です。

詳しい解説は Shinya Yuki さんなどの真面目なブログなどを見て下さい。私も Neural Style Transfer を理解するために読み参考にしました。

elix-tech.github.io

なぜ今、Neural Style Transfer

先日、投稿した記事より、せっかくCUDAを入れなおしたので、動作確認と勉強を兼ねて chainer で作ることにしました。 chan-qp.hatenablog.com

なお、以前からchainerを用いた Neural Style Transferは存在します。

実装

OS : Ubuntu 16.04 GPU : GTX750Ti

chainer version 3.2.0

githubに .ipynb形式であげています。 github.com

  • 入出力例
    f:id:chan_qp:20180307032608p:plain:w224
    入力コンテンツ画像

f:id:chan_qp:20180307032616p:plain:w224
入力スタイル画

f:id:chan_qp:20180307032623j:plain:w224
生成画像

  • 変化の様子

1000回くらい回しました結果です。

youtu.be

感想

Optimizerのパラメータをいじっていい感じの結果を見つけるのに、時間を費やし苦労しました。

また、chainer のOptimizer は Linkクラスをセットアップしないといけない点があり、はまりかけました。

暇なときに結果を追加するかも…

nvidia-smi が消えてからのCUDA復旧

環境

OS : Ubuntu 16.04 LTS

GPU : GeForce GTX 750 Ti

状況

先日、nvidia-smi を入力したら、コマンドが存在しないことになっていた。(アップデート・アップグレード時にやらかした?)

復旧すべく

先人たち

may46onez.hatenablog.com

www.rokudw.net

を参考に

    apt-get purge nvidia-*
    apt-get install nvidia-390

とか、

CUDAを使いたいので、

    apt-get purge cuda*
    apt-get install cuda

とかしても、nvidia-smiがない状態で正しく復旧できなかった。

復旧方法

  • NVIDIAの公式から runfileをダウンロードして、DriverとCUDAを入れなおす。

Driverも別のrunfileがダウンロードできますが、一緒にインストールできるのでCUDAを使うなら一緒でよいと思います。

DriverとCUDAを入れる前は以前あったDriverとCUDAをアンインストールしておく。

deb等のパッケージを使ったアップデート・インストールがうまくいかなったので、やってみたらうまくいきました。

Login Loop

私の環境だけかもしれませんが、 runfileでインストールしたら、login loop(パスワードを入力しても再び login 画面へ戻される)の現象が行ったので、 BOOT時のPRIMARY DISPLAYをオンボードからPCIに変更したら login loop は改善しました。 (なんでなんだろう…)

Layer-wise Relevance Propagation を Chainer で実装する

1. Layer-wise Relevance Propagation(LRP)

元論文が これ で、詳しいことは以下参照。

qiita.com

私はLRPを

一度データを順伝搬させて、出力層から各層の出力と重みを元に貢献度を求めていく手法

だと理解しています。

 

2. Chainer

国産のニューラルネットワーク用のフレームワークです。

一度、順伝搬させるとデータが数珠つなぎ的に残るので、個人的には使いやすくて好きです。

Chainer: A flexible framework for neural networks

 

3. 実装 (chainer v2.0.0)

Chainerは一度、順伝搬させるとデータと生成された層の種類を参照できるので、それを利用して実装します*1

現在は最低限、線形結合と畳込み、プーリングのみに対応しています。 また、入力zのshapeは(データ数, 出力ニューロン数)を想定しています。

import chainer
import numpy as np

def LRP(z, epsilon=0):
    creator = z.creator
    var = z
    # relevance value
    r = np.zeros(z.data.shape)
    for i, d in enumerate(z.data):
        r[i, d.argmax()] = d.max()

    while(creator is not None):
        x = creator.inputs[0].data
        y = creator.outputs[0]().data

        if len(creator.inputs) > 1:
            w = creator.inputs[1].data
        if creator.label == "LinearFunction":
            _y = y + epsilon*np.sign(y)
            r = x.reshape(r.shape[0], -1) * (np.dot(r/_y, w))
        elif creator.label == "Convolution2DFunction":
            _y = y + epsilon*np.sign(y)
            r = x * chainer.functions.deconvolution_2d(r.reshape(y.shape)/_y,
                                                       w).data
        elif creator.label == "MaxPooling2D":
            r = chainer.functions.unpooling_2d(
                r.reshape(y.shape),
                ksize=creator.kh,
                stride=creator.sy,
                outsize=x.shape[2:]).data

        var = creator.inputs[0]
        creator = var.creator
    return r

一応、出力層のデータが消えないように以下のhookを順伝搬の際に追加しました。

from chainer.function import FunctionHook

class RetainOutputHook(FunctionHook):
    def forward_postprocess(self, function, in_data):
        function.retain_outputs([0])

''' Example
with RetainOutputHook():
    z = model.predict(x)
'''

使用例はgithubに上げます。

github.com

*1:バグなどがあるかもしれません

chainer v2 導入メモ

環境

OS: Ubuntu 16.04

GPU: GeForce GTX 750 Ti

CUDA 8.0, cuDNN v5

cuda, cudnnはインスール済み

 

step 1.

pip install -U chainer

step 2.

pip install -U cupy

 

参考

Installation Guide — Chainer 2.0.0 documentation

CuPy – NumPy-like API accelerated with CUDA — CuPy 1.0.0.1 documentation