Ubuntu18.04にViZDoom+RTX2080対応Chainerの構築

強化学習でしばしば用いられるViZDoomというゲーム環境のセットアップと,これを深層学習で捌くためのGPU-Chainer環境の構築メモ.
GPUnvidiaのRTX2080を使っており,CUDA10.1/cuDNN7.6.4を対象.


# for ViZDoom

sudo apt update
sudo apt install build-essential
sudo apt install zlib1g-dev libsdl2-dev libjpeg-dev
sudo apt install nasm tar libbz2-dev libgtk2.0-dev cmake git
sudo apt install libfluidsynth-dev libgme-dev
sudo apt install libopenal-dev timidity libwildmidi-dev unzip
sudo apt install libmpg123-dev libsndfile1-dev libgtk-3-dev chrpath
sudo apt install libboost-all-dev

# for Python
sudo apt install libssl-dev
sudo apt install libreadline-dev libsqlite3-dev wget curl llvm
sudo apt install libncurses5-dev xz-utils tk-dev libxml2-dev
sudo apt install libxmlsec1-dev libffi-dev liblzma-dev

# for pyenv
git clone git://github.com/yyuu/pyenv.git ~/.pyenv
echo export PYENV_ROOT=$HOME/.pyenv >> ~/.profile
echo export PATH=$PYENV_ROOT/bin:$PATH >> ~/.profile
echo eval "$(pyenv init -)" >> ~/.profile

# setup user python
pyenv install 3.7.4
pyenv global 3.7.4
pip install --upgrade pip
pip install numpy
pip install vizdoom


ここまででViZDoomのセットアップ完了
続いてGPU使用可能なChainerのセットアップ


# for cuda

cd ~/
wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu1804/x86_64/cuda-repo-ubuntu1804_10.1.105-1_amd64.deb

sudo dpkg -i cuda-repo-ubuntu1804_10.1.105-1_amd64.deb
sudo apt-key adv --fetch-keys https://developer.download.nvidia.com/compute/cuda/repos/ubuntu1804/x86_64/7fa2af80.pub

sudo apt update
sudo apt install cuda

echo export PATH=/usr/local/cuda-10.1/bin:$PATH >> ~/.profile
echo export LD_LIBRARY_PATH=/usr/local/cuda-10.1/lib64:$LD_LIBRARY_PATH >> ~/.profile

 

# for cuDNN

# 一旦exitして,gui環境から https://developer.nvidia.com/rdp/cudnn-download にアクセス
# 対象のruntime/dev/docをダウンロード
# scpでリモートに送信

scp ./libcudnn7_7.6.4.38-1+cuda10.1_amd64.deb user@host:~/
scp ./libcudnn7-dev_7.6.4.38-1+cuda10.1_amd64.deb user@host:~/
scp ./libcudnn7-doc_7.6.4.38-1+cuda10.1_amd64.deb user@host:~/

# ふたたびリモートで作業
sudo dpkg -i libcudnn7_7.6.4.38-1+cuda10.1_amd64.deb
sudo dpkg -i libcudnn7-dev_7.6.4.38-1+cuda10.1_amd64.deb
sudo dpkg -i libcudnn7-doc_7.6.4.38-1+cuda10.1_amd64.deb

pip install cupy
pip install chainer

 

sudo reboot

Slade3の使い方メモ(随時更新)

DoomというゲームのレベルエディタであるSlade3の使い方に関するメモ

wad

  • とりあえずSlade3初心者なので既存のレベルをカスタムする方向で考える
  • Slade3を起動して.wadファイルをドラック&ドロップすることで編集を開始
  • レベルに関する全ての情報は.wadに集約される

ACS

アイテム

  • 「create a new empty entry」からdecorate.txtを作成
  • ここにDECORATE definitionを記述する
  • ACSから作成したものを参照することで新しいアイテムを作れる
  • 例えばStimpackは次のような記述 https://zdoom.org/wiki/Classes:Stimpack
  • 前述の方法でStimpack2を作成してInventory.Amountを10->30に変更すれば取得時のHealth回復量が30になる

