728x90

AI | ML 50

[RL] 테트리스 강화학습 시도 내용

예전에 다양한 시도를 해보면서 겪었던 걸 적었던 글이였는데 오랜만에 발견해서 적어본다. 강화학습을 공부하면서 어디에 적용하면 재밌을까 생각해보다가 테트리스에 적용해보기로 했다. 처음에는 아는 게 DQN밖에 없어서 DQN으로 시도해봤는데, 학습이 전혀 되지 않았다. 나중에 검색해보니, 테트리스가 의외로 search space가 큰 환경이라 단순화해서 접근해보는 것부터 시도해보자고 생각해,블록을 네모로만 한정시켜 보상을 쉽게 줄 수 있도록 적용해봤는데 결과가 아래 그림처럼 좋지 않았다. 왜 그런지 생각해보다가 보상이 제대로 되지 못했거나, 모델이 맵을 읽지 못한다는 생각이 들어 각각 시도해 보았다. 아래와 같이 보상 체계를 한번 변경해봤다. 라인을 지우는 경우 보상 2배로 강화 보상 체계 변경 score →..

[RL] DQN(Deep Q-Network) 논문 리뷰

제목 + 링크: Playing Atari with Deep Reinforcement Learning ‌ 1. Introduction ‌ 기존 RL은 hand-craft 기반으로 진행해왔는데, 성능이 feature quality에 의존적 주변 분야(CV, NLP)에서 딥러닝을 이용해 많은 발전이 있어 RL에도 이점이 있을 것 같다고 생각 RL 환경에서 CNN을 기반으로 atari 게임 raw video input을 학습해 control이 가능한지 시도 ‌ 2. Background ‌ 강화학습에서 agent는 상태에 따라 행동을 정해야 하는데, 현재 상태는 이전 상태와 연관되어 있다. 이는 MDP(Markov Decision Process)를 떠오르게 하고, 따라서 논문에서는 MDP의 방법을 RL에서도 적용..

[RL] Beginner Guide

Background Knowledge 강화학습이란, 제한된 환경 안에서 설정된 에이전트가 현재의 상태를 인식하고, 선택 가능한 행동들 중 보상을 최대화하는 행동 또는 행동 순서를 선택하는 방법을 말한다. 여기서 강화(Reinforcement)란 심리학에서 생물이 어떤 자극에 의해 미래의 행동을 바꾸는 것을 말한다. Environment : 관측이 가능하고, 통제할 수 있는 닫힌 공간 Interpreter : 환경에서 Agent으로 가기 전, 확인하는 버퍼 단계로 보아도 무방하다 (프로그래머) Agent : 환경 내에서 제어되는 객체 State : 환경 내에서 관측되는 Agent의 상태, Observation이라고 표현되기도 한다 Action : Agent가 행동한 결과 Policy : Agent가 취할 ..

[OpenCV] 안드로이드에서 속도 개선해보기

최근에 안드로이드와 iOS에서 openCV를 사용할 일이 생겼다. 환경설정까지는 다른 분께서 해주셔서 큰 신경 쓰지 않고, 바뀐 언어 환경에서 같은 로직을 적용해본 결과 생각보다 느렸다. 오랜만에 급하게 하다가 깜빡한 게 생각나서 기록하는 겸, 왜 느려졌는지 그 이유와 개선방법에 대해서 적어보려고 한다. 먼저 로직을 간단하게 적어보자면 이렇다. - 이미지를 받아온다. - ROI 관심영역을 추출한다. - 추출한 영역 내에서 픽셀마다 값을 변경한다. - 변경된 이미지를 내보낸다. openCV를 써본 사람이면 아주 쉽게 접하는 일이다. 안드로이드에서 간단하게 예시를 보여주자면 이렇다. val src = Mat() //grayScale 이라고 가정 val dest = Mat() for(rowIdx: Int in..

AI | ML/OpenCV 2023.09.21

[3D LUT] 에 대해 이해한 내용 적어보기

