【Git】 Git 기초와 활용3 Readme/Rebase/onfig (terminal)

(Git) Git 기초와 활용3 Readme/Rebase/onfig (terminal)

https://www.youtube.com/watch?v=ys0lVeTHl7c&list=PLRx0vPvlEmdD5FLIdwTM4mKBgyjv4no81&index=15

아래의 내용은 다음의 내용을 요약 정리한 내용입니다.

https://www.youtube.com/watch?v=MFJIOqxK6k8&list=PLRx0vPvlEmdD5FLIdwTM4mKBgyjv4no81&index=11

1. Readme.md파일 작성하기

파일을 작성하기 위해서 마크 다운을 공부해야한다.

전체 git 마크 다운 공부할 때 참고할 사이트.

https://gist.github.com/ihoneymon/652be052a0727ad59601

핵심만 공부하기! https://ndb796.tistory.com/194?category=1029186

  1. #

# ## ###

#이 많아지면 글씨는 점점 작아진다. 5개까지 지원한다.

  1. ’’’ ‘’’

소스 코드 삽입하는 방법

3.실제 내용

하이퍼링크 넣기

    • +

순서가 없는 목차 나열하기

인용구문 처리하기

> “그냥 해라” -이충권-

  1. |—|

표만들기

이름영어정보수학

—|—|—|—|

나동빈98점87점100점
홍길동97점78점93점
이순신89점93점97점
  1. 굵은 글씨는 ** ** 중간 선은 ~~

raw : 가나 다라마바사 아야어야아자차카

output : 가나 다라마바사 아야어야아자차카

2. Archive(필요 X)

$ git archive –format=zip master -o Master.zip

​ #output이 다음과 같은 이름으로 다운받아진다

내가 가진 git폴더 내부의 내용들만 압축파일로 만들어서 친구에게 전해주고자 할 때

3. Rebase 명령어

이 명령어는 commit을 수정하거나 삭제하고자 할 때 사용한다.

우선 최근 commit내용을 다음으로 확인한다.

$ git log

최근(HEAD) 3개의 commit내역에 대해서 commit내용 변경을 원할 때, 다음을 사용한다.

아래의 3의 숫자를 바꿔 최근 몇번째 commit내용까지 수정을 원하는지 정할 수 있다.

ghrdms

$ git rebase -i HEAD~3 OR $ git rebase -i <commit code ex) 54ab4bf3561sdf81sd9f156h1 # 이 시점 이후의 모든 commit보여준다.

그러면 vi 창이 나온다. (-i옵션이 interaction을 나타내어 vi를 띄어준다)

img

내가 수정하고 싶은 commit부분을 reword로 바꿔주고 엔터를 치면, 새로운 vi화면이 나온다.

(하늘색 부분에 옵션이 있고 설명이 있다. )

drop이라는 키워드를 사용하면, 특정 commit이 삭제 된다.

그리고 그 commit자체가 처음부터 실행되지 않은 것처럼, 파일과 코드들도 다시 원래로 돌아온다. (삭제 혹은 생성)

(이때 commit삭제는 충돌이 일어날 가능성이 많으므로, 팀프로젝트에서는 하지 않는 것이 좋다.)

img

새로 나온 vi화면에서 내가 원하는 내용의 commit으로 바꾸고 Enter를 해준다.

4. config 명령어

$ git config –list # 나의 컴퓨터의 git 사용자를 말해준다.

만약 사용자를 지정해 놓지 않았다면, 다음 명령어를 사용해서 컴퓨터에 사용자 정보를 넣어준다.

$ git config –global user.name junha1125

$ git config –global user.email jnha@gmail.com

새로운 깃 repository만들기.

$ mkdir $ cd $ git init # 깃 프로젝트가 하나 생성되었다. $ cd ./git && ls # 이 내부에 있는 config파일에 사용자가 정의되어 있다. 바꿀 수 있다.

그리고 다시 원래 위치로 돌아가서

$ cd $ git congit user.name junha3

위와 같이 특정 repo에서 user가 새로 만들어졌다면, 이 user가 global user 보다 우선이다.

(추가적으로 config명령어를 통해 정말 많은 환경설정을 할 수 있으니 나중에 참고해 공부하기 바란다.)

5. commit을 했던 날짜와 시간을 바꾸기

$ git log

$ git rebase -f 54ab4bf3561sdf81sd9f156h1

pick -> edit -> :wq -> 엔터

$ GIT_COMMITER_DATE=”Oct 1 10:00:00 2018 +0000” git commit –amend –no-edit –date “Oct 1 10:00:00 2018 +0000”

$ git rebase –continue # 변경된 내역을 반영하겠다.

Git commit내용을 하나하나 살펴보면서 바꾸고 싶다면.. (링크)

$ git filter-branch