マップ

  • TEXTMAPファイルを編集
  • 壁面や床のテクスチャを指定できる

例1

pickupするとダメージを受けるMedikit. MedikitのInventory.Amountを負の値にしてもダメージを受けるようなアイテムにはならないので以下のように実装. https://zdoom.org/wiki/A_DamageSelf を参考

Actor Medikit3 : CustomInventory
{
 +INVBAR
 Tag "Stimpack"
 Inventory.Amount 1
 Inventory.MaxAmount 25
 Inventory.PickupMessage "You found some stimpacks"
 Inventory.PickupSound "misc/i_pkup"
 States
 {
  Spawn:
   MEDI A -1
   Stop
  Pickup:
   TNT1 A 0 A_DamageSelf(25,"SelfDamage")
   Stop
  }
}

DamageType SelfDamage // New damage type to ignore armor
{
 Factor 1.0
 ReplaceFactor
 NoArmor
}

深層学習のモデル圧縮・高速化に関する論文80本ノック

こんにちは.無事に3年生に進級できてホッとしています.
昨年度から深層学習のモデル改変による高速化手法について調べていました.そんなわけで本稿では深層学習モデルのパラメータ容量の削減や高速化を目的とした手法に関する論文を80本紹介します.
一部, ハイパーパラメータ探索(Neural Architecture Search等)の論文を「高速なモデルの探索に使えないかな〜」というきもちで含めました.
また, 蒸留に関する論文は必ずしも高速化を狙ったものだけではなく, 蒸留そのものの派生論文についても含めています.
全ての論文について詳解ではなく雑な概要のみ記載しています.
サーベイする際のガイドにでも使っていただければ幸いです. サクッと読んだだけの論文も多々ありますので間違い等ございましたらご指摘ください.
では参りましょう.

高速なモデルアーキテクチャ

より良い速度と精度のトレードオフを持つマイクロモジュールを積層することでネットワークを構成する手法が主流です.

[1] Xception: Deep Learning with Depthwise Separable Convolutions

2016/10
Inception V3と同等のパラメータ数ながら, より精度の高いXceptionモデルを提案.

[2] SqueezeNet: AlexNet-level accuracy with 50x fewer parameters and <0.5MB model size

2016/02
3*3Conv層の前に少ないフィルタ枚数の1*1Conv層を挿入することで, 3*3Conv層への入力チャネルを削減し高速化する構造の提案.

[3] ENet: A Deep Neural Network Architecture for Real-Time Semantic Segmentation

2016/06
semantic segmentationを行う既存モデルのSeg-Netを入力近傍の層での強力なダウンサンプリングにより高速化.

[4] MobileNets: Efficient Convolutional Neural Networks for Mobile Vision Applications

2017/04
depthwise separable convolutionにBatchNormalizationと活性化関数を組み合わせたモジュールの積層による計算コストの低いモデルアーキテクチャの提案.

[5] clcNet: Improving the Efficiency of Convolutional Neural Network using Channel Local Convolutions

2017/12
grouped convが2層続く形式のモジュール構造は高速だが出力チャネルが一部の入力チャネルしか参照できないため精度が落ちる.これを解消した「Interlaced grouped convolution」を提案し, これを用いたclcブロックによるclcNetを提案.

[6] ShuffleNet: An Extremely Efficient Convolutional Neural Network for Mobile Devices

2017/07
1*1 pointwise convolutionは頻出であるが, これはチャネル方向への参照範囲が大きくコストが高い.これをgrouped convolutionに変更し, 更に出力チャネルが全ての入力チャネルを参照できるよう「channel shuffle」(チャネルの入れ替え)を行う層を提案.

[7] Wide Residual Networks

2016/05
ResNet比で浅く幅の広いモデルアーキテクチャを提案.深いモデルより並列計算の恩恵を受けやすくなる.

[8] Shift: A Zero FLOP, Zero Parameter Alternative to Spatial Convolutions

2017/11
shiftと呼ばれる, 入力を空間方向にずらすだけの層を提案し, これを用いたモデルを構築.

[9] ProjectionNet: Learning Efficient On-Device Deep Networks Using Neural Projections

