인공지능의 시대 (The Age of A.I.)

유투브 오리지널에서 제공하는 인공지능에 대한 다큐멘터리.

Advertisements

Blockly 2019 Q4 Release

Blockly도 그동안 계속 버전 패치를 해왔는데, 이번 2019 Q4 릴리즈에선 약간 더 큰 변화를 가지고 릴리즈 되었습니다.

https://groups.google.com/forum/#!searchin/blockly/npm%7Csort:date/blockly/cOxLdS7vX-c/bq-KIyBXAAAJ

Zelos라는 렌더링 엔진을 사용하는 것인데, 기존 렌더링 엔진인 Geras를 보완하여 개발하였습니다. 블럭들의 모습이 Scratch의 그것들과 상당히 유사해졌고, 실시간으로 블럭을 그려서 사용하다보니 좀더 예쁜? 모습을 보여줍니다.

각 렌더링 엔진에 대한 설명은 다음의 슬라이드에서 참고.

https://docs.google.com/presentation/d/1nNk0DYT_aeMxKS7BVfAZxpQSOmwBu9XuG96oezrp_Ss/edit#slide=id.g40d1aecc4e_0_470

여하튼 기존 개발 환경 구축과 마찬가지로 소스를 가지고와 옵션을 살짝 건드려주면? 다음과 같은 모습을 보여줍니다.

렌더링 엔진을 선택하는 부분은 Blockly를 인젝션하는 부분에 옵션을 다음과 같이 추가해주면 됩니다.

    var workspacePlayground = Blockly.inject('blocklyDiv', {

      toolbox: BLOCKLY_TOOLBOX_XML['standard'],
      media: '/blockly/media/',
      trashcan: true,
      zoom: {
        controls: true,
        wheel: true,
        startScale: 0.7,
        maxScale: 3,
        minScale: 0.3,
        scaleSpeed: 1.2
      },
      renderer : "zelos"
    });

끝.

Realsense D400 시리즈 최적 사용 방법

Reference

RGB-D 카메라 중, 최근 많이 사용되고 있는 인텔 리얼센스 D400 시리즈 중 D435 모델을 사용하고 있다. 대부분 ROS를 이용해서 사용하는만큼 그냥 기본 옵션을 주로 사용하고 있었는데, 최근 카메라 관련 자료를 찾아보다가 위의 링크의 문서를 보게 되었다.

