4월, 2020의 게시물 표시

이미지 캡셔닝 Show and Tell 리뷰

이미지
출처:  https://www.cv-foundation.org/openaccess/content_cvpr_2015/html/Vinyals_Show_and_Tell_2015_CVPR_paper.html 이미지 캡셔닝이란 이미지를 문장(이미지를 설명하는)으로 변환시켜주는 기술입니다. 이때 인공지능 용어에서 도메인이라는 단어를 사용하는데 도메인은 이미지, 문장 등 특정 데이터 집합을 일컫습니다. 참고한 논문에선 언어 번역기를 베이스라인으로 잡았습니다. 언어번역기의 구조는 그림 1과 같습니다. 그림 1 언어번역기 구조 언어 번역기 또한 영어 (도메인) 한국어(도메인)으로 변환해줍니다. 이때 모델 구조는 텍스트, 시계열 데이터 처리에 능한 RNN을 사용하였습니다. 즉, RNN(Encoder) - RNN(Decoder) 구조입니다. 이미지 캡셔닝은 입력데이터로 이미지를 입력해야하므로 이미지 처리에 특화된 CNN으로 변경하였습니다. 따라서 초기의 이미지 캡셔닝 구조는 그림 2와 같습니다. 그림 2 이미지 캡셔닝 구조 이미지를 Encoder인 CNN에 입력한 후 Spatial feature를 추출하고, 추출된 feature를 RNN의 vanising gradient problem을 해결한 LSTM(Decoder)에 입력하게 됩니다. 이때 word embedding이 되어 있어야 단어가 생성될 수 있는데 word embedding에 관해 간단하게 설명 드리도록 하겠습니다. 기존 classification 문제같은 경우는 이미지-class 로 one-hot-encoding을 진행합니다. 즉, 아래 그림과 같이 개는 어떤 축에 존재하고 고양이는 다른축에 존재하는 식으로 되기 때문에 class가 많을 수록 depth가 깊어지게 됩니다. 다른말로, sparse vector라고도 합니다. one-hot-encoding의 장점은 간단하게 표기가 가능하다는 점입니다. depth가 깊어지는 것 제외하고도 단점...

대학원생 및 연구자를 위한 딥러닝 기반 멀티미디어 기술 워크숍

딥러닝 및 심층신경망 기초 및 실습 고려대 김중헌 교수님 - 학습 방법, 사용처 등 딥러닝의 개요에 관한 내용 설명 - GAN의 아주 간단한 설명 모델 구성 정도 - 텐서플로우 실습 - node 생성 및 placeholder 등 Linear regression theory -  y = Wx+b 부터의 내용 - Cost function과 Gradient decent 관련 내용 - Cost function은 선형 방정식에 기초함 Binary classification theory - Binary classification은 sigmoid activation function으로 분류기를 설정할 수 있음 - 0.5를 기준으로 함 - Cost function은 선형 방정식에 기초할 수 없으므로 log를 사용한 cost function을 이용하여 cost를 0과 inf로 나눔 - csv파일 읽는 것 tensorflow 예제 Softmax classification theory - multi-category classification 문제일 경우 사용되는 방법 ANN theory - input layer는 사실 layer라고 부르지 않음 실제 데이터를 입력하는 것이기 때문. 따라서 layer의 개수를 셀 때 input은 제외 - hidden layer는 output layer를 제외한 나머지 layer - 딥러닝의 연산과정은 interpolation 과정과 비슷함 CNN 기반 영상 인식 기술 및 PyTorch 실습 아주대 황원준교수님 - 영상 관련 기술들 소개 (e.g. face recog, pose estimation, etc...) Why Deep Learning? - Hand-craft 기법들은 deep learning기법에 비해 성능이 떨어지기 때문 - deep learning 기술은 방대한 데이터를 기반으로 함 Model Architect - ImageNet으로 성능 경쟁 대회가 이...

YOLO custom dataset으로 학습