2017/08
locality sensitive hashingを用いてrepresentationを一部バイナリ化することで高速化.

[10] Convolution with Logarithmic Filter Groups for Efficient Shallow CNN

2017/07
grouped convolutionにおいてグループの分け方を改良し精度を向上.

低ランク近似

全結合層におけるパラメータ行列や, 畳み込み層におけるパラメータテンソルを分解し低ランク近似することでパラメータ容量と計算量の削減を行います. また, 低ランクなフィルタの最適化手法として, filter reconstruction・data reconstruction・正則化学習・事前分解の4つのパターンが存在します.

[11] Restructuring of Deep Neural Network Acoustic Models with Singular Value Decomposition

2013/01
重み行列を特異値分解して低ランク近似することで計算量・パラメータ容量を削減.

[12] Compression of Deep Convolutional Neural Networks for Fast and Low Power Mobile Applications

2015/11
畳み込み層をTucker2分解・低ランク近似することで高速化・パラメータ容量を削減.

[13] Speeding up Convolutional Neural Networks with Low Rank Expansions

2014/05
n*nフィルタを1*nとn*1フィルタに分解することで高速化.

[14] Learning Separable Filters

2013
畳み込みフィルタの低ランク近似とその最適化手法.

[15] Flattened Convolutional Neural Networks for Feedforward Acceleration

2014/12
Convolutionを1*1conv -> d*1 depthwiseconv -> 1*d depthwiseconvに分解し低ランク近似することでパラメータ容量と計算コストを削減.

[16] Accelerating Very Deep Convolutional Networks for Classification and Detection (Efficient and Accurate Approximations of Nonlinear Convolutional Networksとほぼ同じ)

2015/05
Convolutionを2つのConvolution層に分解し低ランク近似することでパラメータ容量と計算コストを削減.

[17] Speeding-up Convolutional Neural Networks Using Fine-tuned CP-Decomposition

2014/12
畳み込み層をCP分解により1*1Conv->d*1Depthwise->1*dDepthwise->1*1Convの4層に分解し低ランク近似することでパラメータ容量と計算コストを削減.

[18] Exploiting Linear Structure Within Convolutional Networks for Efficient Evaluation

2014/04
オーソドックスなフィルタ分解による低ランク近似の他に, 最初のConvolution層について, チャネル方向にランク数を1とする低ランク性を導入したMonochromatic Convolution Approximationを提案. また, クラスタリングによってグループの分け方を決定するgrouped convolutionと, その低ランク近似手法も同時に提案.

[19] Quantized Convolutional Neural Networks for Mobile Devices

2015/12
全結合層の低ランク近似手法の提案.

[20] Design of Efficient Convolutional Layers using Single Intra-channel Convolution, Topological Subdivisioning and Spatial “Bottleneck” Structure

2016/08
チャネル方向への疎結合性を持つSingle Intra-channel ConvとTopologica Subdivisioningを提案. また, ストライドの大きい(depthwise separable)convとdeconvを組み合わせてrepresentationを小さく抑えるBottleneck Structureを提案.

[21] Training CNNs with Low-Rank Filters for Efficient Image Classification

2015/11
(空間方向のフィルタサイズをdとして)
1*d conv と d*1 conv をパラレルに実行し, その後pointwise convを実行する形式のフィルタ分解を提案.

[22] Convolutional neural networks with low-rank regularization

2015/11
convolutionを2層に分解し, チャネル方向への低ランク性と空間方向への分解(d*d convを1*d -> d*1で実行)を同時に導入することで計算コストを削減.

[23] Low-rank matrix factorization for Deep Neural Network training with high-dimensional output targets

2013/05
音響・言語といった時系列モデルの最終層の低ランク近似.

[24] On Compressing Deep Models by Low Rank and Sparse Decomposition

2017
フィルタ分解による低ランク近似を行う際の最適化手法に関する論文.

[25] SVD-Softmax: Fast Softmax Approximation on Large Vocabulary Neural Networks

2017
ソフトマックス層の重みを特異値分解して低ランク近似し, 出力の高い上位N次元について, フルランクで再度計算し直すことで精度を向上.