【Paper】 RBox-CNN Rotated Bounding Box 논문 리뷰

RBox-CNN Rotated Bounding Box based CNN for ShipDetection in Remote Sensing Image

0.Abstract

- 이 논문은 RBox-CNN 모델을 제안한다.

- Faster RCNN을 배이스로 사용한다.

- RPN(region proposal network)에서 RRoi(rotation region of interest)를 찾아낸다.

- ROI pooling layer에서 diagonal ROI pooling layer도 추가했다.

​ * 더 좋게 보정된 regression할 rocation을 찾아낸다.

- 선박 검출 문제에서 좋은 검출 결과를 얻었다.

- 항공 사진(원격 탐사 이미지) 객체 검출에 중요한 성과를 얻었다.

1.Introduction

- 원격 탐사 이미지(remote sensing technology) 사용의 중요성이 증가하고 있다. 이 사진은 항구 관리, 해군 전시 상황에서 많이 사용될 수 있지만, 복잡한 backgorund처리와 밀집된 배들을 처리하기에 어려움을 격고 있었다.

- 요즘 핫한 CNN을 사용하고, Faster RCNN을 사용할 것이다.

- 일반적인 BBox는 배경까지 포함하는 수직 직사각형이므로 정확한 분석이 어렵다. 도한 거기에 NMS을 시행한다면 잡아야할 객체를 잡지 못하는 문제가 발생하기도 한다.

(NMS : 객체 중복 검출을 막기위해 겹치는 영역의 BBox들 중에 신뢰도가 가장 높은 Box만 남겨놓는 방법.)

(IoU : 즉 a영역을 객체라고 분류를 했다면, 그 영역을 ground truth영역과 비교해서 iou가 0.5이상이면, a영역과 ground truth영역에 대한 regression 학습을 시키는 방법. 당연히 분류(클래스)에 대한 학습도 한다. 만약 객체라고 분류한 a영역의 IOU가 0.5이하 이면 그것으로 BBox regression 학습시키지 않는다.)

- 따라서 이러한 문제를 해결하기 위해 rotated BBox를 사용 해보고자 했다. 또 diagonal region-of-interest pooling layer 내용도 제안할 예정이다.

2.Related Work(최근에 시행된 관련 연구들)

3.Methodology(방법론)

- Faster R-CNN with rotation anchors

- RBox and DRoI pooling llayer

3.1 Rotated Dounding Box Anchor

\1. RBox 는 (x,y (center-point), h(짧은 모서리), w(긴 모서리), theta(시계 반대방향으로 돌아간 정도)) 5가지 원소를 가지는 튜플이다. theta는 [-pi/2,pi/2]의 범위를 가진다.

img

\2. RBox regression(loss) 는 오른쪽 그림과 같다. 여기서 smooth loss는 Fast-RCNN에서 정의된 내용이다.

img

img

Faster rcnn 유투브 강의자료 참조

3.2 RoI and DRoI pooling layer

- 그냥 pooling layer를 사용하는것이 아니고, rotated RoI pooling layer를 사용한다.

img

- rotated RoI pooling layer : Box를 수평한 방향으로 다시 회전시킨 후에, Rescale처리를 하는 방법.

(a) : 원래 이미지를 RBox로 예측한 모습

(b) : 회전 후 max pooling적용 -> crop한것 처럼 보임

(c) : diagnal RoI Pooing을 적용. (b)만을 이용한다면, 선박 위의 작은 물체들이 사라지거나 너무 안보이는 현상이 일어난다. 따라서 있는 그대로의 물체를 바라보기 위해 diagnal RoI를 적용한다.

최종 Achitecture

img

3.3 Loss function

img

최종 loss function은 다음과 같이 정의한다.

이때, p는 예측값 score이다 (softmax처리 한)

​ l은 실제 정답 값 score(one hot)

​ Lloc는 위의 수식에 있다.

4 experiments

5 conclusion

img

img

img

img

img

img

【Git】 Git 기초와 활용2 branch/conflict/log (terminal)

아래의 내용들은 이 동영상 강의 내용을 정리한 내용입니다.

https://www.youtube.com/playlist?list=PLRx0vPvlEmdD5FLIdwTM4mKBgyjv4no81

따로 공부하면 좋은 사이트

https://backlog.com/git-tutorial/kr/stepup/stepup2_1.html

ps. terminal에 작성한 gedit은 우분투 기본 텍스트 편집기 입니다. (윈도우의 메모장)

1. Branch 다루기

Master branch : 자동적으로 생성되고, 가장 중심이 되는 Branch이다.

다음과 같은 구조로 프로젝트가 이어나가도록 한다.

img

Merge : 합치기. 나눈 branch를 하나로 합치는 작업. 위의 사진의 2번째 노드에서 다른 branch와 만나 융합하는 작업이다.

Branch 관련 명령어