이미지
YOLO는 많은 사람들이 사용하고 있는 객체 인식 오픈소스입니다. 이미 선행학습 (Pre-trained)된 데이터도 있지만, 제가 원하는 클래스는 송전탑 (Transmission tower) 클래스입니다. 따라서 해당 클래스만 학습해보도록 하겠습니다. 환경: Ubuntu 18.04 LTS 데이터 셋을 구하기 위해 먼저 크롤링을 해줍니다. 구글 크롬 드라이버를 이용할 것입니다. 크롬 드라이버를 본인의 크롬 버전에 맞게 다운로드 받습니다. Link: https://chromedriver.chromium.org/downloads 크롬 버전 확인 방법은 그림 1과 같습니다. 그림 1 크롬 버전 확인 크롤러 프로그램은 google-images-download를 사용했습니다. Link: https://github.com/ultralytics/google-images-download Readme에 적힌대로 진행하면 크롤링을 진행할 수 있습니다. 다음은 레이블링을 해야합니다. 이미지 내에 객체의 좌표를 로깅하는 것입니다. 본 포스팅에선 YOLO mark를 사용했습니다. Link: https://github.com/AlexeyAB/Yolo_mark git clone https://github.com/AlexeyAB/Yolo_mark cd Yolo_mark cmake . make chmod u+x ./linux_mark.sh ./linux_mark.sh 위 커맨드들을 입력해주시면 그림 2와 같은 창이 팝업됩니다. 그림 2 Yolo mark 저는 이미 송전탑 이미지들을 넣어놔서 다음과 같은 이미지가 나오지만, 처음에는 비행기 그림이 나옵니다. 크롤링한 이미지들을 다음 경로에 넣어주면 그림 2와 같아집니다. Path: Yolo_mark/x64/Release/data/img 레이블링 하는 법은 마우스 드래그로 합니다. 다른 상세한 단축키들은 h키를 눌러 확인할 수 있습니다...

You only look once (YOLO V3) 기능

이미지
인공지능 관련 연구를 하며 YOLO를 많이 접하게 됩니다. 이때 사용하는 기능은 객체 인식 후 바운더리 박스의 좌표 값, 정확도 임계값 또는 특정 클래스만 인식 등이 있습니다. 어떤 소스를 고쳐야 하는지 알아봅니다. 참고: L = 줄 번호 환경은 Ubuntu 18.04 LTS, C++ 버전입니다. 먼저 darknet.c L400 에 있는 main 함수를 보겠습니다. 실행시킬때 넘겨받는 옵션들을 처리하게 됩니다. 일반적인 테스트 프로세스는 yolo를 실행할 때 detect 옵션을 줍니다. 따라서 main 함수에서 detector.c L562 test_detector 함수로 들어갑니다. test_detector L 577~585: 파일 경로가 옵션으로 주어졌으면 해당 파일이 input image, 아니라면 입력할 수 있도록 함 L 597: 객체 인식 L 600: 객체 인식 결과 변수 할당 L 604: 박스 그리기 L 605: 메모리 해제 L 606~615: 이미지 저장 이 부분에서 dets라는 변수는 YOLO 네트워크의 결과물이라고 할 수 있습니다. 이러한 dets 변수를 파라미터로 갖고 draw_detections 함수로 들어갑니다. draw_detections는 image.c L239 에 정의되어있습니다. 이 함수에서 앞서 언급한 작업을 진행할 수 있습니다. dets[i].prob : 정확도 names[j] : 클래스 L 294 : label 입력 제거한다면 label이 결과물에 표시되지 않습니다. draw_box_width(): 바운더리 박스 그리는 함수 마찬가지로 제거하면 박스가 그려지지 않습니다. left, top, right, bot: 인식된 객체의 바운더리 박스 좌표 위 변수들을 적당히 조합한다면 그림 1과 같이 원하는 객체만 박스를 그릴 수 있습니다.

Versatile video coding Test Model(VTM) Build

이미지
VTM을 리눅스 상에서 빌드해보겠습니다. 그림 1과 같이 https://jvet.hhi.fraunhofer.de에서 자세한 정보들을 얻을 수 있습니다. 소스를 다운로드 받기 위해 GitLab으로 이동합니다. 리눅스에 git이 설치되어 있다고 가정하겠습니다. 그림 2와 같이 clone 해줍니다. 빌드를 해주기 위해 build 폴더를 생성해줍니다. mkdir build build 폴더로 이동합니다.   cd build/ cmake로 구성되어 있기 때문에 cmake를 진행해 줍니다. cmake .. -DCMAKE_BUILD_TYPE=Release -O2 마지막으로 make 해줍니다. make -j 10 3에서 Build Type은 Release와 Debug 두가지가 있습니다. 4에서 -j 10 옵션은 병렬 처리로 빌드 속도를 향상시키는 옵션입니다. CPU core 개수에 맞게 적당한 INT를 입력하면 됩니다.

