본문 바로가기

Deep Learning

Tensorflow 개념 정리) 텐서, 변수, 오퍼레이션, 계산 그래프 MNIST 분류 문제를 공부할 때만 해도 사용법 익히기에 급급했기 때문에 tensorflow를 제대로 이해하고 다루진 않았었다. 일반적인 파이썬 코드 구현하고는 다르게 tensorflow는 계산 그래프에 노드( = 연산, 계산, 오퍼레이션 )을 추가하고 session을 통해 실행해줘야 하는 구조라고만 이해하고 넘겼다. tf.placeholder( ), tf.layers.conv2d( ), tf.train.AdamOptimizer( )와 같은 함수들로 계산 그래프를 그려가며 모델을 설계하고, tf.Session( ).run( )으로 그려진 계산 그래프를( = 설계된 모델을 ) 실제로 실행하는 구조라고만 이해했었다. + X = tf.placeholder( tf.float32, None) 의 경우, X는 tf.. 더보기
IoU, Intersection over Union 개념을 이해하자 Intersection over Union ? Intersection over Union (IoU)는 object detection에서 사용되는 도구다. 성능 지표는 아니고, 객체 인식 모델의 성능 평가를 하는 과정에서 사용되는 도구로 생각하면 된다. 정의는 아래와 같다. IoU = 교집합 영역 넓이 / 합집합 영역 넓이 두 box의 크기가 동일하다 가정하면, 두 개의 box가 적어도 2/3는 겹쳐줘야 0.5의 값이 나오기 때문에 여러 곳에서 IoU의 threshold 값을 0.5로 잡아서 사용하는 듯 하다. 모델의 성능을 높여보고자 IoU threshold 값을 올려서 모델링을 해도 되기는 하는데, 객체 인식 모델의 성능이라는 게 feature extractor, classifier, regressor.. 더보기
(1) Advancing Medical Imaging Informatics by Deep Learning-Based Domain Adaptation 정리 시작 Medical Image Dataset에서는 환자 케이스, 촬영 장비, 촬영 방식 등과 같은 다양한 요인에 의해 distribution-shift (also known as domain-shift) 현상이 발생한다. 그리고 이 domain-shift 현상이 모델의 성능을 꽤 많이 떨궈서 성능 문제로 이어지게 된다. Hospital A에서 수집된 데이터셋으로 개발된 모델이 AUC 0.99를 찍었다 하더라도, Hospital B 데이터셋에서는 AUC 0.7도 안 나오는 현상이 발생한다. Domain-shift 현상 때문이다. 당연하게도 이 문제점을 해결하기 위해 많은 연구들이 진행되었고, "Domain Generalization (DG)" 또는 "Domain Adaptation (DA)"의 키워드로 검색하면.. 더보기
2.2. Mask R-CNN을 Retrain 시켜보자 create_tf_record.py를 통해 TFRecord 파일을 만들었으니 이제 Retrain 하는 방법에 대해 알아볼 차례다. Retrain 방법에 대해 구글링해본 사람이라면 한 번쯤은 이런 생각을 해본 적 있지 않을까 싶다. (뭐.. 나만 삐뚫어진 걸 수도 있지만..ㅎㅎ) '뭐야, 이게 무슨 API야? 사용성이 너무 떨어지는데?' 그래서 기존에 알려진 방식보다 더 사용성을 높여 보려고 이것 저것 추가해서 작성해봤다. 순서는 다음과 같다.[pretrained_model 폴더]에 mask_rcnn_resnet101_coco_2018_01_28 모델 다운로드 모델은 detection_model_zoo에서 다운받으면 된다. [model_configs 폴더] 생성 후 ./object_detection/sam.. 더보기
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을.. 더보기
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.. 더보기
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연산이 훨씬 .. 더보기