$ git branch

다음과 같이 별다른 branch를 만들지 않았다면, master만 있다.

$ git branch

새로운 branch를 만드는 방법.

$ git checkout NewBranchName $ git branch

내가 진짜 작업할 branch를 고르는 명령어

img

만약 파일을 수정하고, add하고 commit까지 해줬더라면, HEAD가 새로운 branch만 가리킨다.

img

만약 에러가 있어서 HEAD가 master와 origin/master까지 모두 가리키고 있다면, remote repo에 branch만들어주면 된다.

remote에도 나의 branch 추가해주기

$ git push –set-upstream origin junhaB

다음과 같이 한번 해주면 remote repository에 branch가 추가된것을 확인할 수 있다.

그리고 각각의 branch에 들아가서 add, commit을 따로따로 수행할 수 있다.

내가 어떤 branch에 들어가 있는지에 따라서, 파일들의 내용들이 완전히 바뀌는 것을 확인할 수 있다.

$ git log $ git status #내가 작업하는 branch가 어디인지 확인하능.

를 통해서 어디에서 작업하고 있고 어디에서 수정했는지 확인이 가능하다, (HEAD가 가리키는 방향)

img

img

img

branch 삭제하는 방법.(local repo에서만 삭제 된다.)

$ git branch -d $ git branch -D junhaB # junhaB에서 수정된 내용이 있더라도 commit을 안했더라도 강제 삭제

remote repo의 branch도 삭제하기

$ git push origin –delete

merge

$ git checkout master # master branch에 먼저가서 $ git merge # 이것과 융합한다. (합친다) 두개를 같게 만든다. $ git merge --no-f # git log graph를 그렸을때 branch에 대한 정보가 추가 된다.

2. Branch사이의 충돌 처리

2개의 branch에서 서로 다른 파일을 수정했다면, merge할 때, conflict(충돌)이 발생하지 않는다.

하지만 같은 파일을 수정했었더라면, merge할 때 충돌이 발생한다.

img

다음과 같이 같은 파일을 변경하고 Master로 돌아가서 merge를 시행하면, 어느 파일에 충돌이 발생한지 나온다.

충돌한 파일에 들어가면 «« 부터 »» 가 충돌한 부분이고,

master의 상태로 놔두고 싶다면, 초록색 박스를 남기고 빨간색 부분을 다 지우고

NewBracnh의 상태로 놔두고 싶다면, 파란색 박스를 남기고 빨간색 부분을 다 지우면 된다.

그리고 다음과 같이 그냥 다시 merge하면 안된다. add와 commit과정을 다시 하고 merge를 해야한다.

img

그리고 변경한 내용을 전부 remote repository에 올리려면 다음의 명령어

$ git push -f

img

3. Remote Repository 관리하기

$ git remote

해당 local repo에서 remote와 관련된 것이 무엇인지 보여준다.

기본적으로 origin을 보여준다.

origin에 대한 자세한 정보를 보고 싶다면,

$ git remote show origin

을 사용한다.

일반적으로 하나의 local repo와 하나의 remote repo를 연동시켜 놓는다.

하지만 하나의 local repo와 여러개의 remote repo를 연동 시켜 놓는것도 가능하다.

이때 사용가능한 명령어들은 다음과 같다.

$ git remote add test # 새로운 remote repo와 연결 $ git remote rename test temp # remote repo이름 바꿈 $ git remote -v # 전체 연결된 remote repo들을 확인해본다. $ git log origin/master # 특정 remote repo의 특정 branch에 대한 log를 확인하는 방법 $ git log temp/junhaB # 특정 remote repo의 특정 branch에 대한 log를 확인하는 방법

하지만 위에서 말했듯이 일반적인 경우에 local repo와 remote repo를 하나씩 연동하기 때문에

이 명령어들은 필요할때 찾아봐서 이용하면 된다. 즉 몰라도 된다.ㅎㅎ

4. Log 다루기

기본 적으로 다음의 명령어로 log를 확인할 수 있다.

$ git log $ git log –stat # 어떤 코드에 얼마나 많은 양의 수정을 했는지 그려준다

-p 옵션

$ git log -p

정확히 어떤 변경을 했는지, 코드 내부의 내용까지 보여주면서 log정보를 보여준다.

pretty옵션

$ git log –pretty=oneline 출력 결과 1a19ea5a514a2525815ec23b87bb6f2cd8b4781b (HEAD -> master, origin/master) commend ad875c560f0f6ce50e791efe6d1c2a9b51c73b45 commend 3793893ad7f56190be06b916ed3b1cc67443108a add line of aa 42b8cb2c1a42b8c12bf4d4f47e67c5ba6236ac0e add junha.py. 수정 readme 1916e39cf972406de7f89407ab35587e450342d0 first commit[readme.md]

