라벨이 인공지능인 게시물 표시

이미지 캡셔닝 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과 같이 원하는 객체만 박스를 그릴 수 있습니다.