분류 전체보기 428

10. 선형 자료 구조 - 스택

스택과 큐는 프로그래밍이라는 개념이 탄생할 때부터 사용된 가장 고전적인 자료구조 중 하나로, 그중에서도 스택은 거의 모든 애플리케이션을 만들 때 사용되는 자료구조이다. LIFO(last in first out_후입선출), 큐는 FIFO(first in first out_선입선출)로 처리된다. 파이썬은 스택 자료형을 별도로 제공하지는 않지만, 리스트가 사실상 스택의 모든 연산을 지원한다. 큐 또한 마찬가지다. 리스트는 큐의 모든 연산을 지원한다. 다만 리스트는 동적 배열로 구혀노디어 있어 큐의 연산을 수행하기에는 효율적이지 않기 때문에, 큐를 위해서는 데크라는 별도의 자료형을 사용해야 좋은 성능을 낼 수 있다. 연결 리스트를 이용한 스택 ADT 구현 class Node: def __init__(self,i..

object detection project - keras를 사용한 detection(2)

이제 학습된 가중치를 가져와서 직접 ROI 영역을 cv2 함수를 사용해 detection 해 보겠다. 내 노트북에서는 계정 이름이 한글로 설정되어 있어 오류가 나오는것 같다. 코드는 다음과 같다. import numpy as np import cv2 import tensorflow as tf from tkinter import * from tkinter import filedialog import tkinter.scrolledtext as tkst min_confidence = 0.5 width = 800 height = 0 show_ratio = 1.0 file_name = "./custom/fruit10.jpg" classes_name = "./custom/classes.txt" weight_name..

Object Detection 2021.08.26

object detection project - keras를 사용한 detection(1)

앞선 포스팅에서는 yolo를 사용해 물체를 detect 했다. 이번에는 직접 케라스를 이용해서 CNN을 통해 image들을 학습시킨 후, image 안에 존재하는 객체를 ROI로 영역을 나누어서 객체 탐지를 해보겠다. 먼저 파일들의 경로와 필요한 모듈을을 import 해준다. import tensorflow as tf from tensorflow import keras import numpy as np import matplotlib.pyplot as plt import math import os import cv2 batch_size=128 num_classes=0 epochs=100 CW=32 CH=32 CD=3 model_name='fruit_custom.h5' # tflite_model_name=..

Object Detection 2021.08.24

Custom YOLO project - custom data 학습

이번 포스팅에서는 이전에 세팅했던 darknet 환경을 이용해서 나만의 데이터를 가지고 yolo를 통해 object detection을 수행해 보겠다. 먼저 다시 쿠다를 설치해주고(초기화 되었으므로) # install cuda !tar -xzvf drive/My\ Drive/darknet/cuDNN/cudnn-11.0-linux-x64-v8.0.4.30.solitairetheme8 -C /usr/local/ 쿠다를 사용할 수 있게 권한을 추가 해준다. !chmod a+r /usr/local/cuda/include/cudnn.h 이제 DarkNet을 불러오자. import os if not os.path.exists('darknet'): os.makedirs('darknet') %cd darknet # /..

Object Detection 2021.08.21

Custom YOLO project - 코랩에 darknet 불러오기

이번 포스팅에서는 custom yolo project를 하기 위한 세팅에 대해 알아보겠다. yolo는 darknet기반으로 실행되기 때문에 자신의 개별환경에 맞게 세팅을 해 놓아야 한다. 먼저 cuda 버전을 확인해보자. !/usr/local/cuda/bin/nvcc --version 내가 쓰는 코랩의 cuda 버전은 11.0임을 알 수 있다. 여기서 NVIDA 사이트에 들어가서 https://developer.nvidia.com/rdp/cudnn-download 자신의 버전의 맞는 드라이버를 설치해주면 된다. 여기서는 /content/drive/MyDrive/darknet/cudnn 위치에 이 파일을 저장했다. 이제 이 파일의 압축을 풀어줘야 한다. !tar -xzvf drive/My\ Drive/da..

Object Detection 2021.08.21

Custom YOLO project - 대용량 xml파일 라벨링 해주기

이전 포스팅에서는 몇장 안되는 이미지의 객체들을 쉽게 손으로 라벨링 할 수 있었다. 그러나 대용량의 이미지를 직접 손으로 하는 것은 매우 힘들것이다. 만약 xml파일이 있다면 다음 코드를 통해 yolo format의 이미지 txt 파일로 yolo 좌표체계를 추출할 수 있다. from xml.dom import minidom import os current_path=os.path.abspath(os.curdir) print('Current path is {}'.format(current_path)) YOLO_FORMAT_PATH=current_path + '/apple-data/train/images' XML_FORMAT_PATH=current_path + '/apple-data/train/annotati..

Object Detection 2021.08.21

Custom YOLO project - YOLO 이미지 데이터 만들기

1. 이미지 레이블링 하기 yolo가 인식하는 이미지의 좌표형식은 다음과 같다. 위 사진의 좌표는 옆에 메모장 처럼 상대좌표이다. 이렇게 이미지와 txt파일을 생성해야 하는데 이렇게 만드는 방법은 여러가지가 있는데 나는 labelimg 파일을 사용해서 만들어 보겠다. cmd창을 열어서 pip install LabelImg를 입력해 LabelImg를 다운받은 후 cmd창에 LabelImg를 입력해 LabelImg 프로그램을 실행시킨다. 이렇게 이미지 마다 레이블을 붙여줄 수 있다. 이렇게 작업이 끝나면 사진 옆에 [img이름].txt 파일이 생기게 된다. 2. .names, .data, .cfg , train.txt, test.txt파일 생성하기 다음 코드를 통해 만들수 있다. 먼저 이번 프로젝트에서는 코..

Object Detection 2021.08.21

9. 선형자료구조 - 배열 (in, 성능 높이기)

자료구조는 크게 메모리 공간 기반의 연속 방식과 포인터 기반의 연결 방식으로 나뉜다. 배열은 이 중에서 연속 방식의 가장 기본이 되는 자료형이다. https://leetcode.com/problems/two-sum/ Two Sum - LeetCode Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview. leetcode.com 덧셈하여 타겟을 만들 수 있는 배열의 두 숫자 인덱스를 리턴하라. 이 문제는 매우 쉽다. 그러나 최적화할 수 있는 여러가지 방법이 숨어 있어서 코딩 인터뷰 시 높은 빈도로 출제되는 문제..

8. 가장 긴 팰린드롬 부분 문자열(투포인터, 슬라이딩 윈도우,max)

https://leetcode.com/problems/longest-palindromic-substring/ Longest Palindromic Substring - LeetCode Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview. leetcode.com 가장 긴 팰린드롬 부분 문자열을 출력하라. 개인적으로 상당히 까다로웠다고 생각되었던 문제이다. 이 문제로 투포인터, 슬라이딩 윈도우, 조건부 max() 함수에 대해서 정확히 이해할 수 있게 되어서 포스팅에 올리겠다. 이 문제의 핵심 포인트는 슬라이딩 윈..

알고리즘 2021.08.18

yolov3를 이용한 객체 탐지

이번 포스팅에서는 yolov3를 이용해 object detection을 하는 방법에 대해 정리해보겠다. 여기서는 사전학습된 weights 를 가지고 객체탐지를 실행했다. 코드 설명은 주석마다 잘 설명해놓았다. 1. 이미지 객체 인식 import cv2 import numpy as np min_confidence=0.5 # Load yolo net=cv2.dnn.readNet('yolov3.weights','yolov3.cfg') classes=[] with open('coco.names','r') as f: # 파일을 읽어와 f에 두고 classes=[line.strip() for line in f.readlines()] # 이름 파일의 이름들이 배열에 들어감 # yolo의 작동 방식 layer_name..

Object Detection 2021.08.17