[25] Fast ConvNets Using Group-wise Brain Damage

2015/06
畳み込み層の分解によるパラメータ容量の削減と高速化手法を提案. またGradual group-wise sparsificationと呼ばれる正則化手法も同時に提案.

[27] Compressing Deep Neural Networks using a Rank-Constrained Topology

2015
音声認識モデルの特異値分解による圧縮.

[28] Compression-aware Training of Deep Networks

2017/11
低ランク近似の学習スキームに関する論文.

[29] LCNN: Lookup-based Convolutional Neural Network

2016/11
convのカーネルを一定個数の辞書の重み付き和で表現することで高速化.

蒸留

蒸留(Distillation)とは, アンサンブルモデルなどの計算コストの高いモデルの出力を小さいモデルのターゲットに用いて学習する手法のことです.一般に, キャパシティの小さなモデルを1hotベクトルを用いて学習すると高い精度が得難いことが知られていますが, 蒸留により緩和されるケースがあります.

[30] Distilling the Knowledge in a Neural Network

2015/03
大きいモデルが各データに対して出力したソフトラベルを小さいモデルのターゲットとして学習することで小さいモデルの精度を向上する.

[31] Do Deep Nets Really Need to be Deep?

2013/12
教師モデルが出力したlogit(ソフトマックスを適用前の出力層の活性)を生徒モデルのターゲットとして学習することで浅く幅の広い生徒モデルの精度を向上する.

[32] Face Model Compression by Distilling Knowledge from Neurons

2016
顔認識タスクに対するdistillationは出力層の各ノードが各個人に対応している場合, 非常に高次元なソフトターゲットが生成される為学習が困難だった. ターゲットとして用いるノードを選別しlogitで蒸留することでこの問題を解決.

[33] FitNets: Hints for Thin Deep Nets

2014/12
中間層でも蒸留を行うことで深く幅の小さい生徒モデルにおいても精度を向上させる手法を提案.

[34] Paying More Attention to Attention: Improving the Performance of Convolutional Neural Networks via Attention Transfer

2016/12
中間層の活性について空間方向に寄与度を計算し(Attention Map), 教師モデルでのAttentionMapを生徒モデルへ蒸留することで生徒モデルの精度を向上する.

[35] Learning Efficient Object Detection Models with Knowledge Distillation

2017
object detectionモデルに対する蒸留.中間層でhint layerを用いることで生徒モデルの精度を向上.

[36] Model Compression

2006
精度の高いアンサンブルモデルがデータのラベリングを行い, 得られたラベル付きデータで小さなモデルを学習する.

[37] Born Again Neural Networks

2017
教師モデルから同じようなキャパシティの生徒モデルへの蒸留. これを繰り返すことで更に精度が向上することを実験的に主張.

[38] Towards Effective Low-bitwidth Convolutional Neural Networks

2017/11
量子化において, 重みと活性の両方を量子化するのは学習が難しいが各層での蒸留を用いてこの問題を改善する.

[39] Deep Mutual Learnings

2017/06
2モデルを同時に学習させ, その際の各モデルのソフトラベルを互いに蒸留することで精度を向上する.

[40] Transparent Model Distillation

2018/01
全結合ニューラルネットを学習して教師モデルとし, そのソフトラベルを蒸留して解釈容易なモデルを学習する.

[41] Data-Free Knowledge Distillation for Deep Neural Networks

2017/10
プライバシーの問題が絡むデータや, データセットを公開できない場合を想定し, そのようなデータで学習されたモデルを入手した側が, データ無しでモデル圧縮を行う手法を提案.

量子化

モデル圧縮の文脈での量子化手法は, 多くの場合パラメータに小さいビット数を割り当てることで容量の削減並びに処理系による高速化を狙うものです.手法によってはrepresentationの量子化も行います. 本稿では近年話題の1bit量子化の論文を列挙します.

[42] BinaryConnect: Training Deep Neural Networks with binary weights during propagations

2015/11
バイナリ(-1,+1)のパラメータの導入による高速化, パラメータ容量の削減を提案.