최근에 이미지 보정 관련하여 일이 있어서 조사해보던 중에 LUT 에 대해 알게 되었고, 궁금했던 부분과 공부한 내용에 대해 짧게 적어보려고 한다. 내가 궁금했던 내용들은 이렇다. LUT가 뭐지?? 3차원의 RGB 픽셀을 어떻게 LUT를 적용시키는지, 적용 방법 3D Cube 파일 LUT 적용 방법 CUBE 파일의 LUT_SIZE는 왜 홀수인지?? LUT(Look Up Table)가 뭐지? LUT는 Look Up Table의 약자이다. LUT는 말 그대로 룩업 테이블, 찾아 보는 테이블이라는 뜻으로 엑셀에서의 LOOKUP 함수를 안다면 이해하기 쉬운데, 더 이해하기 쉽게 이미지를 가져왔다. 그림을 참고해서 왼쪽의 테이블(Table)이 제공된 상황에서는 A07이라는 부품을 알기 위해선 찾아보기만 하면(Loo..

AI | ML/OpenCV 2023.08.14

Attention is all you need (Transformer) 리뷰

최근에 논문을 너무 안 읽은 것 같아 논문을 읽어보려고 하다가 어텐션이 많이 들어가서 파악이 잘 안 됐다. 트랜스포머가 좋은 논문이라고 해서 많이 듣기는 했는데 이것부터 읽어보지 않으면 다음 논문을 읽어볼 수 없을 것 같아 트랜스포머를 읽어보았다. 그동안 트랜스포머에 대해 간략하게 들어보면서 내가 궁금했던 것은 이렇다. NLP 에서 Transformer 가 이전과의 차이점이 무엇인지? 학습 구조 트랜스포머 내에서 Query, Key, Value 라는 단어가 왜 쓰였는지? 그리고 아래는 내가 트랜스포머 논문을 읽으면서 간략하게 요약해보면서 적었다. 1. Introduction RNN 모델 특성 상 길어질수록 메모리의 제약이 생김 이 문제를 해결하기 위해 분해 트릭이나 조건부 연산 같은 연구가 있었고, 후자..

AI | ML/NLP 2022.06.01

[MetaFlow] ModuleNotFoundError: No module named 'fcntl'

Windows10 환경에서 MetaFlow 실행 시 fcntl 이라는 모듈이 없다는 문제가 생긴다. 찾아보면 fcntl 라이브러리는 리눅스에서만 지원된다고 한다. ModuleNotFoundError: No module named 'fcntl' 추가로 MetaFlow 홈페이지에서 검색해본 결과, 윈도우는 지원할 계획이 아예 없다고 한다. (할말을 잃었다) 참고 https://github.com/Netflix/metaflow/issues/10

[Python] TFLite to ONNX 변환

1. pip install tf2onnx 2. python -m tf2onnx.convert --opset 13 --tflite {tflite_file} --output {onnx_file} 3. pip install onnxruntime ( gpu 사용 시, onnxruntime-gpu) 4. onnx 모델 실행 결과 예시 Onnx 모델 실행 코드 (Python) import onnxruntime import numpy as np import cv2 def load_onnx_model(path, use_gpu): ort_session = onnxruntime.InferenceSession(path) if use_gpu: ort_session.set_providers(['CUDAExecutionProvi..

[Windows] Onnxruntime Visual Studio C++ Build

1. Visual Studio Nuget 다운로드 2. VS include, lib path 설정 includePath $(ProjectDir)/packages/Microsoft.ML.OnnxRuntime.Gpu.1.8.1/build/native/include LibPath $(ProjectDir)/packages/Microsoft.ML.OnnxRuntime.Gpu.1.8.1/runtimes/win-x64/native dll → 프로젝트 경로에 import 3. GPU 이용 시, 다음의 코드 변경 core/framework/provider_options.h → provider_options.h 4. 테스트 코드 작성 후 테스트

[OpenCV] C++ Mat 채널 변경 (permute, transpose)

딥러닝은 보통 파이썬에서 TensorFlow나 PyTorch 라이브러리를 이용해 진행된다. 파이썬에서는 [B, C, H, W] 같은 형태로 결과물이 나오게 되지만, OpenCV C++에서는 [H, W, C] 의 형태를 지닌다. 그림에서 위는 OpenCV에서 픽셀을 인식하는 방법, 아래는 딥러닝에서의 결과로 어떻게 다른지 볼 수 있다. C++에서 딥러닝 기반의 영상처리를 진행하다 보면 [B, C, H, W] 형태의 결과를 C++ OpenCV 형식 [H, W, C]에 맞게 변경이 필요할 때도 있다. 배치 사이즈는 1이라는 가정 하에서, 채널을 변경하는 방법은 아래와 같다. model_result 라는 포인터가 모델 아웃풋을 가리키고 있다는 가정 하에 채널 덩어리를 한채널씩으로 합치면 된다. float* mo..

AI | ML/OpenCV 2021.12.08
728x90