결론부터 알아보면, 카메라의 스펙을 고려하여 그에 해당하는 옵션을 선택해서 사용하는 것이 가장 좋은 품질의 Depth 데이터를 얻을수 있다는 얘기다.


  1. Depth의 해상도는 848×480으로 한다. (D415의 경우 1280×720) 그 이외의 해상도를 선택하면 저 해상도를 기준으로 하여 스케일링한 후 출력을 내보내는 듯 하다. 만약 사용하려는 알고리즘의 성능을 고려하여 해상도를 낮춰야 한다면, 저 native 해상도로 받은 후, 후처리를 통해 해상도를 낮추는 것을 더 추천한다고 한다. (흐음~)
  2. 카메라를 사용하는 환경의 조명을 개선한다. (조명 조건이 좋을수록 Depth 데이터의 품질도 좋아진다.
  3. 사용하려는 물체의 위치를 카메라에 가능한 가깝게 하도록 노력한다. D400 시리즈 모델의 경우 IR 패턴광을 사용하여 Depth 정보를 계산하는만큼, 거리가 멀어지면 멀어질수록 오차는 기하급수적으로 심해진다.
  4. 여러 개의 카메라를 사용한다. (이건 좀 이해가 안가는데…) 암튼 FOV를 커버하기 위해서 여러 개의 카메라를 사용하는 것을 추천한다. D400 시리즈의 경우 여러개의 카메라를 사용해도 상관이 없고, 만약 하드웨어 동기화 기능을 사용할 경우, 카메라에 위치한 별도의 커넥터를 사용하여 연결하면, master-slave 관계를 설정하여 사용 가능하다.
  5. post-processing를 적극 활용한다.

대략 이 정도인듯.

realsense_ros (https://github.com/IntelRealSense/realsense-ros) 패키지를 사용하는 경우, 위 사항을 고려하여 사용한다면, 다음과 같이 사용하면 됨.

$ roslaunch realsense2_camera rs_camera.launch enable_pointcloud:=true color_width:=848 color_height:=480 color_fps:=60 depth_width:=848 depth_height:=480 depth_fps:=60 infra_width:=848 infra_height:=480 infra_fps:=60 align_depth:=true filters:="spatial

물론 roslaunch의 arguments를 사용하면 좀더 이쁘게 만들수도 있을듯.

덧:

현재 librealsense2 패키지의 최신 버전은 커널 5.0대에서 사용할 때, Pointcloud를 제대로 읽어오지 못함. 따라서 문제가 해결될때까지 2.30 버전을 사용하는 것을 권장.

Build and Install OpenCV 4.2.0 on Ubuntu with GPU support

Current OpenCV version only support CUDA 10.1.

Download sources

$ wget https://github.com/opencv/opencv/archive/4.2.0.tar.gz
$ wget https://github.com/opencv/opencv_contrib/archive/4.2.0.tar.gz

Extract the compressed files

$ tar zxf opencv-4.2.0.tar.gz
$ tar zxf opencv_contrib-4.2.0.tar.gz

CMake configuration

$ cd opencv-4.2.0
$ mkdir build
$ cd build
$ cmake -DOPENCV_EXTRA_MODULES_PATH=../../opencv_contrib-4.2.0/modules -DWITH_CUDA=ON -DBUILD_EXAMPLES=ON -DCMAKE_BUILD_TYPE=Release ..

Build

$ make -j8

It takes 15 ~ 20 minutes. And install,

$ sudo make install

Check installations

$ opencv_version 
4.2.0

$ python3
Python 3.6.9 (default, Nov  7 2019, 10:44:02) 
[GCC 8.3.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import cv2
>>> cv2
<module 'cv2' from '/usr/local/lib/python3.6/dist-packages/cv2/python-3.6/cv2.cpython-36m-x86_64-linux-gnu.so'>
>>> 

Done.

Install Tensorflow with GPU support

Reference: https://www.tensorflow.org/install/gpu

  • Install CUDA 10.1 with GPU Driver
$ wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu1804/x86_64/cuda-repo-ubuntu1804_10.2.89-1_amd64.deb
$ sudo dpkg -i cuda-repo-ubuntu1804_10.1.243-1_amd64.deb
$ sudo apt-key adv --fetch-keys https://developer.download.nvidia.com/compute/cuda/repos/ubuntu1804/x86_64/7fa2af80.pub
$ sudo apt-get update
$ wget http://developer.download.nvidia.com/compute/machine-learning/repos/ubuntu1804/x86_64/nvidia-machine-learning-repo-ubuntu1804_1.0.0-1_amd64.deb
$ sudo apt install ./nvidia-machine-learning-repo-ubuntu1804_1.0.0-1_amd64.deb
$ sudo apt-get update
$ sudo apt install cuda
$ sudo apt install cuda-10-1
  • Install cuDNN
$ sudo apt install libcudnn7-dev
  • Install TensorRT
$ sudo apt install libnvinfer-dev=6.0.1-1+cuda10.1 libnvinfer6=6.0.1-1+cuda10.1 libnvinfer-plugin6=6.0.1-1+cuda10.1
  • Install python3-pip and update
$ sudo apt install python3-pip
$ sudo pip3 install -U pip
  • Install Tensorflow
$ sudo pip3 install -U tensorflow-gpu
$ sudo pip3 install -U launchpadlib

Check the installation

$ python3
Python 3.6.9 (default, Nov  7 2019, 10:44:02)                                                                                                                                                                                         
[GCC 8.3.0] on linux                                                                                                                                                                                                                  
Type "help", "copyright", "credits" or "license" for more information.                                                                                                                                                                
>>> import tensorflow as tf                                                                                                                                                                                                           
2020-01-17 00:54:07.956548: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library libnvinfer.so.6                                                                                       
2020-01-17 00:54:07.957808: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library libnvinfer_plugin.so.6
>>>
>>> tf.config.list_physical_devices('GPU')
2020-01-17 01:06:54.209819: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library libcuda.so.1
2020-01-17 01:06:54.244560: I tensorflow/stream_executor/cuda/cuda_gpu_executor.cc:981] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero
2020-01-17 01:06:54.244971: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1555] Found device 0 with properties: 
pciBusID: 0000:68:00.0 name: GeForce RTX 2080 Ti computeCapability: 7.5
coreClock: 1.545GHz coreCount: 68 deviceMemorySize: 10.76GiB deviceMemoryBandwidth: 573.69GiB/s
2020-01-17 01:06:54.245001: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library libcudart.so.10.1
2020-01-17 01:06:54.245027: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library libcublas.so.10
2020-01-17 01:06:54.246771: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library libcufft.so.10
2020-01-17 01:06:54.247101: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library libcurand.so.10
2020-01-17 01:06:54.248591: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library libcusolver.so.10
2020-01-17 01:06:54.249448: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library libcusparse.so.10
2020-01-17 01:06:54.249496: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library libcudnn.so.7
2020-01-17 01:06:54.249579: I tensorflow/stream_executor/cuda/cuda_gpu_executor.cc:981] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero
2020-01-17 01:06:54.249978: I tensorflow/stream_executor/cuda/cuda_gpu_executor.cc:981] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero
2020-01-17 01:06:54.250314: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1697] Adding visible gpu devices: 0
[PhysicalDevice(name='/physical_device:GPU:0', device_type='GPU')]

Done.