[43] Binarized Neural Networks: Training Deep Neural Networks with Weights and Activations Constrained to +1 or -1

2016
パラメータの二値化に加え, representationの二値化を提案. 但し入出力層のrepresentationは二値化しない.

[44] XNOR-Net: ImageNet Classification Using Binary Convolutional Neural Networks

2016/03
パラメータとrepresentationを二値化するニューラルネットの提案.

ハイパーパラメータ探索

より良い速度と精度のトレードオフを持つモデルアーキテクチャを発見できれば, それ自体を高速化と捉えることができます.

[45] Regularized Evolution for Image Classifier Architecture Search

2018/02
Neural Architecture Searchにおいて, 進化的アルゴリズムと強化学習を比較. また, 遺伝的アルゴリズムのトーナメント選択方式を改良して生成したモデルはCIFAR-10でSOTA.

[46] Efficient Neural Architecture Search via Parameter Sharing

2018/02
Neural Architecture Searchにおいて, 子モデルのパラメータを共有しながらハイパーパラメータを探索することでモデル構造の探索を高速化.GTX1080Tiで16時間.

[47] Net2Net: Accelerating Learning via Knowledge Transfer

2015/11
精度に悪影響を与えないように徐々にモデルのキャパシティ(幅・深さ)を大きくしていく手法の提案.

[48] Neural Architecture Search with Reinforcement Learning

2016/11
強化学習を用いて精度の高いモデルアーキテクチャの探索を行う.

[49] Learning Transferable Architectures for Scalable Image Recognition

2017/07
強化学習を用いて画像認識モデルのモジュール構造を探索.CIFARで探索した構造をImageNetに適用することで探索時間を短縮.

[50] Progressive Neural Architecture Search

2017/12
モデルアーキテクチャから精度を予測するRNNを用いて, モデルアーキテクチャを全探索する時間を短縮.

[51] Convolutional Neural Networks at Constrained Time Cost

2014/12
CNNのハイパーパラメータが時間計算量と精度にどのように影響するか実験的に分析した論文.

スパースなモデル

学習済みネットワークを任意の部分に分解し, 各部分に何らかの指針で重要度を割り当て, 重要度の低い部分を0にすることでパラメータ容量を削減する手法をPruningと呼びます.Pruningによって得られたモデルはそのスパースな構造によりパラメータ容量の削減, 場合によっては高速化が行えます. また, 初めからスパースなモデルを学習する手法も以下に列挙します.

[52] Reducing the Model Order of Deep Neural Networks Using Information Theory

2016/05
フィッシャー情報量の小さな重みからPruningすることでパラメータ容量を削減.

[53] Optimal Brain Damage

1990
目的関数のヘッセ行列の対角成分を用いて重み毎の重要度を計算し, 重要度が低い重みから0に置き換えることでパラメータ容量を削減する手法を提案.

[54] Deep Compression: Compressing Deep Neural Networks with Pruning, Trained Quantization and Huffman Coding

2015/10
pruning, 量子化, ハフマン符号化によりパラメータ容量を削減.

[55] Sparsifying Neural Network Connections for Face Recognition

2015/12
2ノード間の活性の相関を基準にしたPruningによるパラメータ容量の削減手法の提案.

[56] Optimal Brain Surgeon and general network pruning

1993/03
目的関数のヘッセ行列の非対角成分まで用いたPruning手法の提案.

[57] The Power of Sparsity in Convolutional Neural Networks

2017/02
スパースなコネクションを持つモデルを学習.

[58] Learning Structured Sparsity in Deep Neural Networks

2016/08
正則化学習による低ランク構造の誘引について述べた論文.更に層を丸ごと削るlayer pruningも提案.

[59] Group Sparse Regularization for Deep Neural Networks

2016/07
正則化項を比較し, どれがより強くスパース性を誘引するかを検証.

[60] Structured Bayesian Pruning via Log-Normal Multiplicative Noise

2017/05
dropoutによる変分ベイズ推定を用いてパラメータに分布を導入. 導入した分布によりスパースなパラメータの学習が誘引される.

[61] Channel Pruning for Accelerating Very Deep Neural Networks

