분석시각화 대회 코드 공유 게시물은
내용 확인 후
좋아요(투표) 가능합니다.
2022 Samsung AI Challenge (3D Metrology)
Simulation Dataset image의 시각화
그림과 같은 방식으로 모든 시뮬레이션 depth map 이미지의 각 행에서부터 pixel의 값을 추출하여 heat map을 만들어 보았습니다.
우측의 그래프에서 y축은 픽셀값(0~255), x축은 이미지에서 가로축 좌표 위치에 해당합니다.
※ 그림에서는 한개의 이미지에서 추출했으나, 이하의 도표에서는 모든 이미지에서부터 값을 추출하였습니다.
그림의 높이가 72px 이므로 72개의 도표가 나옵니다. 좌상단부터 우측으로 가면서 1px 씩 아래로 진행한다고 생각하면서 보시면 될 것 같습니다.
도표에서 색상이 color bar의 우측으로 갈수록 더 많은 빈도로 나타난 것으로 해석할 수 있습니다.
figure 작성을 위해 사용된 코드는 아래와 같습니다.
def draw_line_by_row(paths,save_dir_name): if(type(paths) is str): paths = sorted(glob.glob(paths)) pixel_tables=np.zeros((72,48,len(paths)),dtype=np.uint8) for i in range(0,len(paths)): img = cv2.imread(paths[i], cv2.IMREAD_GRAYSCALE) pixel_tables[:,:,i] = img.copy() heat_map = np.zeros((256,48,72)) for i in range(0,pixel_tables.shape[0]): for j in range(0,pixel_tables.shape[1]): t_unique, t_counts = np.unique(pixel_tables[i,j,:],return_counts=True) for t_height,t_value in zip(t_unique,t_counts): heat_map[t_height,j,i]=t_value bounds = np.append(1,np.arange(1000,30001,2000)) jet = cm.get_cmap('jet', 256) newcolors = jet(np.linspace(0, 1, 256)) black = np.array([0/256, 0/256, 0/256, 1]) #newcolors[:1, :] = black #colorbar customize newcmp = ListedColormap(newcolors) newcmp.set_over(newcolors[-1]) newcmp.set_under(black) norm = BoundaryNorm(bounds, newcmp.N) fig=plt.figure(figsize=(34,20),constrained_layout=True,) subplot = fig.subplots(nrows=3, ncols=24) #plt.subplots_adjust(left=0.05,right=1,top=1,bottom=0.2,wspace=0.3,hspace=0.1) i=0 for ax in subplot.flat: im_heatmap = ax.pcolor(heat_map[:,:,i],cmap=newcmp,#edgecolors='black', vmin=0,vmax=heat_map.max(),norm=norm); i=i+1; plt.tight_layout() plt.subplots_adjust(bottom=0.1) cb_ax=fig.add_axes([0.25,0.025,0.5,0.05]) ##<= (left,bottom,width,height) plt.colorbar(im_heatmap,cax=cb_ax,orientation='horizontal',pad=0.02,ticks=bounds,extend='both',norm=norm) os.makedirs(save_dir_name, exist_ok=True) heat_img_file_path = os.path.join(save_dir_name,'heatmap.png') plt.savefig(heat_img_file_path,dpi=fig.dpi) plt.cla() plt.clf() plt.close() depth_path_all = '../open/simulation_data/Depth/*/*/*.png' simulation_depth_paths_all = sorted(glob.glob(depth_path_all)) draw_line_by_row(np.unique(simulation_depth_paths_all),'./depth_hist_all')
sem 이미지도 위 도표와 같이 표시할 수 있습니다.
edge effect 및 노이즈 등의 영향으로 값의 분포가 depth map 이미지의 도표와 다른 것을 확인할 수 있습니다.
학습이 완료된 모델을 활용해 simulation dataset의 sem 이미지에서 depth map을 추출하고, 이를 시각화 해보았습니다.
이 모델에서는 최고높이의 구분이 모호하고, hole 영역의 깊이 추정이 특정값으로 수렴하는 것처럼 보이네요.
마지막으로.. 첨부파일은 위의 코드로 만들어진 Case별 sem 및 depth map 도표입니다.
(수정) 압축된 파일은 관리자만 볼 수 있는 줄 몰랐네요. :p
이상으로 시각화를 통한 데이터의 정량적 분석방법이었습니다.
편리한 분석방법이 있다면 함께 이야기를 나누면 좋겠습니다 :)
DACON Co.,Ltd | CEO Kookjin Kim | 699-81-01021
Mail-order-sales Registration Number: 2021-서울영등포-1704
Business Providing Employment Information Number: J1204020250004
#901, Eunhaeng-ro 3, Yeongdeungpo-gu, Seoul 07237
E-mail dacon@dacon.io |
Tel. 070-4102-0545
Copyright ⓒ DACON Inc. All rights reserved
감사합니다~
올려주신 자료를 참고하여 정성적인 방법으로 map을 보는 방법을 작성했습니다.
참고하시면 분석에 도움이 되실지도 모르겠네요
> https://dacon.io/competitions/official/235954/talkboard/406871