다음의 내용은 Raspberry PI 3 에 Tensorflow을 설치하는 순서를 알려준다.
https://ubuntu-mate.org/raspberry-pi/ 에서 Ubuntu Mate을 설치한다.
기본적으로 Python 2.7, 3.5 가 설치되어 있다.
arm7l 용으로 build 되어 있는 tensorflow는 https://github.com/samjabrahams/tensorflow-on-raspberry-pi/releases/
에서 구할 수 있는 데 Python 3.4이다.
( Python 3.5용은 별도로 compile해야 하므로 시간이 많이 걸린다. 거의 할 수 없다. )
해서 miniconda을 설치하면서 Python 3.4을 설치하고 tensorflow for Python 3.4을 설치한다.
$ wget http://repo.continuum.io/miniconda/Miniconda3-3.16.0-Linux-armv7l.sh <br/>
$ md5sum Miniconda3-3.16.0-Linux-armv7l.sh <br/>
$ /bin/bash Miniconda3-3.16.0-Linux-armv7l.sh
export PATH="/home/jaehyek/miniconda3/bin:$PATH"
Tensorflow 을 설치한다.
https://github.com/samjabrahams/tensorflow-on-raspberry-pi 을 참조하여 설치한다.
$ sudo apt-get update
$ sudo apt-get install python3-pip python3-dev
$ wget https://github.com/samjabrahams/tensorflow-on-raspberry-pi/releases/download/v1.0.1/tensorflow-1.0.1-cp34-cp34m-linux_armv7l.whl <br/>
$ pip3 install --user tensorflow-1.0.1-cp34-cp34m-linux_armv7l.whl <br/>
OpenCV을 설치한다.
http://www.emindlab.com/raspberry-pi/opencv-3-1-0-raspberry-pi.html 여기를 참조한다.
sudo apt-get update
sudo apt-get upgrade
sudo apt-get install guvcview synaptic python-dev python-numpy python-scipy python-matplotlib
sudo apt-get install python-pandas python-nose build-essential cmake pkg-config
sudo apt-get install default-jdk ant libgtkglext1-dev bison libqt4-dev-tools libqt4-dev libqt4-core libqt4-gui v4l-utils
sudo apt-get install qtcreator
sudo wget http://liquidtelecom.dl.sourceforge.net/project/opencvlibrary/opencv-unix/3.1.0/opencv-3.1.0.zip
sudo unzip opencv-3.1.0.zip
cd opencv-3.1.0
sudo mkdir build
cd build
sudo cmake -D CMAKE_BUILD_TYPE=RELEASE -D INSTALL_C_EXAMPLES=ON –D INSTALL_PYTHON_EXAMPLES=ON -D BUILD_EXAMPLES=ON
-D CMAKE_INSTALL_PREFIX=/usr/local -D WITH_OPENGL=ON -D WITH_V4L=ON –D BUILD_NEW_PYTHON_SUPPORT=ON -D WITH_TBB=ON ..
sudo make
sudo make install
sudo nano /etc/ld.so.conf.d/opencv.conf
/usr/local/lib
Press Control + X to save
sudo ldconfig
sudo nano /etc/bash.bashrc
export PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig
cd opencv-3.1.0/samples/cpp
g++ -o facedetect facedetect.cpp `pkg-config opencv --cflags --libs`
./facedetect
https://docs.google.com/document/d/1OcVoQi8UJ2bCtJ2nFPkI-eZi9kuQoqthpOwpCpLGwJE/edit?usp=sharing
Camera을 enable한다. 그리고 확인해 본다
https://larrylisky.com/2016/11/24/enabling-raspberry-pi-camera-v2-under-ubuntu-mate/ 여기를 참조한다.
sudo apt-get update
sudo apt-get upgrade
sudo apt-get install raspi-config rpi-update
sudo raspi-config
make sure /boot/config.txt
start_x=1
gpu_mem=128
만일 다음과 같이 error가 난다면,
mmal: mmal_component_create_core: could not find component 'vc.camera_info'
mmal: Failed to create camera_info component
mmal: mmal_component_create_core: could not find component 'vc.ril.camera'
mmal: Failed to create camera component
mmal: main: Failed to create camera component
mmal: Failed to run camera app. Please check for firmware updates
old version을 다운한다.
sudo rpi-update 667cfabe63bc663383559ef88317e86f9bd41e45
그리고 다음을 수행한다.
git clone https://github.com/raspberrypi/userland.git
cd userland
./buildme
touch ~/.bash_aliases
echo -e 'PATH=$PATH:/opt/vc/bin\nexport PATH' >> ~/.bash_aliases
echo -e 'LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/opt/vc/lib\nexport LD_LIBRARY_PATH' >> ~/.bash_aliases
source ~/.bashrc
sudo ldconfig
sudo reboot now
마지막 확인하기
$ raspivid -p 0,0,640,480 -t 0
python에서 opencv을 열어서 확인하기.
webcam.py
import cv2
def show_webcam(mirror=False):
cam = cv2.VideoCapture(0)
while True:
ret_val, img = cam.read()
if mirror:
img = cv2.flip(img, 1)
cv2.imshow('my webcam', img)
if cv2.waitKey(1) == 27:
break # esc to quit
cv2.destroyAllWindows()
def main():
show_webcam(mirror=True)
if __name__ == '__main__':
main()
다음의 내용은 여기을 참조하자.
conda install pandas matplotlib scikit-learn
pip install keras
conda install jupyter notebook
다음의 내용은 여기에서 퍼 왔습니다.
1.0.0rc0 정식 출시에따라 겪게되는 맨붕 사태를 정리해 봤습니다.
2017-3-2 삭제 예정. 아직은 경고만 뜹니다만 미리 변경을 추천드립니다.
v0.x 일반적인 코드
saver = tf.train.Saver(tf.all_variables())
v1.0.0rc0
saver = tf.train.Saver(tf.global_variables())
v0.x 일반적인 코드
sess.run(tf.initialize_all_variables())
v1.0.0rc0
sess.run(tf.global_variables_initializer())
또는
sess.run(tf.local_variables_initializer())
저장 포멧 변경으로 하위 호환이 사라짐. 하위 호환이 필요없다면 무시 가능
v0.x 일반적인 코드
tf.train.Saver(max_to_keep=200)
호환이 필요하다면 다음과 같이 해야함(미지정 시 기본 포멧이 V2로 저장됨)
tf.train.Saver(max_to_keep=200, write_version=tf.train.SaverDef.V1)
전체적으로 summery 관련 함수들이 tf에서 tf.summery로 이동되고 Summery prefix가 삭제되는 형태의 단순 이름 변경.
단순히 이름만 변경됨.
v0.x 일반적인 코드
train_writer = tf.train.SummaryWriter('log/', sess.graph)
v1.0.0rc0
train_writer = tf.summary.FileWriter('log/', sess.graph)
단순히 이름만 변경됨.
v0.x 일반적인 코드
merged = tf.merge_all_summaries()
v1.0.0rc0
merged = tf.summary.merge_all()
단순히 이름만 변경됨. 비슷한 류의 summary 함수들 모두 동일하게
*_summary => summary.*
v0.x 일반적인 코드
cost_summary = tf.scalar_summary('Cost', cost)
v1.0.0rc0
cost_summary = tf.summary.scalar('Cost, cost)
Argument가 암시적 지정 방식을 더이상 지원하지 않습니다. 명시적 지정이 필요합니다.
v0.x 일반적인 코드
cost = tf.nn.softmax_cross_entropy_with_logits(pred, y)
v1.0.0rc0
cost = tf.nn.softmax_cross_entropy_with_logits(logits=pred, labels=y)
패키지명 단순 이동.
v0.x 일반적인 코드
encoDecoCell = tf.nn.rnn_cell.BasicLSTMCell(self.args.hiddenSize, state_is_tuple=True)
v1.0.0rc0
encoDecoCell = tf.contrib.rnn.BasicLSTMCell(self.args.hiddenSize, state_is_tuple=True)
패키지명 단순 이동. legacy가 붙은걸 봐선 권장하는 방식이 아닐진데… 더 이쁘게 업그레이드 하는 방법 아시는분 추천 부탁드립니다.
v0.x 일반적인 코드
decoderOutputs, states = tf.nn.seq2seq.embedding_rnn_seq2seq(
self.encoderInputs,
self.decoderInputs,
encoDecoCell,
self.textData.getVocabularySize(),
self.textData.getVocabularySize(),
embedding_size=self.args.embeddingSize,
output_projection=outputProjection.getWeights() if outputProjection else None,
feed_previous=bool(self.args.test)
)
v1.0.0rc0
decoderOutputs, states = tf.contrib.legacy_seq2seq.embedding_rnn_seq2seq(
self.encoderInputs,
self.decoderInputs,
encoDecoCell,
self.textData.getVocabularySize(),
self.textData.getVocabularySize(),
embedding_size=self.args.embeddingSize,
output_projection=outputProjection.getWeights() if outputProjection else None,
feed_previous=bool(self.args.test)
)
잘돌아가던 rnn이 업그레이드 후 이상동작을 보인다면 95.135%는 여기가 문제입니다.
v0.x 일반적인 코드
inputs = tf.split(1, seq_length, tf.nn.embedding_lookup(embedding, input_data))
v1.0.0rc0
# inputs = tf.split(1, seq_length, tf.nn.embedding_lookup(embedding, input_data))
inputs = tf.split(tf.nn.embedding_lookup(embedding, input_data), seq_length, 1)
다행히 v2 함수가 따로 준비되어서 당분간 기존 함수로도 수정 없이 무난히 동작합니다.
v0.x에 잘돌아가던 코드
output = tf.reshape(tf.concat(1, outputs), [-1, rnn_size])
v1.0.0rc0
output = tf.reshape(tf.concat_v2(outputs, 1), [-1, rnn_size])
Cause | Description |
---|---|
A. Alpha particles from package | caused by radioactive materials Trace within package |
B. Cosmic rays creating energetic neutrons and protons | caused by high energy from Atmospheric environment |
C. Thermal | The energy stored in the cell is lost over time, as the temperature accelerates and the original data is transformed |
D. Random Noise or Signal Integrity(Include Current Spike) | Random noise and signal integration problem wih power and signal |
can occurs when the voltage is dropped to under operation voltage Momentarily |
1.In Normal Operation
2.In Sleep Mode(cmd5 and AutoSleep )
We can process a sequence of vectors x by applying a recurrence formula at every time step:
Notice: the same function and the same set of parameters are used at every time step.
refer to http://cs.stanford.edu/people/karpathy/convnetjs/demo/cifar10.html