2017/07
畳み込みフィルタをpruningすることでパラメータ容量と計算コストを削減.

[62] Pruning Filters for Efficient ConvNets

2016/08
学習済みモデルの畳み込みフィルタをpruning.

[63] Learning both Weights and Connections for Efficient Neural Networks

2015/01
スパースなパラメータを持つモデルの学習スキームに関する論文.

[64] Bayesian Compression for Deep Learning

2017/05
dropoutによる変分ベイズ推定を用いてパラメータに分布を導入. 導入した分布によりスパースなパラメータの学習が誘引される.

[65] Runtime Neural Pruning

2017
順伝播時のrepresentationを用いて次の層のpruningの対象を決めるRNNをQ学習することで, データ毎に異なるフィルタをpruningする手法を提案.

[66] The Lottery Ticket Hypothesis: Training Pruned Neural Networks

2018/03
これまでニューラルネットワークの圧縮は, 初めから小さなキャパシティのモデルを学習すると高い精度が得難いことが知られていた. これに対して学習済みモデルを重みの絶対値に基づいてpruningし, 残った部分の初期重みだけでキャパシティの小さいモデルをもう一度学習し直すと高い精度が得られることを示した.

[67] Learning Sparse Neural Networks through L0 Regularization

2017/12
network-pruningのために行われるL0ノルム正則化微分不可能でNP困難である. これを近似して最適化を行う手法を提案.

[68] Faster gaze prediction with dense networks and Fisher pruning

2018/01
Twitterがタイムラインに投稿された画像を表示する際のクリップ位置を決定する視線推定DNNが存在する.そのモデルの高速化に際するpruning手法に関する論文.

[69] Recovering from Random Pruning: On the Plasticity of Deep Convolutional Neural Networks

2018/01
pruningにおいて各重みの重要度を計算する指標は重要ではなく, random pruningを行った(つまり何のポリシーもなくpruningを行った)場合でもfine tuningにより, 作り込んだ指標でpruningした場合と同程度まで精度が回復することを実験的に示す.

[70] Net-Trim: Convex Pruning of Deep Neural Networks with Performance Guarantee

2016/11
filter pruningにおけるdata reconstructionと呼ばれる最適化手法に関する論文.

[71] Predicting Parameters in Deep Learning

2013/06
少数のパラメータから残りのパラメータを補間することで学習対象のパラメータ数を削減する手法を提案.

その他

実装を工夫したり, パラメータ行列を制約して高速なアルゴリズムを適用する手法を以下に列挙します.

[72] An Exploration of Parameter Redundancy in Deep Networks with Circulant Projections

2015/02
全結合層の重み行列を巡回行列に制限し, 順伝播をFFTで計算することでオーダーを削減する手法を提案.

[73] Compressing Neural Networks with the Hashing Trick

2015/04
ランダムな重みの共有と, そのハッシュ関数による表現によりパラメータ容量を削減.

[74] Structured Transforms for Small-Footprint Deep Learning

2015/10
重み行列に巡回行列等の制約を導入してFFTで計算することで高速化.

[75] Deep Fried Convnets

2014/12
全結合層を制約付き行列6つの積で近似し, 順伝播を高速ウォルシュアダマール変換で計算することでパラメータ容量を削減.

[76] Fast Algorithms for Convolutional Neural Networks

2015/09
Convolutionを工夫して乗算回数を減らすアルゴリズム「winograd」の提案.

[77] cuDNN: Efficient Primitives for Deep Learning

2014/10
cuDNNのim2col実装について述べた論文.

[78] MEC: Memory-efficient Convolution for Deep Neural Network

2017/06
im2colをベースに, imの展開にオーバーラップを導入することでメモリ効率を向上.

サーベイ論文

本稿の如く(?)モデル圧縮分野を俯瞰する内容の論文です.

[79] Recent Advances in Efficient Computation of Deep Convolutional Neural Networks(A Survey on Acceleration of Deep Convolutional Neural Networks)

2018/02
サーベイ論文.pruningとdecompositionに詳しい.

[80] A Survey of Model Compression and Acceleration for Deep Neural Networks

