網頁

2019年8月21日 星期三

numpy 之 GPU 版本, CuPy, MinPy

目前有 CuPy 和 MinPy
而 MinPy 有 Automatic gradient support,但感覺相容性不佳,要更動很多程式碼



CuPy 安裝和使用
pip install cupy

cupy_array = cupy.array(numpy_array)
numpy_array = cupy.asnumpy(cupy_array)

numpy.argwhere(cond) 要換成
cupy.transpose(cupy.asarray(cupy.nonzero(cond), dtype=np.int), axes=())

numpy.array([array1, array2]) 要換成
cupy.stack([array1, array2])

idx = numpy.max(array) 若只有1個值 要換成
idx = cupy.max(array).item()



MinPy 安裝和使用
查詢 mxnet 和 CUDA 版本的配合
https://mxnet.apache.org/versions/master/install/index.html?platform=Linux&language=Python&processor=GPU

sudo apt-get update
sudo apt-get install -y build-essential git libatlas-base-dev libopencv-dev

git clone --recursive -b v1.5.0 https://github.com/dmlc/mxnet
cd mxnet;
cp make/config.mk .
echo "USE_CUDA=1" >>config.mk
echo "USE_CUDA_PATH=/usr/local/cuda" >>config.mk
echo "USE_CUDNN=1" >>config.mk
make -j$(nproc)

pip install numpy pyyaml
python ~/mxnet/python/setup.py install

minpy_array = minpy.array(numpy_array)
numpy_array = minpy_array.asnumpy()

numpy.array([array1, array2]) 要換成
minpy.stack(*[array1, array2])

numpy_array.transpose(axes=()) 要換成
minpy.transpose(minpy_array, axes=())

numpy.zeros((0, 1)) 是合法的
minpy.zeros((0, 1)) 是不合法的

numpy_array[numpy.newaxis, :] 要換成
minpy.expand_dims(minpy_array, axis=0)

2019年8月14日 星期三

使用 TensorRT, 載入 frozen_model.pb 太慢

使用 TensorRT 就是要加快 inference 的速度
沒想到載入模型時,速度超慢

上網查到 extremely long model loading time problem
發現主要原因為 protobuf 使用 python
改用 cpp 才能改善速度

文章上使用 protobuf 3.6.1
但是我的 protobuf 使用 3.8.0
所以把相關參數改成 3.8.0
並把 protobuf 安裝在 python 的 virtualenv 上

sudo /usr/local/cuda-10.0/bin/nvprof --log-file=profile_freeze.log /mnt/XavierSSD/envs/OpenAiGym/bin/python inference.py


2019年7月27日 星期六

apt-get

sudo apt-get install chromium-browser-l10n
chromium-browser
chromium-codecs-ffmpeg-extra
unity-scope-chromiumbookmarks
apt list --installed
sudo apt-get remove chromium-browser
apt-cache madison chromium-browser
sudo apt-get install chromium-browser=75.0.3770.90-0ubuntu0.18.04.1


2019年7月25日 星期四

毫米波雷達

基於TI AWR1642的77G毫米波雷達盲區偵測BSD方案

找到好東西,記錄下列重點

FMCW (Frequency Modulated Continuous Wave , 線性調頻信號)
ADAS 先進駕駛輔助系統(Advanced Driver Assistance Systems)
自适应巡航(ACC)
前向碰撞预警(FCW)
自动紧急制动(AEB)
盲点侦测(BSD)
辅助停车(PA)
变道辅助(lane change assist,LCA)
后碰预警(RCW)
一般来讲 chirp 的扫频带宽越大,分辨率越好,但是探测距离会短,反之则分辨率低,探测距离远

AWR1843 是 3T4R
如果是 3 TX and 4 RX,則 MIMO radar system 可以等效為 12 virtual channels 其 Angular resolution 約為 10°
AWR1642 是 2T4R
如果是 2 TX and 4 RX,則 MIMO radar system 可以等效為 8 virtual channels 其 Angular resolution 約為 15°
3T4R 可以在 2T4R 基础上,增加水平角分辨率,或者是增加测俯仰角的能力。

假設一個 frame 具有 128 chirps ( Nchirp = 128 ) 、
ADC 取樣數 為 256 samples ( Nadc = 256 ) 、
ADC sampling rate 為 5 MHz 、
四個 RX 天線 則 radar-cube memory 所需為 512KB
( 256 samples × 128 chirps × 4 antennas × 4 bytes / sample )
以 AWR1642 的 C674x DSP 運作在 600 MHz 的運算能力做計算。
256-pt range-FFT with windowing 需要耗時 ( 1.55 + 0.37 ) = 1.92 μs
因為 ADC 取樣數 為 256 samples ( Nadc = 256 ) 、
ADC sampling rate 為 5 MHz 則 Chirp cycle time Tc 至少為 256 / 5 = 51μs ( 不包含 Idle Time )
所以在 Intraframe processing 處理 1st Dimension FFT Processing 處理時間相當寬裕。
一樣以 AWR1642 的 C674x DSP 運作在 600 MHz 的運算能力做計算。
Doppler-FFT with windowing 需要耗時 ( 1.59 + 0.32 ) = 1.91 μs,
所以在 Interframe processing 處理 Doppler-FFT 需耗時 1.95 ms
( 1.91 μs × 256 range bins × 4 RX antennas )
一個 frame 計算到這裡,至少耗時 15.006 ms ( 256 × 51μs + 1.95ms )
隨後根據系統 Signal Processing Chain 接續的 detection algorithm 繼續計算。