commit했던 것들을 깔끔하게 보여준다.

pretty에 대한 공부는 아래의 페이지를 이용하면 좋다.

http://www.dreamy.pe.kr/zbxe/CodeClip/3766623

복잡하면 이것만 사용하기 :

$ git log –pretty=format:”%h -> %an : %s” –graph

그리고 아래의 명령어를 사용해서 내가 원하는 commit으로 돌아갈 수 있다.

$ git reset –hard

img

reset한 것을 다시 원래 대로 돌리고 싶다면 다음의 명령어를 사용한다. (by )

$ git reflog # 출력값 확인하기 $ git reset –hard HEAD@{위의 출력에서 하나 선택}

img

【Docker】 Docker 설치 및 기초 명령어

(Docker) Docker 설치 및 기초 명령어

설치

우분투에 도커 설치하는 방법 :

https://www.youtube.com/watch?v=vd8T27BQ2sA

강의 내용 정리

  1. https://docs.docker.com/install/linux/docker-ce/ubuntu/
  2. CE : 무료배포용 EE는 기업용
  3. 그냥 설치 따라하면 설치완료.
  4. 동영상에 있는 것 사용하지 말고, 도커 공식 홈페이지 명령어로 설치하기
  5. Install using the repository부분을 함으로써 도커 repository를 우분투에게 가르쳐 준다
  6. 그리고 INSTALL DOCKER ENGINE - COMMUNITY의 부분까지 마무리해서 설치해주기.
  7. Verity까지 마무리 해주기 : sudo docker run hello-world

ps. nvidia-docker는 docker설치 이후에 설치할 것.

장점 : cuda설치 하지 않고 tensorflow-gpu이용 가능.

설치하는 방법 : 다음의 사이트에 들어가서 순서대로 설치 https://github.com/NVIDIA/nvidia-docker

Docker강의내용

https://www.youtube.com/watch?v=ofY3_pnOXJ0

  1. docker search

img

  1. docker pull

이미지를 받아온다.

  1. docker run

Docker run을 했을때 이미지가 없으면, 자동으로 pull을 통해 이미지를 다운 받는다.

추가로 아래 동영상에서는 -p즉 포트번호를 지정해서, 사용하는 방법에 대해 나와있다.

https://www.youtube.com/watch?v=pMY_wPih7R0&list=PLEOnZ6GeucBVj0V5JFQx_6XBbZrrynzMh&index=3

【Git】 Git개념 및 기본 명령어 공부1 (terminal)

아래의 내용들은 이 동영상 강의 내용을 정리한 내용입니다.

https://www.youtube.com/playlist?list=PLRx0vPvlEmdD5FLIdwTM4mKBgyjv4no81

1. Git 설치와 사용법

img

모든 사람들이 소스코드를 공유한다는 전제로, 사람들이 무료로 이용하게 만들어 놓았다.

로그인 후 리포지터리를 만들어 보기.

Add gitignore : 올리지 않은 파일을 선택하여 git 레파지를 만든다.

Add license : 오픈소스 라이센스 어떤것을 추가했는지 명시

Git을 terminal에 찍으면 다양한 사용방법을 확인할 수 있다.

img

가장 맨 처음 git을 나의 환경으로 사용하기위해 쳐야하는 명령어는 다음과 같다.

$ git config –global user.name junha1125

$ git config –global user.email jnha@gmail.com

나의 컴퓨터를 local로 사용하기 위해 처줘야하는 명령어

img

우리의 컴퓨터 : local repository

Git 사이트 : Remote repository

img

그리고 push과정을 거처야 한다.

Remote repository에 파일이 올라간 것을 확인할 수 있다.

img

2. 오픈소스를 사용하는 이유

https://ndb796.tistory.com/185?category=1029186

3. 동작원리

img

img

working에서 add를 추가해 줌으로써, staging Area에 커밋할 파일 올린다.

https://ndb796.tistory.com/187?category=1029186

img

Merge : comflict가 발생 했을 때를 위해서.

Pull = fetch, merge를 한번에 사용할 수 있는 명령어이다.

Local repo :

img

해쉬값을 이용해서 comflict을 막는다.

4. git명령어 공부해보기.

img

git내부 변경된 상태를 확인한다.

$ git status

commit할 파일 추가하기 즉 Stageing Atrea에 파일 추가하기.

$ git add ./file

Add를 해서 Staging Area에 있는 파일을 제거할 수 있다(즉 add취소)

$ git reset ./file

img

reset으로 부분 add제거를 할 수 있지만,

전체 add제거도 가능하다.(reset뒤에 파일을 안적으면 전체 add가 취소된다.)

img

굳이 내가 add할 파일을 명시하지 않아도, 수정된 전체를 add하겠다면 “ . “ 사용

$ git add .

$ git status

후 어떤 곳에 수정이 있었다고 뜨면…