2017/10
サーベイ論文.蒸留に詳しい.

謝辞

本稿はIdein Inc.でのアルバイトで得られた調査内容を含んでいます.
本稿の公開を快諾して下さった社に感謝の意を表します.

Windows10 + GTX1080Ti + Chainer

GTX1080Tiでディープラーニングを加速させたい.それだけ.

 

1. GTX 1080TiをPCI Expressに繋ぐ

ちなみに電源は600Wにしました.

 

2.BIOSの設定を確認してビデオカードの優先度をPCI Express > オンボードにする

 

3.ディスプレイとGPUを繋ぐ.

要するにGPU経由でディスプレイを表示してみる.この段階ではドライバとかは必要ない.むしろドライバをインストールする際にデバイスを認識させる必要があるのだが, GPU経由でディスプレイを表示しないと認識されなかった.

 

4.GeForceのドライバをインストール

とりあえずいれれば入る.

 

5.Visual Studio 2015をインストール

カスタムインストールにしてVisual C++ にチェックを入れる

 

6.CUDA 9.0をインストール

8だとGTX1080Tiを認識してくれなかった.

 

7.cuDNN 7.0をインストール

インストールというかzipの中身をコピーするだけ.

Windows向けのセットアップガイドだと5.1とか多いけど, CUDA9にはcuDNN7からしか対応してない.

 

8.pip install cupy --no-cache -vvvvする

ここでNVIDIA Tools Extensionに関するWarningが出る場合は環境変数PATHとINCLUDEにパスを追記することで消せる.消さなくてもイケるかはわかりません.

追記するパスはC:¥Program Files¥NVIDIA Corporation¥NvToolsExt¥以下を確認して下さい.

その他にNCCLに関するWarningが出るが無視でOK.

バージョンは2系.

 

9.pip install chainerする

ここでコケたことはない.バージョンは3系.

 

 

NCCLに関するWarningは無視できる.

そしてLinuxをレコメンドされる.

github.com

 

 

とりあえずChainer公式のMNIST Exampleが秒間20イテレーションから160イテレーションになった.

 

 

 

 

 

 

 

 

 

 

 

 

 

ECU その1

ECUとかインジェクションとかの仕組みが気になったので調べてみた. やりたいことがあるとすれば,

くらいだろうか.

以下, YZF-R15 Ver1 Service Manualより引用・翻訳

OUTLINE OF THE FI SYSTEM

燃料供給システムの主な機能は, エンジンの動作状態と大気温度に従って最適な空燃比で燃焼室へ燃料を送ることです.
従来のキャブレターシステムでは, 燃焼室へ供給される空燃比は, 流入する空気の量とそれぞれのキャブレターで使われているジェットによって計量された燃料によって生み出されていました.
同じ空気の流入量にも関わらず, 必要な燃料の量はエンジンの動作状態, 例えば加速, 減速, 荷重によって異なります.
キャブレターはジェットと様々な補助機器により燃料を計量します, そのためエンジンの動作状態の一定の変化に適応するために最適な空燃比を達成できます.
エンジンの性能向上とより綺麗な排気ガスを得るための要件として, 空燃比をより正確に,細かく調整する方法が必要になっています.
これに対応するために, このモデルでは電子制御燃料供給システムを従来のキャブレターに変えて採用しています.
このシステムでは如何なるエンジンの状態でも, 様々なセンサーの入力から燃料供給量を決定するマイクロプロセッサーを用いることで最適な空燃比達成することができます.
この燃料供給システムを採用することで, 正確な燃料供給, エンジンの応答性の向上, 燃費, 排ガスの削減を達成しました.

FI SYSTEM

