블로그 이미지
devtang
Instagram : @taebr0 devtaehyeong@gmail.com

calendar

1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31

Notice

2020. 4. 14. 17:05 AI/Keras

 

 

 

본 게시물은 전 게시물의 세팅환경에서 진행하였습니다.

 

numpy 1.15
tensorflow 1.4
keras 2.0.3
cuda8.0
cudnn 5.1

 

https://ultrakid.tistory.com/22

 

[Keras] Anaconda를 이용한 Faster R-CNN 세팅 및 예제 실행

본 글은 Windows 10 환경에서 Anaconda에 가상환경을 세팅하여 진행하였습니다. Faster R-CNN Faster R-CNN의 가장 핵심 부분은 Region Proposal Network(RPN) 입니다. R-CNN은 이미지 내에 객체가 존재할 것 같..

ultrakid.tistory.com

공부를 하던중에 사실 Faster R-CNN 기반의 Real-time object detection(실시간 물체 인식)에 관한 예제를 찾고 있었으나, 몇일동안 찾아도 Windows 기반으로 구축된 글은 외국 사이트를 뒤져봐도 저의 능력으론 찾지 못했습니다..

 

Faster R-CNN 추론한 사진 (GTA 5)

 

그나마 다행인건 동영상을 인식하는 예제가 있긴 했는데 살펴보니 동영상 자체를 input시켜 detection 하는 것이 아닌 동영상을 프레임?으로 쪼개어 사진 한장마다 인식을해서 인식이된 모든 사진을 다시 합쳐 동영상형태로 만드는 예제 코드를 찾았습니다. 처리 모델로는 ResNet50 을 사용하였습니다.

 

우선 전 게시물에 예제 코드를 하나 받아야합니다.

https://github.com/riadhayachi/faster-rcnn-keras/blob/master/test_frcnn_count.py

 

riadhayachi/faster-rcnn-keras

object detection in video. Contribute to riadhayachi/faster-rcnn-keras development by creating an account on GitHub.

github.com

 

다운을 받고 폴더안에 넣어줍니다.

마찬가지로 Anaconda Prompt를 실행시켜 만들어준 fasterRCNN 가상환경을 activate 해줍시다.

자이제 위의 폴더로 들어가서 코드를 입력합니다.

python test_frcnn_count.py --input_file 경로/처리할동영상.mp4 --output_file 경로/출력동영상이름.mp4 --frame_rate=25

frame rate는 25로 default값을 설정해줍니다.

 

띠용..

텐서플로우도 backend로 실행 잘되는가 싶더니 코드에 문제가 없지만 TypeError가 떴습니다.

https://github.com/pender/chatbot-rnn/issues/31

 

Pickle TypeError: a bytes-like object is required, not 'str' · Issue #31 · pender/chatbot-rnn

Getting this error: Traceback (most recent call last): File "chatbot.py", line 301, in main() File "chatbot.py", line 35, in main sample_main(args) File "chatbot.py", ...

github.com

 

음영 처리된 부분중 with open(config_output_filename, 'r') as f_in: 부분에서 'r'을 'rb'로 고쳐야합니다.

 

 

 

또 음영처리된 174번째 라인중 저부분이 원래는 var로 되어있으나 str(var)로 고쳐줘야합니다..

 

 

 

도대체 어디서부터 잘못된걸까 이틀동안 찾아본것 같습니다.

아마 이 코드가 python2.x버전대에서 작성한 코드라서 3.6버전에 안맞았던 것 같습니다.

2버전에서 3버전으로 올라가면서 문법이 약간씩 수정되었다고 합니다.

https://sebastianraschka.com/Articles/2014_python_2_3_key_diff.html

 

The key differences between Python 2.7.x and Python 3.x with examples

Many beginning Python users are wondering with which version of Python they should start. My answer to this question is usually something along the lines “ju...

sebastianraschka.com

아래와 같이 변경해줍니다.

cv2.rectangle(img_scaled,(x1, y1),(x2, y2), (int(class_to_color[key][0]),int(class_to_color[key][1]),int(class_to_color[key][2])),2)

이제 다시 코드를 입력하고 실행시켜줍니다.

python test_frcnn_count.py --input_file 경로/처리할동영상.mp4 --output_file 경로/출력동영상이름.mp4 --frame_rate=25

동영상을 프레임으로 쪼개어 한장씩 Object Detection을 수행한후 종합된 result image를 다시 합치는 방식입니다.

 

 

 

아래는 변환된 동영상입니다.

https://youtu.be/CyvN4hZTMxo

 

 

posted by devtang
2020. 2. 28. 23:57 Jetson Nano

현재 Jetson nano에 깔려있는 CUDA 10.0 , JetPack 4.3 , OpenCV 3.4 버전을 기준으로 작성하였습니다.

 

 

 

YOLO ?