$ git checkout – junha.py

와 같이 checkout명령어를 이용하면 원래 상태로 돌려준다.

즉 위에 수정됬다는 내용이 전부 사라진다.

$ git commit –m “message 추가하기”

$ git push

5. Commit 내역 수정하기

$ git pull

img

$ git log

최근까지 commit내역들을 살펴본다

img

$ git reset –hard 1916e39cf972406de7f89407ab35587e450342d0

여기 부분 이후의 변경건은 모두 무시하겠다.

reset에 soft옵션, mixed옵션도 있다. =

$ git push –f

을 해야 오류가 안뜬다.

-f : 강제로 push하는 방법

Git message 수정하는 방법

http://tech.javacafe.io/2018/03/01/how-to-change-git-commit-message/

$ git commit –amend

만 치면 vi가 뜬다. (vi사용법 알아야한다.)

최근 commit내용 수정하기

$ git commit –amend

:a -> 수정시작 Esc -> :wq! -> 저장

【Docker, Git】 Youtube 한글 강과 공부법과 순서

(Docker,Git) Youtube 한글 강과 공부법과 순서

<1시간 Docker, Git 공부하기>

[Docker]

  1. https://www.youtube.com/watch?v=2-w679FFMrc - 10분
  2. https://www.youtube.com/watch?v=I2wlvCybB4s - 10분
  3. https://www.youtube.com/watch?v=vd8T27BQ2sA - 10분 : 도커 설치하는 방법
  4. https://www.youtube.com/watch?v=ofY3_pnOXJ0- 14분
  5. 이 정도는 도커 간단히 다루는 수준까지 입니다. 블로그를 통해서 공부하시는 것을 추천합니다.

[Git]

https://www.youtube.com/watch?v=rhP5pseOJc0&list=PLw0AGthrdx37TmxVjo8pK2c_8vyuOQj3h

- 4강부터 10강까지(1개당 10분) 7개의 강좌

<1일 2시간. 2주동안 공부하기>

[Docker 공부 순서]

1일차

https://www.youtube.com/watch?v=2-w679FFMrc - 10분

https://www.youtube.com/watch?v=I2wlvCybB4s - 10분

https://www.youtube.com/watch?v=vd8T27BQ2sA - 10분 : 도커 설치하는 방법

2일차~10일차

https://www.youtube.com/watch?v=MHzxhoBmCwA&list=PLEOnZ6G분eucBVj0V5JFQx_6XBbZrrynzMh&index=1 - 강좌 9개 (1개당 45분 )

11일차~12일차 (1일 5개)

https://www.youtube.com/watch?v=HbKCxBFT2wk&list=PLRx0vPvlEmdChjc6N3JnLaX-Gihh5pHcx - 강좌 11개 (1개당 10분)

[Git 공부 순서]

1일차~10일차

https://www.youtube.com/watch?v=JZJQ4_8XoPM&list=PLHF1wYTaCuixewA1hAn8u6hzx5mNenAGM

https://www.youtube.com/watch?v=hFJZwOfme6w&list=PLuHgQVnccGMA8iwZwrGyNXCGy2LAAsTXk

11일차~12일차 (1일 5개)

https://www.youtube.com/watch?v=rhP5pseOJc0&list=PLw0AGthrdx37TmxVjo8pK2c_8vyuOQj3h

- 강좌10개 (1개당 10분)

스터디 계획서

주 3회 화,목,토 스터디. 스터디 시간 : 8pm~8:30pm

발표자 준비사항 : 강의 내용 및 중요 명령어 문서로 정리해서 발표하기

1234567
1일차공부2일차공부회의 :월화 내용3일차공부4일차공부회의 : 수목 내용5일차공부6일차공부회의 :금토내용부족했던것 알아서공부
891011121314
7일차공부8일차공부회의 :월화 내용9일차공부10일차공부회의 :수목 내용11일차공부12일차공부회의 : 금토내용부족했던것 알아서공부

【Paper-RL】 DQN - playing Atari, Human-level control 논문 리뷰

연구실에서 매주 하는 논문 리뷰의 발표를 위해,

(2013)Playing Atari with Deep Reinforcement Learning

https://www.cs.toronto.edu/~vmnih/docs/dqn.pdf

(2015.1)Human-level control through deep reinforcement

https://web.stanford.edu/class/psych209/Readings/MnihEtAlHassibis15NatureControlDeepRL.pdf

2개의 논문을 읽고 발표를 준비했습니다.

아래 슬라이드에서 홍색 배경의 슬라이드는 playing atari 논문에서 읽은 내용이고,

청색 배경의 슬라이드는 human-level control 논문에서 읽은 내용입니다.


img

img

img

img

img

img

img

img

img

img

img

img

img

img

img

img

img

img

img

img

img

img

