본문 바로가기

전체 글

2.1. Custom Dataset으로 TFRecord 파일 만들기 Tensorflow Object Detection API를 사용해서 모델 재학습을 하려면 TFRecord 형태의 input data를 만들어줘야 한다. TFRecord는 "Tensorflow 전용 학습 데이터 저장 형태" 정도로 알아두면 될 것 같다. 제대로 알아보지는 않았지만 Tensorflow로 설계한 모델 학습에 TFRecord를 사용하면 학습 속도가 개선되는 장점이 있다고 한다. 자세하게 알고 싶다면 여기1와 여기2에 들어가서 관련 설명을 읽어보면 될 것 같다. 그리고 이미지를 byte 단위로 읽고 쓰는 법에 대해 모르는 경우라면, [Python] - 이미지 읽는 방법 / cv.imdecode( ), io.BytesIO( ) 을 읽으면 도움이 될 거다. 이제 본격적으로 Custom Dataset을.. 더보기
이미지 읽는 방법 / cv.imdecode( ), io.BytesIO( ) 이미지를 읽는 방법에는 여러가지가 있다. OpenCV를 사용해서 읽는 방법도 있고, PIL를 이용해서 읽는 방법도 있다. 그리고 최근에는 이미지 파일을 Binary 형태로 읽은 다음 ( = byte 단위로 읽는다는 의미 ) jpg로 decoding하는 방법도 있다는 걸 알게 됐다. 하나씩 그 사용법에 대해 정리해보도록 하자. 1. cv2.imread( ) import cv2 path = './test_image.jpg' img = cv2.imread(path) 내가 주로 사용하는 함수다. 2. PIL.Image.open( ) from PIL import Image path = './test_image.jpg' img = Image.open(path)​ 가끔 코드 검색을 하다 보면 접하게 되는 함수다. 직.. 더보기
2. Tensorflow Object Detection Model Retrain 방법에 대해 알아보자 진행하는 논문만 마무리하고 다시 쓰고자 계획했는데 어느덧 반년이 넘는 시간이 흘러버렸다.. 지금은 논문 작업이 거의 완료돼서 시간적 여유가 많으니 Tensorflow Object Detection Model Retrain 방법에 대해 정리하도록 하겠다. Retrain에는 segmentation도 같이 진행하는 Mask R-CNN 모델을 사용했다. Dataset은 여기에서 Training Data에서 Rigid Instruments만을 받아 학습에 사용했다. Rigid Instruments를 받아보면 4개의 폴더가 있는데 그 중 3개는 학습용으로, 나머지 1개는 검증용으로 정리해서 사용했다. 정리된 Dataset와 사용한 코드들은 내 Github에서 다운받을 수 있다. 이제 다음 글에서 다운받은 Custo.. 더보기
SIFT 알고리즘 Scale Invariant Feature Transform (SIFT) 개발하기 급급해서 OpenCV 함수로만 사용해왔는데 논문을 쓰는 입장이 되어보니 원리에 대해 공부해야할 필요성이 생겨버렸다. 그래서 내가 할 수 있는 최대로 구글링해서 공부했고 그 내용들을 정리해두려고 한다. 시간이 지나면 일부분은 까먹게 될테니깐..! SIFT Algorithm 이미지의 Scale (크기) 및 Rotation (회전)에 Robust한 (= 영향을 받지 않는) 특징점을 추출하는 알고리즘이다. 이미지 유사도 평가나 이미지 정합에 활용할 수 있는 좋은 알고리즘이다. 논문에서는 4단계로 구성되어 있다고 밝히고 있다. Scale-space extrema detection Keypoint localication Orienta.. 더보기
CNN에서 커널 사이즈는 왜 3x3을 주로 쓸까? 대부분이 3x3 kernel size를 사용한다. 5x5도 있고 7x7도 있고 다양하게 사용할 수 있는데 대부분이 3x3을 쓴다. 이유는 모델 파라미터 수에서 큰 차이가 있기 때문이다. (1) 3x3 kernel (2) 5x5 kernel 3x3 kernel 2개를 사용하는 것이 5x5 kernel 1개를 사용하는 것보다 모델 파라미터 수가 더 적다. 그래서 3x3을 주로 사용하는 것이다. 더보기
CNN이 이미지에 더 효율적인 이유 이미지를 다루데에는 CNN을 가장 많이 사용한다. convolution이 이미지 연산에 특화되어 있기 때문이다. 근데 왜 특화 되어 있다 말할 수 있는 걸까? convolution layer와 fully connected layer를 비교해보면 이에 대한 답을 찾을 수 있다. 훨씬 적은 모델 파라미터 요구 개수 입력 이미지 크기가 [ 200 x 200 ]라고 가정했을 때 (1) fully connected layer의 경우 node를 1개로만 둬도 40,001개(가중치 40,000 + 바이어스 1)의 모델 파라미터가 필요하지만 (2) convolution layer를 사용하는 경우 3x3 커널 100개를 사용한다해도 1,000개(커널 900 + 바이어스 100)만 필요하다. 결과적으로 cnn연산이 훨씬 .. 더보기
[리더십 심포지엄] 의료 인공지능의 현재와 미래 후기 각종 학회, 심포지엄 등이 많이 열리는 11월, 연구실에서는 등록비 지원이 불가능해서 자비로 [리더십 심포지엄] 의료 인공지능의 현재와 미래 사전 등록 후 11월 8일에 듣고 왔다. 나 같은 대학원생보단 의학박사분들이 훨씬 더 많아서 당황하고 괜히 긴장했던 심포지엄이었다. 현장 사진 좀 찍어둘 걸... 발표 듣다가 찍은 ppt 화면으로 대신한다. 심포지엄에는 역시나 VUNO도 참석해있었다. VUNO는 이곳저곳 참여를 많이하는 회사인 것 같다. 법제학회에도 참석하는 걸 보면 단순히 인공지능 기술에만 집중하는 게 아니라 인공지능 의료기기 관련 규제, 인력 양성, 현황 파악 등 여러가지에 대해 다루고 고민하고 해결하려고 하는 것 같다. 회사가 앞으로 나아가야할 방향을 정하고 계속해서 성장하기 위해 다방면으로 .. 더보기
perspective transformation 와 homography 차이 기하 변환(geometric transformation)에 대해 공부 중이다. 다크프로그래머 블로그(영상처리 -> [영상 Geometry] 시리즈에 많은 개념들이 이해하기 쉽게 정리되어 있다)를 보며 많이 배우고 있다. 오늘은 블로그 글을 읽으며 공부하던 중에 헷갈리는 개념이 있어서 알아본 결과를 정리해보고자 한다. perspective transformation(원근 변환)와 homography( = projective transformation) 이 두 개념 사이에 어떤 차이가 있는 걸까?? 알아본 결과 perspective transformation = homography 관계라고 한다. OpenCV에서는 cv2.getPerspectiveTransform( )와 cv2.findHomography( .. 더보기