Image Super-Resolution Using Deep Convolutional Networks 논문리뷰

이미지
Super resolution의 초기 논문인 Image Super-Resolution Using Deep Convolutional Networks 논문 리뷰를 하겠습니다. Introduction Super Resolution (SR)은 저해상도 이미지를 고해상도 이미지로 복원하는 것입니다. Single image super resolution (SISR)과 Multiple image super resolution (MISR)로 분야가 나뉘어져 있습니다. 본 논문에서 기존의 Sparse Coding (SC), Example-based 기법에서 더 나아가 딥러닝 기법을 적용한 기법을 제안합니다. 성능은 그림 1과 같습니다. 기존 기법에 비해 PSNR이 높은 것을 볼 수 있습니다. 여기서 Peak signal-to-noise ratio(PSNR)이란? 영상의 손실 압축에서 화질 손실 정보를 평가할 때 사용하는 평가지표입니다. 그림 1 SRCNN 성능 본 논문에서 어필하는 Contributions는 다음과 같습니다. 전처리가 거의 없이 데이터와 CNN을 이용하여 end-to-end SR을 함 전통적인 기법과 딥러닝의 상관관계를 분석하여 네트워크 구조 설계 지침 딥러닝 기반의 기술을 통해 높은 성능과 속도를 제공 Related Work Image Super-Resolution SISR 알고리즘은 4가지로 분류 가능합니다. Prediction models Edge based methods Image statistical method Patch based methods 본 논문에선 Patch based methods에 관한 설명을 간단하게 합니다. 저해상도와 고해상도의 쌍으로된 patch 정보(딕셔너리)를 가지고 있음 저해상도에서 고해상도로 복원시 nearest neighbor(NN)으로 보간 전통적인 SR 알고리즘은 grayscale이나 single channel image...

HEVC test Model Profiling

이미지
HEVC test Model (HM) 16.20 버전을 Visual Studio에서 프로파일링 해봤습니다. 프로파일링은 소스를 돌렸을때 어떤 함수 및 모듈 등에서 CPU 등의 점유율 분포를 쉽게 알 수 있는 기능입니다. OS: Windows 10 TOOL: Tortoise SVN, Visual Studio 2013 HM은 SVN 저장소에 소스가 저장되어 있기 때문에 오픈 소스 툴인  Tortoise SVN 를 사용해서 다운로드 받습니다. 그림 1에서 저장소 URL(URL of repository)을 적어준 후 다운받을 곳 경로(Checkout directory)를 지정해 줍니다. https://hevc.hhi.fraunhofer.de/svn/svn_HEVCSoftware/ 가 root URL이고 각 버전별 관리되고 있는 소스가 tags 폴더 안에 있습니다. OK 버튼을 누르면 그림 2와 같이 다운로드됩니다. 그림 1 Tortoise SVN 그림 2 HM 구성물 Visual Studio를 실행해서 솔루션 파일을 열어줍니다. 솔루션 파일의 위치는 build에 있고 버전은 2010, 2012, 2013, 2015가 있습니다. 빌드 후 exe 파일을 통해 프로파일링을 진행할 계획입니다. 본 블로그에서 사용한 테스트 데이터는 PeopleOnStreet_1280x720_30.yuv 입니다. Release, x64로 바꾼 후 빌드를 해줍니다. 빌드를 하게되면 bin/vc2013/x64/Release/ 에 exe 파일이 생성되어 있을 것입니다. alt + f2를 눌러 Performance and Diagnostics모드로 들어갑니다. Change Target을 눌러 Executable을 선택해준뒤 Performance Wizard를 실행해줍니다. CPU 점유율을 프로파일링 할 것이기 때문에 CPU sampling을 선택 후 Next 해줍니다 이후 An executable을...