img

img

img

【Python-Module】 Numpy Scipy Matplotlib 기초

원본 페이지 : https://junha1125.tistory.com/41?category=835551

[CS231 Justin Johnson] 교수님이 작성해주신 글로 공부한 내용입니다.**

Python Numpy TutorialThis tutorial was contributed by Justin Johnson. We will use the Python programming language for all assignments in this course. Python is a great general-purpose programming language on its own, but with the help of a few popular libraries (numpy, scipy,cs231n.github.io

1. Numpy

- [내용 중간중간에 있는 링크가 매우 유용하니 참고할 것]

- 배열은 동일한 자료형을 가지는 값들

- 값들은 튜플 형태로 색인 된다.

- rank : 몇차원 행렬인가?

- shape : 몇 곱하기 몇 행렬인가. channel * hight * width

배열 생성

>> a = np.array( [[1, 2, 2], [2, 2, 2]] ) >> a.shape

배열 생성 함수

a = np.zeros([2,2]) # 2*2 0행렬 생성 b = np.ones((1,2)) # ()를 사용하던 []를 사용하던 상관 x c = np.full((2,2), 7) # 모든 값을 7로 채운 배열 d = np.eye(2) # 단위백터 e = np.random.random((2,2)) # random vector 생성

numpy배열 인덱싱하기. (슬라이싱)

a = np.array([[1,2,3,4], [5,6,7,8], [9,10,11,12]]) a[1] == [5,6,7,8] a[1][3] == 7 a[:2, 1:3] == 0,1행과 1,2열 == [[2 ,3],[6,7]] b = a[:2, 1:3] # 단순복사 -> copy of reference

numpy배열 인덱싱하기. (불연속적인 원소 가져오기)

a = np.array([[1,2], [3, 4], [5, 6]]) b = a[[0, 1, 2], [0, 1, 0]] == [a[0, 0], a[1, 1], a[2, 0]] # 즉 행렬의 (0,0) (1,1) (2,0) 원소만 가져오기 즉 1*3행렬

응용하기. b = np.array([0, 2, 0, 1]) c = a[np.arange(4), b] # 즉 a행렬의 (0,0) (1,2) (2,0) (3 1)원소 즉 1*4행렬 # arange/linespace c += 10 print(a) # copy of reference이므로 위의 a행렬의 일부 원소도 10이 더해져 있을 것이다.

불리언 배열(mask 배열)

a = np.array([[1,2], [3, 4], [5, 6]]) bool_idx = (a > 2) print(a[bool_idx]) # 출력 “[3 4 5 6]” print(a[a > 2]) # 출력 “[3 4 5 6]”

자료형

배열 원소의 모든 자료형은 동일 x = np.array([1, 2]) print(x.dtype) # 자료형 알려주는 맴버함수 x = np.array([1, 2], dtype=np.int64) # 특정 자료형을 명시적으로 지정해주는 방법

배열 연산

x + y // x - y // x * y // x / y # 기본 사칙 연산자를 사용해서 해당 위치의 원소들과 계산 된다. np.sqrt(x) # 배열 전체에 sqrt처리 하기

행렬의 곱을 위해서는 dot함수를 사용한다. x.dot(y) np.dot(x, y)

sum함수[수학 함수를 다루는 문서]

np.sum(x) # 행과 열 상관없이 모든 요소의 합 np.sum(x, axis=0) # 열이 같은 요소들을 합해서 1차원 백터로 return #주의# np.sum(x, axis=1) # 행이 같은 요소들을 합해서 1차원 백터로 return #주의#

전치[배열을 다루는 문서]

x.T print(x) # 전치가 적용된 x가 출력된다.

브로드캐스팅

- shape가 다른 배열 간에도 산술 연산이 가능하게 하는 메커니즘

- 예를 들어, 행렬의 각 행에 상수 벡터를 더하는 것

x = np.array([[1,2,3], [4,5,6], [7,8,9], [10, 11, 12]]) # 43 행렬 v = np.array([1, 0, 1]) # 13 행렬 y = x + v # v라는 행렬이 행 방향으로 자동 확대 된다.

[broadcasting되는 조건] 은 아래와 같다.

  1. 두 배열이 동일한 rank를 가지고 있지 않다면, 낮은 rank의 1차원 배열이 높은 rank 배열의 shape로 간주합니다.
  2. 특정 차원에서 두 배열이 동일한 크기를 갖거나, 두 배열 중 하나의 크기가 1이라면 그 두 배열은 특정 차원에서 compatible하다고 여겨집니다.
  3. 두 행렬이 모든 차원에서 compatible하다면, 브로드캐스팅이 가능합니다.
  4. 브로드캐스팅이 이뤄지면, 각 배열 shape의 요소별 최소공배수로 이루어진 shape가 두 배열의 shape로 간주합니다.
  5. 차원에 상관없이 크기가 1인 배열과 1보다 큰 배열이 있을 때, 크기가 1인 배열은 자신의 차원 수만큼 복사되어 쌓인 것처럼 간주합니다.

[추가]

np.reshape(v, (3, 1)) # 13행렬의 v가 31행렬이 된다. reshape를 하려면, 총 요소의 갯수가 같아야 한다.

[broadcasting을 활용한 화려한 연산] :브로드캐스팅은 보통 코드를 간결하고 빠르게 해준다. 따라서 가능한 많이 사용해야 한다.

import numpy as np

###   1.   ### 
# 벡터의 외적을 계산
v = np.array([1,2,3])  # v의 shape는 (3,)
w = np.array([4,5])    # w의 shape는 (2,)
# 외적을 계산하기 위해, 먼저 v를 shape가 (3,1)인 행벡터로 바꿔야 합니다;
# 그다음 이것을 w에 맞춰 브로드캐스팅한뒤 결과물로 shape가 (3,2)인 행렬을 얻습니다,
# 이 행렬은 v와 w 외적의 결과입니다:
# [[ 4  5]
#  [ 8 10]
#  [12 15]]
print np.reshape(v, (3, 1)) * w

###   2.   ###
# 벡터를 행렬의 각 행에 더하기
x = np.array([[1,2,3], [4,5,6]])
# x는 shape가 (2, 3)이고 v는 shape가 (3,)이므로 이 둘을 브로드캐스팅하면 shape가 (2, 3)인
# 아래와 같은 행렬이 나옵니다:
# [[2 4 6]
#  [5 7 9]]
print x + v

###   3.   ###
# 벡터를 행렬의 각 행에 더하기
# x는 shape가 (2, 3)이고 w는 shape가 (2,)입니다.
# x의 전치행렬은 shape가 (3,2)이며 이는 w와 브로드캐스팅이 가능하고 결과로 shape가 (3,2)인 행렬이 생깁니다;
# 이 행렬을 전치하면 shape가 (2,3)인 행렬이 나오며
# 이는 행렬 x의 각 열에 벡터 w을 더한 결과와 동일합니다.
# 아래의 행렬입니다:
# [[ 5  6  7]
#  [ 9 10 11]]
print (x.T + w).T
# 다른 방법은 w를 shape가 (2,1)인 열벡터로 변환하는 것입니다;
# 그런 다음 이를 바로 x에 브로드캐스팅해 더하면
# 동일한 결과가 나옵니다.
print x + np.reshape(w, (2, 1))

###   4.   ###
# 행렬의 스칼라배:
# x 의 shape는 (2, 3)입니다. Numpy는 스칼라를 shape가 ()인 배열로 취급합니다;
# 그렇기에 스칼라 값은 (2,3) shape로 브로드캐스트 될 수 있고,
# 아래와 같은 결과를 만들어 냅니다:
# [[ 2  4  6]
#  [ 8 10 12]]
print x * 2

2. SciPy

numpy를 바탕으로 만들어진 라이브러리. numpy보다 더 많은 함수를 제공하고 과학, 공학분야에 사용된다.

a. 이미지 작업하기

from scipy.misc import imread, imsave, imresize img = imread(‘assets/cat.jpg’) # 이미지 가져오기 img.dtype, img.shape # 이미지의 shape와 type알아보기 img_tinted = img * [1, 0.95, 0.9] # broadcasting을 이용해서 RGB각각에 1 0.95 0.9 곱해주기 img_tinted = imresize(img_tinted, (300, 300)) # 이미지 크기 바꾸기 (400248) -> (300300) imsave(‘assets/cat_tinted.jpg’, img_tinted) # 바꾼 이미지 저장하기

b. matlab 파일 다루기

scipy.io.loadmat 와 scipy.io.savemat함수를 통해 matlab 파일을 읽고 쓸 수 있다.

c. 두 점 사이의 거리

scipy.spatial.distance.pdist함수는 주어진 점들 사이의 모든 거리를 계산한다. 혹은 scipy.spatial.distance.cdist

import numpy as np from scipy.spatial.distance import pdist, squareform d = squareform(pdist(x, ‘euclidean’))


3. Matplotlib

a. 함수그리기

matplotlib.pyplot 모듈 내부에 있는 함수를 이용하면 편하다.

import matplotlib.pyplot as plt x = np.arange(0, 3 * np.pi, 0.1) y = np.sin(x) plt.subplot(2, 1, 1) # 2*1 행렬에 1번째 원소로 아래의 그래프가 들어간다. plt.plot(x, y) plt.xlabel(‘x axis label’) plt.ylabel(‘y axis label’) plt.title(‘Sine and Cosine’) plt.legend([‘Sine’, ‘Cosine’]) plt.show()

b. 이미지 나타내기

from scipy.misc import imread, imresize import matplotlib.pyplot as plt # 이미지 가져오기 scipy를 이용해서 가져오기 img = imread(‘assets/cat.jpg’) # 1 plt.subplot(1, 2, 1) plt.imshow(img) # 2 plt.subplot(1, 2, 2) plt.imshow(np.uint8(img_tinted))

plt.show()

【선박분류】 대회 설명 및 대회 결과 - 위성 영상 정밀 객체 검출 [알파프로젝트]

원본 글 위치 : https://junha1125.tistory.com/30?category=836123

1. 대회 설명

우리가 준비하는 대회는 한국국방과학연구소에서 주관하는 대회로써, 위성 사진에서 컨테이너, 유조선, 항공모함, 기타 민간 선박을 검출 및 분류하는 대회이다. 왼쪽 이미지와 같은 위성 사진의 해양 항구, 바다 이미지에서 객체를 오른쪽 사진과 같이 검출한다.

데이콘 대회 링크 :

https://dacon.io/competitions/official/235492/data?join=1

img

2. 대회 배경

  • 우리는 위성으로부터 수집된 영상의 정밀한 객체 인식하는 문제를 해결하고자 하며, 특히 선박들의 위치와 종류를 파악하는 알고리즘을 연구하고 개발하고자 한다.
  • 실제 해상에서 일어나고 있는 다양한 문제들을 해결하기 위해서는 인공위성 영상으로부터 객체 검출을 위한 알고리즘개발은 매우 중요하며 필수적이다. 특히 삼면이 바다인 한반도에서는 실시간 위성 영상으로부터 자동으로 다양한 종류와 크기의 해상 표적을 검출하는 것이 필수적인 기술이다.
  • 따라서 최신 깊은 인공신경망과 딥러닝을 이용한다면 해상 표적탐지 핵심 기술 역량을 확보할 수 있을 것으로 예상한다. 실제 해당 기술을 활용하면, 불법적인 선박을 효율적으로 검출 및 추적뿐만 아니라 해상 조난이 발생했을 경우, 조난 선박의 위치를 더 정확하고 신속히 파악하여 대처하는 것이 가능하다.
  • 인공위성 영상로부터 정밀 객체를 검출해내는 과제에서의 가장 큰 문제점은위성 사진은 다른 여타 사진들과는 다르게 해상도가 많이 떨어진다는 것이다. 그러므로 우리가 해결해야 하는 과제는 해상도를 높이는 작업과 객체를 정밀 검출하는 작업으로 총 2가지로 구분될 수 있다.

3. 한학기 전체 계획 및 목표

인공위성 영상으로부터 선박의 종류를 인식하고 그 선박의 위치를 검출하는 딥러닝 모델을 구축하기 위해 다음의 절차를 수행한다.

1) 데이터 전처리

  • 딥러닝 모델을 만들기 위해, 최대한 많은 인공위성 사진을 수집한다.
  • 단지 사진만 주어지면, 학습이 불가능하므로 주어진 사진에 선박이 어디에 있는지, 그리고 그 선박의 종류가 무엇인지에 관한 정보를 추가한다.

