전체보기 106

새로운 프로젝트에 관하여-1.시작, 개발 방법론(PM)

1. 들어가며 최근 들어서 연구실에서 새로운 프로젝트를 시작하여 블로그 글을 작성하는게 뜸해졌다. 생각한 기능을 구현하고자 바쁘게 움직이면서 무의식적으로 글을 작성하는 과정을 미뤄왔던 것 같다. 프로젝트가 어느정도 기능이 구현되어 할 일이 줄어들어 지금까지 있었던 여러 고난과 극복과정을 앓음다운 글로 작성해보면서 그 동안의 팀 리더로서의 경험을 정리하고자 한다. 아직 많이 미숙하지만 이 글이 새로운 프로젝트를 시작하려는 모든 이에게 도움이 되었으면 좋겠다. 2. 새로운 프로젝트 새로운 프로젝트의 이름은 DSMP(Dicom Service Mangement Project)로 Dicom이라는 의료용 디지털 영상 데이터를 관리한다는 의미를 가지고 있다. 의료영상을 베이스로 머신러닝을 연구하는 연구실이다 보니 의..

[코딩테스트] 2020 KAKAO BLIND RECRUITMENT문자열 압축 풀이

문제 설명 데이터 처리 전문가가 되고 싶은 "어피치"는 문자열을 압축하는 방법에 대해 공부를 하고 있습니다. 최근에 대량의 데이터 처리를 위한 간단한 비손실 압축 방법에 대해 공부를 하고 있는데, 문자열에서 같은 값이 연속해서 나타나는 것을 그 문자의 개수와 반복되는 값으로 표현하여 더 짧은 문자열로 줄여서 표현하는 알고리즘을 공부하고 있습니다.간단한 예로 "aabbaccc"의 경우 "2a2ba3c"(문자가 반복되지 않아 한번만 나타난 경우 1은 생략함)와 같이 표현할 수 있는데, 이러한 방식은 반복되는 문자가 적은 경우 압축률이 낮다는 단점이 있습니다. 예를 들면, "abcabcdede"와 같은 문자열은 전혀 압축되지 않습니다. "어피치"는 이러한 단점을 해결하기 위해 문자열을 1개 이상의 단위로 잘라..

Calling Extension

들어가며 코틀린은 이미 정의된 클래스를 확장 시킬 수 있는 기능이 있다. 예를 들어서 아래와 같이 String 클래스에 원하는 메서드를 추가 할 수 있다. fun String.getFirst() = this[0] println("hello".getFirst()) //print 'h' 원리 원리는 생각보다 간단하다. 자바에서 static을 사용하여 기존 클래스를 입력받아 처리하는 메서드를 생성함으로써 사용자 입장에서는 기존의 클래스를 확장시킨 것처럼 보이게 하는 것이다. public static String getFisrt(String string){ return string[0];} Question? 그렇다면 만약 상속 관계에 있는 두 개의 클래스를 이용하여 아래와 같이 코드를 작성하면 어떤 문자열이 출..

Android/Kotlin 2021.08.19

[Kotlin] Extension Function

Basics Extension Function은 클래스를 확장한다. 클래스 밖에서 정의 되지만 regular 멤버로 클래스 내부에서 호출할 수 있다. fun String.getLast(number: Int) = this.get(this.length-1) class Test{ fun main(){ val c: Char ="abc".getLast() } }Receiver 확장 함수가 호출 될 때는 this가 reveiver로서 호출된다. 또한 기본적으로 this의 멤버 변수나 함수를 호출하기 위해서 일일이 this를 정의할 필요가 없다. fun String.getLast(number : Int)=get(length()-1)Import extension을 이용하기 위해선 import를 이용해서 명시해주어야 한..

Android/Kotlin 2021.07.19

[Tensorflow Lite] - 객체 탐지(Object Detection Model)만들기_3. 안드로이드에 Tensorflow Lite 모델 삽입