YOLO(You Only Look Once)는 이미지 내의 bounding box와 class probability를 single regression problem으로 간주하여, 이미지를 한 번 보는 것으로 객체의 종류와 위치를 추측합니다. 아래와 같이 single convolutional network를 통해 multiple bounding box에 대한 class probablility를 계산하는 방식입니다.

YOLO의 대한 자세한 원리와 설명은 아래 사이트를 참조해주세요.

 

https://github.com/zeuseyera/darknet-kr/blob/master/2_YOLO/yolo.md

 

 

zeuseyera/darknet-kr

:kr: 다크넷(darknet): C로 작성한 신경망 공개소스. Contribute to zeuseyera/darknet-kr development by creating an account on GitHub.

github.com

 

 

우선 YOLO 버전으로는 크게 두가지가 있습니다.

 

https://pjreddie.com/darknet/

 

Darknet: Open Source Neural Networks in C

Nightmare Use Darknet's black magic to conjure ghosts, ghouls, and wild badgermoles. But be warned, ye who enter here: no one is safe in the land of nightmares.

pjreddie.com

https://github.com/AlexeyAB/darknet

 

AlexeyAB/darknet

Windows and Linux version of Darknet Yolo v3 & v2 Neural Networks for object detection (Tensor Cores are used) - AlexeyAB/darknet

github.com

라즈베리파이나 젯슨 나노 보드에서 AlexeyAB 버전이 원활히 구동되는 것을 확인했습니다. 

두 버전의 차이는 알아보니 pjreddie버전이 원래 yolo v3의 저자가 만든 버전이고, AlexeyAB버전은 

아직까지도 활발한 업데이트를 하고 있으며 연구 목적(학습할때 mapping,손실율 등) 을 알 수 있습니다.

저는 AlexeyAB버전으로 설치하였습니다.

 

우선 기본적으로 업데이트를 한번 진행해줍니다.

sudo apt-get update
sudo apt-get upgrade

또한 YOLO는 실시간 객체인식 시스템 중 하나로 꽤 무겁기 때문에 GPU를 이용하여 돌려야 합니다.

Jetson nano는 초기 OS설치시에 CUDA가 기본적으로 설치가 되어 있기 때문에 설치할 필요가 없으며

경로만 export해줍니다. 

export PATH=/usr/local/cuda-10.0/bin${PATH:+:${PATH}}

export LD_LIBRARY_PATH=/usr/local/cuda-10.0/lib64${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}

 

darknet 을 받아줍니다.

git clone https://github.com/AlexeyAB/darknet

cd darknet

wget https://pjreddie.com/media/files/yolov3.weights

darknet에서는 coco data(COCO: Common Object in COntext)와 학습해 놓은 weights 파일을 제공하고 있는데, 

약 80개정도 사물을 학습해놓았습니다. 기본 제공해주는 데이터 파일로써, YOLO를 처음 접했을때 돌려보는 가장 기본적인 demo정도로 생각하면 됩니다. 추가적으로 Tensorflow Lite버전처럼 경량화된 샘플인 yolov3-tiny.weights 파일도 설치해주면 좋습니다.

wget https://pjreddie.com/media/files/yolov3-tiny.weights

이제 YOLO를 build하기 위해 Makefile을 vi 명령어를 통해 약간 수정해줍니다.

sudo vi Makefile

들어가면

GPU=1
CUDNN=1
OPENCV=1

이 세개부분이 원래 0으로 되어있으므로, 위에 사진처럼 1로 바꿔줍니다. 0쪽으로 방향키버튼을 통해 이동후 

s 버튼을 눌러 1로 변경후 ESC, 방향키버튼으로 이동후 s 버튼을 눌러 1로 변경후 ESC를 해줍니다.

 

*vi 명령어 

 

 

변경이 완료됬으면 Shift + ; ( : 콜론)누르고 wq! (쓰고 나가기) 를통해 vi창을 나갑니다.

명령어창으로 돌아와서 컴파일을 진행합니다.

make

이제 YOLO 설치는 끝이 났습니다. 정상적으로 설치되었는지 구동해보도록 하겠습니다.

 

간단한 사진예제 먼저 구동해보겠습니다.

./darknet detect cfg/yolov3.cfg yolov3.weights data/dog.jpg

tiny 버전으로 구동하고 싶다면 아래 명령어를 입력해줍니다. lite한 버전이라 위의 명령어보다 처리속도가 빨라요.

./darknet detect cfg/yolov3-tiny.cfg yolov3-tiny.weights data/dog.jpg

개와 자전거,트럭이 인식이 잘되는 것을 볼 수 있습니다.

사진이 정상적으로 인식 되는것으로 보아 YOLO가 잘 설치된 것 같습니다.

 

YOLO는 웹캠을 통해 출력되는 영상을 실시간으로 인식할 수 있습니다.