2) 신경망 구성

  • 인공위성 사진은 화질이 낮으므로, 그대로 객체 검출에 사용하기에 부적절하다. 따라서 초해상화(Super-Resolution)를 하는 신경망을 따로 구성하여 객체 검출의 정확도를 높인다.
  • 해상도가 높아진 사진을 기반으로 객체 검출(Object Detection)을 하는 신경망을 제작하고 학습시킨다.

3) 결과 확인

  • 선박 위치 탐색과 객체 검출을 성공적으로 수행하는지 판단하여, 우리가 구축한 모델이 정확히 동작하는지 확인한다.
  • 구축한 모델이 잘 동작하지 않는다면, 모델을 수정해가면서 최상의 성능으로 동작하는 모델을 구축해 나간다.

img프로젝트의 전체 흐름도

4. 대회 결과

주어진 시간이 2주라는 시간 밖에 없었고, (늦게 대회를 신청해서..)

컴퓨팅 파워(코랩, DLPC 사용)가 부족해서 매우 좋은 성과는 내지 못하였습니다.

하지만 대회를 대회를 준비하면서 많은 것을 배우고 느꼈습니다.

image

60팀 참가 중 10위를 했지만, 다른 1위~7위 사람들에 비해서는 그래도 많이 낮은 성능을 보였습니다.

시간이 더 있었다면, 좋은 성능을 낼 수도 있었을 것 같아 조금은 아쉽습니다.

다음에 기회가 생겨 대회에 다시 참가한다면, 3위 이내에 들어가는 결과를 얻을 수 있도록

더욱더 꾸준히 성실히 노력하겠습니다.

Pagination


© All rights reserved By Junha Song.