들어가며 지난 시간까지 데이터를 수집하고 Tensorflow Lite 모델을 만드는 과정까지 진행해보았다. 이번에는 이 모델 파일을 Android에 삽입해서 실제 구동까지 진행해보도록 하겠다. TFlite 모델에 메타데이터 추가하기 이 부분 때문에 필자는 몇 시간동안 삽질을 했다. 이전 장에서 만든 .tflite 파일을 그대로 안드로이드에 사용하게 되면 에러가 발생한다:(. 구글링을 하고 stack overflow에 업로드하는 등 여러 노력을 통해서 솔루션을 찾아냈다. 에러의 내용은 tflite모델에 NormalizationOptions이 추가되어 있어야 한다는 뜻이었다. 이는 메타 데이터의 일종인데 이를 삽입하기 위해선 추가적인 작업이 필요했다. 위 코드를 사용하면 필요한 메타 데이터를 추가 할 수 있..

Machine Learning 2021.03.17

[Tensorflow Lite] - 객체 탐지(Object Detection Model)만들기_2. 모델 학습

들어가며 지난 시간에는 roboflow를 사용해서 데이터를 업로드하여 처리하는 방법에 대해서 알아보았다. 이번에는 데이터와 Tensorflow 프레임워크를 사용해서 모델을 만들어보도록 하겠다. 추가적으로 컨버터를 사용해서 Tensorflow Lite 모델까지 변환하는 방법에 대해서 알아보도록 하겠다. (이 장에서는 필수적으로 수정해야 할 부분에 대해서만 언급하겠다. 코드에 대해서 자세히 알고 싶다면 Colab내부의 주석을 참고하도록 하자) 데이터 다운로드 colab.research.google.com/drive/1aIobwtqWggRbLbe606_WzVGtFiWZT9tr?usp=sharing Roboflow-TFLite-Object-Detection_Bicycle_Helmet.ipynb Colaborat..

Machine Learning 2021.03.17

[Tensorflow Lite] - 객체 탐지(Object Detection Model)만들기_1. 데이터 처리

들어가며 최근에 어떤 프로젝트를 진행하게 되면서 안전모를 착용했는지 확인하기 위한 모바일용 머신러닝 모델이 필요하게 되었다. 3일이라는 짧은 시간 안에 프로토타입을 만들게 되었는데, 진행하면서 알게 된 에러 사항에 대해서 공유하기 위해서 이 글을 작성하니 모바일용 객체 탐지 모델을 만드는 사람들이 참고해서 쉽게 사용했으면 좋겠다. 혹시 결과물이 바로 보고 싶은 사람은 아래의 링크를 참고하란다. github.com/BEOKS/Bicycle-Helmet-Wearing-Detection BEOKS/Bicycle-Helmet-Wearing-Detection Tensorflow lite model that detects bicycle helmet wearing and Android demo application ..

Machine Learning 2021.03.17

[Docker] - 도커 이미지 빌드(Dockerfile)

들어가며 지난 글에서는 도커의 아키텍처에 대해서 알아보았다. 이번에는 도커의 샘플 애플리케이션을 실행시키면서 도커의 이미지 생성 방식을 알아보도록 하겠다. 애플리케이션 준비 도커에 동작시키기 위한 데모 애플리케이션을 확보해보자. nodejs로 동작하는 간단한 데모 애플리케이션을 docker getting-started github 저장소에서 다운로드할 수 있다. 클론 된 getting-started에는 파일과 디렉터리가 있지만 우리가 원하는 nodejs 데모 애플리케이션은 getting-started/app 디렉토리 안에 있다. 여기서 터미널을 열어 node src/index.js를 실행시킨다면 맨 처음 우리가 실행시킬 데모 애플리케이션을 실행시킬 수 있다. 하지만 지금 할 건 도커 이미지를 만든 다음 ..

Docker 2021.02.18

[Docker] - Docker Architecture(도커의 구조)

들어가며 지난 시간에는 도커와 컨테이너의 정의 그리고 가상 머신과 비교한 장점에 대해서 알아보았다. 이번에는 도커가 어떻게 컨테이너를 만들고 관리하는 아키텍처에 대해서 알아보도록 하겠다. 도커 아키텍쳐 도커는 기본적으로 clinet - server로 나누어져 있다. 클라이언트에서 docker 커맨드를 사용하면 도커 서버는 REST API형식으로 명령을 전달받아 수행하게 된다. 이 때문에 원격으로 도커 서버에 명령을 전달하거나 여러 개의 도커 서버에 접근 할 수 있으며 하나의 서버 또한 여러개의 클라이언트에서 명령을 받을 수 있다. 이다음은 내부 구조에 대해서 하나씩 알아보도록 하겠다. Docker daemon(dockerd) 도커 데몬은 클라이언트의 명령을 REST API로 받아 컨테이너, 이미지, 네트..

Docker 2021.02.14

[Docker] - Docker란 무엇인가?

들어가며 최근 해커톤을 진행하면서 도커 형식으로 주최 측에서 개발환경을 제공해주었다. 도커에 대해서는 어렴풋이 들어봤지만 실제로 개발에 활용하면서 탁월한 유용성을 체감했다. 좀 더 잘 활용하기 위해 세세한 기초부터 도커에 대해 알아보자. 도커의 정의 도커란 컨테이너를 기반으로하는 가상화 플랫폼이자 이를 운영하는 회사명이다. 가상화 플랫폼이라는 말은 기존의 Virtual Machine처럼 일종의 가상 머신을 만들어 운영하는 것을 의미한다. 그렇다면 컨테이너는 무엇일까? 컨테이너 컨테이너는 코드와 코드 실행에 필요한 종속성들을 패키지로 만든 소프트웨어 단위이다. 그래서 기존의 애플리케이션을 다른 환경으로 빠르게 옮겨 실행시킬 수 있다고 한다. 기존에는 어떤 애플리케이션을 작성하고 이를 다른 컴퓨터에 옮기려고..

Docker 2021.02.14