フューエルポンプはフューエルフィルターを通してフューエルインジェクターに燃料を送ります.
プレッシャーレギュレーターはインジェクターへの燃料の圧力を250kPaに維持します.
ECUからフューエルインジェクターへの信号に応じて燃料の通路が開き, その間だけインテークマニフォールドへ燃料が送られます.
従って, 長い時間インジェクターへ活性の信号を送ると, 多くの燃料が供給されます. 逆に, 短い時間インジェクターを活性させると, 少ない燃料が供給されます.
インジェクションの期間とタイミングはECUにより決定されます.
- スロットルポジションセンサー
- クランクシャフトポジションセンサー
- インテークエアー圧力センサー
- インテークエアー温度センサー
- リーンアングルセンサー
- クーラント温度センサー
から入力される信号によりECUがインジェクションの期間を決定します.
インジェクションのタイミングはクランクシャフトポジションセンサーからの信号により決定されます.
結果として, 運転状況に応じた必要な燃料の量を常に供給できます.

SENSOR

  • Crankshaft position sensor resistance : 248–372 Ω at 20℃
    • クランク角が死点の時だけ抵抗が変化して電圧が上下する仕組み
  • Intake air temperature sensor resistance : 5.7–6.3 kΩ
  • Coolant temperature sensor resistance : 310–326 Ω at 80℃
  • Intake air pressure sensor output voltage : 0.789–4.000 V at 20.00–101.32 kPa
  • Lean angle sensor output voltage
    • Less than 65°: 0.4–1.4 V
    • More than 65°: 3.7–4.4 V
  • Throttle position sensor
    • (closed position) 0.63–0.73 V
    • 開度に応じて電圧が上昇
  • Speed sensor
    • フロントホイール1周毎に0Vと5Vを往来する

所感

  • 本質的にやることはインジェクターへパルスを送る時間の変更だけ
    • すなわち1回の爆発に使う燃料の量が変わる
  • パルスの周期はクランク角に依存なので変更は無い
  • やりたいことを振り返ってみると「特定の条件で, フューエルカット」というものが多いので, ECUそのものをリプレースするのではなく, インジェクター手前に挿入するデバイスとして考えるのも良さそう

YAMAHA YZF-R15(Ver2) ハンドルの交換

ハンドルを買う

YZF-R15のフォーク径は33φです。バーの径は22.2φです。

 

注意点1

主に垂れ角調節が出来るセパハンは, ハンドルバーとフォーククランプの連結部分がフォーククランプの最下部より更に下にはみ出る場合が多いです。このはみ出た部分がアッパーブラケットピンチボルトに干渉します。

従って, 設置する際に, はみ出る量だけアッパーブラケットからハンドルを浮かせて固定することになります。フォーククランプより下にはみ出る量が出来るだけ少ない製品を選びましょう。

 

注意点2

ハンドルバーの根元がアッパーブラケットから離れ過ぎるとブレーキホースの長さが純正のものだと足りなくなります。フォーククランプとハンドルバーが出来るだけ水平な製品を選びましょう。

 

以下に上手く付けられない製品の写真を示します。

 

f:id:madoibito80:20170712002535j:plain

フォーククランプより下にはみ出る量が多いです。

 

 

f:id:madoibito80:20170712002548j:plain

アッパーブラケットとハンドルバーの根元の高低差が大きいのでブレーキホース長が足りなくなります。

 

 

 

 

以下に上手く付けられる製品を示します。ヤフオクで33φのセパハンを覗くとほとんど以下の製品一択になりそうです。

 

 

f:id:madoibito80:20170712002637j:plain

 

f:id:madoibito80:20170712002647j:plain

 

上の写真の製品だとアッパーブラケットの上に付きます。ブレーキホースの交換も不要です。

 

 

 

 

 

YAMAHA YZF-R15(Ver2) スターターモーターの点検

下図を参考にモーターを外します。

 

f:id:madoibito80:20170711154135p:plain

(R15 ver1のサービスマニュアルから引用)

 

 

外すと以下のようになります

 

f:id:madoibito80:20170711154207j:plain

 

f:id:madoibito80:20170711154223j:plain

 

この状態のスターターモーターのプラス端子(上の画像で上側に突き出している部分)とバッテリーのプラス端子を接続します。また, バッテリーのマイナスとモーターの胴体部分の適当な部分を接続します。この状態でモーターが回転すれば異常はありません。

 

 

ちなみに失くした時の参考までに, スターターモーターのプラス端子を留めるボルトはM5 10mmで丁度良いです。