no image
[Book Review] 파이썬으로 배우는 딥러닝 교과서
한빛미디어에서 "파이썬으로 배우는 딥러닝 교과서, 이미지 인식 모델을 만들면서 익히는 딥러닝" 이라는 책이 2020년 3월에 출간되었다 :) 예전부터 파이썬 언어 기반으로 된 총체적인 딥러닝 개념을 담은 책이 있었으면 좋겠다고 생각했었는데, 한빛 미디어에게 감사를 전한다. 이 책은 지은이인 이시카와 아키히코가 말하고 있듯, 파이썬 라이브러리를 이용하여 머신러닝과 딥러닝을 학습해 볼 수 있는 교과서 같은 책이다. 이 책의 최종적인 목표는 딥러닝 기술인 CNN(Convolutional Neural Network)를 이용하여 이미지 인식 프로젝트 구현까지 코딩하는 것을 목표로 한다. 불과 2~3년 전까지만 해도 CNN을 구현하여 이미지 인식을 한다는 것 자체가 어렵게 다가왔었으나, 딥러닝 기술이 무섭게 발전함..
2020.04.30
no image
[TensorRT] TensorRT 및 Tensor Core에서 NCHW vs NHWC 형식의 성능 차이
1. TensorRT : NCHW vs NHWC "It’s recommended to use NCHW format to get better performance with TensorRT." NVIDIA 에서는 TensorRT 입력 값으로 NCHW 포맷을 권장한다. 사용자가 TensorRT Engine 에 Input 값을 NHWC 포맷으로 입력해도 되지만, TensorRT 에서 최적화 될 때, 입력값과 호환되도록 여러 형식 변환기를 자동으로 삽입한다. 즉, NVIDIA는 입력값이 어찌되었던 GPU Acceleration 으로 인해 NCHW 를 형식을 채택한다. 또한, NHWC 형식을 선호하는 경우 UFF Parser 가 호환성을 처리할 수 있으며, 일반적으로 Caffe 는 NCHW 형식을 사용하며, 호환하..
2020.04.29
[OpenCV] Image Crop
OpenCV 에서 ROI 만큼 이미지를 Crop 시키는 방법은 아래와 같다. 간단한 방법인데, 잊지않으려고 정리한다. Python 구현 # x, y, w, h refers to the ROI for which the image is to be cropped. img = cv2.imread('test.jpg') cropped_img = img[y: y + h, x: x + w] C++ 구현 Mat img = cv::imread("test.jpg"); Rect bounds(0,0,img.cols,img.rows); Rect r(x,y,width,height); // partly outside Mat roi = img( r & bounds ); // cropped to fit image 위와 같이 구현하면 아..
2020.04.29
[TensorRT] 지원되는 연산자 목록 (2020.04.29 기준)
TensorRT 에서 지원되는 Operators 는 다음과 같다. (2020.04.29 기준) Caffe BatchNormalization BNLL Clip Concatenation Convolution Crop Deconvolution Dropout ElementWise ELU InnerProduct Input LeakyReLU LRN Permute Pooling Power Reduction ReLU, TanH, and Sigmoid Reshape SoftMax Scale Clip : When using the Clip operation, Caffe users must serialize their layers using ditcaffe.pb.h instead of caffe.pb.h in order t..
2020.04.29
no image
[ONNX] Pytorch 에서 Onnx 로 변환 시 Gather op 때문에 export 안되는 문제
Pytorch 에서 Onnx 모델로 변환시 Gather 와 같은 옵션 때문에 변환이 안되는 문제가 발생한다. 이유는 Onnx 에서 Gather 라는 옵션을 지원하지 않기 때문이다. (2020.04.28 기준) 아래와 같이 interpolate 를 scale factor 로 구현하였을 때 class ResizeModel(nn.Module): def __init__(self): super(ResizeModel, self).__init__() def forward(self, x): return F.interpolate(x, scale_factor=(2, 2), mode='nearest') 생성되는 그래프는 아래와 같다 위와 같이 구현할 경우 "Gather" 라는 op 이 붙어서 그래프가 생성되는데, Onnx ..
2020.04.28
[Linux] 터미널 창에서 ctrl + s
리눅스 터미널 창에서 버릇처럼 ctrl + s 를 누르게 되는데 이는 Data Sending 을 멈추는 것 이기 때문에 키가 안먹는 현상이 발생한다. 이 때 ctrl + q 를 누르면 일시정지된 창이 재개된다 ...
2020.04.21
no image
[TensorRT] NVIDIA TensorRT 개념, 설치방법, 사용하기
1. TensorRT 란? 2. TensorRT 설치하기 3. 여러 프레임워크에서 TensorRT 사용하기 1. TensorRT 란? TensorRT는 학습된 딥러닝 모델을 최적화하여 NVIDIA GPU 상에서의 추론 속도를 수배 ~ 수십배 까지 향상시켜 딥러닝 서비스를 개선하는데 도움을 줄 수 있는 모델 최적화 엔진이다. 흔히들 우리가 접하는 Caffe, Pytorch, TensorFlow, PaddlePaddle 등의 딥러닝 프레임워크를 통해 짜여진 딥러닝 모델을 TensorRT를 통해 모델을 최적화하여 TESLA T4 , JETSON TX2, TESLA V100 등의 NVIDIA GPU 플랫폼에 아름답게 싣는 것이다. 또한, TensorRT는 NVIDIA GPU 연산에 적합한 최적화 기법들을 이용하..
2020.04.21
[Python] Import 는 꼭 맨 윗줄에 써야하는가?
Python 내부에서는 모듈을 import 하는 함수를 여러번 실행하더라도 모듈은 한번만 Import 되기 때문에 사실상 어디서 하던 상관 없다고 한다. 심지어 함수 안에서 모듈을 import 하는 것이 실행속도가 더 빠르다고 한다. 왜냐하면 맨 위에서 컴파일하면 LOAD_GLOBAL 하는 반면, 함수 안에서는 LOAD_FAST 하기 때문에 함수 안에서 Import 하는 것이 더 빠르다고 한다. 그럼에도 불구하고 맨 위에 모듈을 import 하는 이유는 Python 스타일 가이드가 그렇게 쓰라고 권장했기 때문이다. 맨 위에서 import 하는 경우 import random def f(): L = [] for i in xrange(1000): L.append(random.random()) for i in ..
2020.04.17
[Pytorch] torch.cuda.is_available() is False
에러 내용 RuntimeError: Attempting to deserialize object on a CUDA device but torch.cuda.is_available() is False. If you are running on a CPU-only machine, please use torch.load with map_location=torch.device('cpu') to map your storages to the CPU. CUDA 10.0 버전에서 Pytorch 1.3.0 이상의 버전을 썼을 때 torch.cuda.is_available() 이 자꾸 false 가 뜨는 현상을 맞이했다. CUDA 및 Nvidia driver 와 적절하게 맞는 Pytorch 버전을 사용하지 않아서 생기는 문제 ..
2020.04.17
no image
[Book Review] 알쏭달쏭 C언어 180제
http://www.hanbit.co.kr/store/books/look.php?p_code=B1265473016 알쏭달쏭 C 언어 180제 프로그래밍 문제를 풀며 자연스럽게 C 언어를 배우는 초/중급 개발자를 위한 코드 중심 입문서. 총 13개 장, 180개 프로그램 문제와 1,249개 실전 문제를 제공한다. www.hanbit.co.kr http://www.hanbit.co.kr/store/books/look.php?p_code=B5801308380 알쏭달쏭 자바 200제 이 책은 프로그래밍 문제를 풀며 자연스럽게 자바를 배울 수 있는 초/중급 개발자를 위한 코드 중심의 자바 입문서입니다. 총 16개 장, 200개의 프로그램 문제와 1,115개 실전 문제로 구성되어 있습니다. 각 장에서 출제되는 코드..
2020.03.20
[TensorRT] AttributeError: 'NoneType' object has no attribute 'serialize'
에러 : AttributeError: 'NoneType' object has no attribute 'serialize' 이 에러는 말 그대로 TensorRT Engine 이 Serialize 되지 않는 문제인데, 다음과 같은 이유 때문에 Serialize 되지 않는 것이다. - builder.create_network() 함수에서 나온 network 가 노드들을 완전하게 포함하고 있지 않아서 생기는 문제 - Input 부터 Output 까지 필요한 노드들을 포함하고 있지 않기 때문에 아래와 같은 에러가 발생 - [TensorRT] ERROR: Network must have at least one output - Output Node 를 찾을 수 없어서 Output 이 인식이 안되는 것 - 그래서 반환..
2020.03.12
[Python] 파일 읽고 쓰기
1. 파일 생성하기 f = open("새파일.txt", 'w') f.close() 파일 열기 모드 r 읽기모드 - 파일을 읽기만 할 때 사용 w 쓰기모드 - 파일에 내용을 쓸 때 사용 a 추가모드 - 파일의 마지막에 새로운 내용을 추가 시킬 때 사용 2. 파일을 쓰기 모드로 열어 출력값 적기 # writedata.py f = open("C:/doit/새파일.txt", 'w') for i in range(1, 11): data = "%d번째 줄입니다.\n" % i f.write(data) f.close() 3. 파일 읽기 3.1 readline() # readline_all.py f = open("C:/doit/새파일.txt", 'r') while True: line = f.readline() if not..
2020.03.09