雷达可以探测静止目标,车辆停止时也有功能,此时可以做为 RCTA (后方横向来车告警),用于车辆倒车出库时的盲区提醒。

这里面所说的精度指的是 Range Resolution,
根据 mmw Radar 捕捉目标的基本理论 Range Resolution=C/2B,
其中 C= 光速,B= 雷达带宽。以此计算,AWR1642 最大输出带宽为 4GHz,
得到 Range Resolution ≈ 4cm。
24GHz 雷達分辨率約為 60cm
77GHz 雷達分辨率約為 4cm

雷达性能参数
Max range:最大距离,雷达能探测到的最远距离。
Range resolution:距离分辨率,指分辨两个距离很近的物体的能力。
Range accuracy:距离精度,单个目标的距离测量精度,取决于信噪比,通常距离精度是距离分辨率的一小部分。
Max velocity:最大速度,最大相对速度可以通过两个间隔为 Tc 的 Chirp 测得,更高的 Vmax 需要两个线性调频脉冲之间更短的传输时间。
Velocity resolution:速度分辨率,在速度上分离两个物体的能力,取决于帧的活动持续时间,雷达的速度分辨率与帧时间(Tf)成反比。
Velocity accuracy:速度精度,单个物体速度测量的准确性,取决于信噪比,通常是速度分辨率的一部分。
Max Angular Field of View:最大角视场,两个天线之间的间隔 l = l/2 会导致 ±90°的最大角视场。
Angular resolution:角度分辨率,角度分离两个物体的能力,雷达传感器的角度分辨率通常较低。

Chirp duration 為 8μs 最大可量測相對速度為 92.28 kmph

Maximum unambiguous range 80 m
Range resolution 35 cm ( Normal resolution )

2019年7月12日 星期五

玩 OpenAI Gym Atari 遊戲

參考 Playing the OpenAI Gym Atari Games

sudo apt-get build-dep python-pygame
pip install pygame
pip install matplotlib
sudo apt-get install python3-tk

mkdir -p gym/utils
下載 play.py 到 gym/utils

執行
import gym
from gym.utils.play import play
env = gym.make("MontezumaRevengeNoFrameskip-v4")
play(env, zoom=4)

2019年7月11日 星期四

Nvidia Jetson AGX Xavier 之 Qt 安裝

參考 How to install PyQt4 on Tx2
sudo apt-get install libqt4-dev qt4-dev-tools python-qt4-dev pyqt4-dev-tools
sudo apt-get install python-qt4
sudo apt-get install python3-pyqt4


參考 Install Qt Creator on NVIDIA Jetson TK1
sudo apt-get install build-essential qt5-default qtcreator -y
開啟 Qt Creator
選擇 Tools/Options/Build & Run/Compilers
Add/GCC
Compiler path: /usr/bin/gcc
選擇 Tools/Options/Build & Run/Kits
Manual/Desktop (default)
Compiler: GCC

sudo apt-get install python3-pyqt5
sudo apt-get install pyqt5-dev-tools
sudo apt-get install qttools5-dev-tools
cp -r /usr/lib/python3/dist-packages/PyQt5 ~/XavierSSD/envs/OpenAiGym/lib/python3.6/site-packages/

wget "https://www.riverbankcomputing.com/static/Downloads/sip/sip-4.19.14.tar.gz"
wget 網址已經不存在
改從 https://distfiles.macports.org/py-sip/ 下載
tar -zxf sip-4.19.14.tar.gz
cd sip-4.19.14/
python configure.py
make
make install

2019年7月3日 星期三

python virtualenv

# pip3 install virtualenv 不能使用
apt-get install  python3-venv
mkdir envs
cd envs

virtualenv -p /usr/bin/python3 tensorflow
python3 -m venv --system-site-packages tensorflow

source tensorflow/bin/activate

安裝 指定版本
pip install package_name==2.6.0
列出已安裝的 package
pip list
顯示 package 的資料
pip show package_name
產生一份安裝列表
pip freeze > requirements.txt
cat requirements.txt
依據安裝列表 安裝 package
pip install -r requirements.txt

deactivate

若需要有 root 的權限
$ sudo tensorflow/bin/python your_python.py
若需要傳入特定環境變數
$ sudo LD_LIBRARY_PATH=$LD_LIBRARY_PATH tensorflow/bin/python your_python.py