숫자 0으로 실행이 안되면 1로 바꿔서 해주시면 됩니다.

./darknet detector demo cfg/coco.data cfg/yolov3.cfg yolov3.weights -c 0

마찬가지로 tiny 버전으로 구동하고 싶으면 아래 명령어를 입력해줍니다. 

./darknet detector demo cfg/coco.data cfg/yolov3-tiny.cfg yolov3-tiny.weights -c 0

웹캠으로 실시간 인식한 구동 영상입니다.

 

tiny 버전으로 구동

위의 동영상은 tiny버전으로 GPU사용하여 구동하였습니다. 13~14 프레임으로

평균 10프레임 초중반대를 뽑아내줍니다. 일반yolov3.weight파일로 진행시 1~4프레임 정도밖에 안나오는데

라즈베리파이에서는 엄두도 못내는 실시간 인식을 꽤 괜찮은 성능으로 구동시켜주네요..

 

지금까지 YOLO의 기본 설정방법 및 예제 실행에 대해 글을 작성해 보았습니다.

서투른 글 읽어주셔서 감사합니다.

 

참고사이트)

*YOLO를 처음 접할때 어려웠던 부분이 많은데 몇년전 게시물임에도 불구하고 꾸준히 댓글로 질문들에 답변해주시고 계십니다. 

https://pgmrlsh.tistory.com/

 

개발자 이상현

Instagram:sh_lee77 머신비전, YOLO, 영상처리, Deep Learning, 딥러닝

pgmrlsh.tistory.com

 

'Jetson Nano' 카테고리의 다른 글

[OpenCV] Jetson nano에 OpenCV 3.4 설치  (0) 2020.02.28
[NVIDIA]Jetson nano OS 설치  (8) 2020.02.28
posted by devtang
2020. 2. 28. 14:43 Jetson Nano

NVIDIA에서 수백만개의 지능형 시스템 구축을 할수 있는 초소형 컴퓨터 Jetson nano를 출시했습니다.

Jetson nano

 

Bringing the Power of AI to Millions of Devices

NVIDIA Jetson Nano enables the development of millions of new small, low-cost, low-power AI devices.

www.nvidia.com

가격은 99달러로 우리나라에서 약 12~13만원에 구매가 가능합니다.

학생들이나, 개발자, 발명가들이 합리적인 가격으로 최신 AI를 구동할 수 있게 됬습니다.

 

라즈베리파이와 마찬가지로 SD카드에 이미지를 구워 구동시킬 수 있으며,

기본적인 사양은 라즈베리파이보단 성능이 조금 뛰어납니다.

사양은 1.4GHz 쿼드 코어 ARM A57 CPU, 128 코어 NVIDIA Maxwell GPU 및 4GB RAM를 갖추고 있습니다.

 

 

또한 Jetson nano에는 40개의 GPIO핀이 있어서 LED,모터,센서 등과 연결할 수 있습니다.

단점으로는 와이파이가 지원이 안되서 동글을 사용하거나 랜카드를 사용해야합니다.

라즈베리파이와 마찬가지로 sd카드에 os를 갖추어 꽂아서 사용하게 되어있습니다.

OS를 설치하기 위해서는, 아래 사이트에서 Jetson Nano Developer Kit SD Card Image 를 설치해야합니다.

https://developer.nvidia.com/embedded/downloads

 

Jetson Download Center

Get downloadable documentation, software, and other resources for the NVIDIA Jetson ecosystem.

developer.nvidia.com

이미지 파일을 다운받아서 압축을 풀고 난후, Win32DiskImager를 이용하여 os 세팅을 해줍니다.

sd-blob-b01.img 

sd 카드리더기를 이용하여 Write 버튼을 눌러줍니다.

100%될때까지 기다려줍니다.

끝나고 완료되고 나면 왼쪽하단에 Done. 표시와 함께 디스크를 사용하기 전에 포맷해야 한다는 문구가 열개이상 뜨는데

이때 모두 취소버튼을 눌러줍니다.

 

이렇게 하면 SD카드에 우분투가 세팅이 완료됩니다. 이제 SD카드를 Jetson nano에 부착시켜줍시다.

 

마이크로 USB로도 전원 연결을 할 수 있지만, 전력이 낮아 꺼지게 될 가능성이 높습니다.

저는 무선 마우스,키보드, 와이파이 동글을 이용하고 있으므로 전력소모가 커 5V DC어댑터를 전원으로 연결시켰습니다.

 

초록색 NVIDIA 문구와 함께 부팅이 시작됩니다.

우분투 기본 환경 설정중입니다.

자 모든설정이 완료가되고 정상적으로 Jetson nano에 OS를 깔았습니다.

다음엔 OpenCV를 설치하는 포스팅을 게시하겠습니다.  

posted by devtang
prev 1 next